lkml.org 
[lkml]   [2010]   [Aug]   [31]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH 2/3] mm: page allocator: Calculate a better estimate of NR_FREE_PAGES when memory is low and kswapd is awake
    Date
    > +#ifdef CONFIG_SMP
    > +/* Called when a more accurate view of NR_FREE_PAGES is needed */
    > +unsigned long zone_nr_free_pages(struct zone *zone)
    > +{
    > + unsigned long nr_free_pages = zone_page_state(zone, NR_FREE_PAGES);
    > +
    > + /*
    > + * While kswapd is awake, it is considered the zone is under some
    > + * memory pressure. Under pressure, there is a risk that
    > + * per-cpu-counter-drift will allow the min watermark to be breached
    > + * potentially causing a live-lock. While kswapd is awake and
    > + * free pages are low, get a better estimate for free pages
    > + */
    > + if (nr_free_pages < zone->percpu_drift_mark &&
    > + !waitqueue_active(&zone->zone_pgdat->kswapd_wait)) {
    > + int cpu;
    > +
    > + for_each_online_cpu(cpu) {
    > + struct per_cpu_pageset *pset;
    > +
    > + pset = per_cpu_ptr(zone->pageset, cpu);
    > + nr_free_pages += pset->vm_stat_diff[NR_FREE_PAGES];

    If my understanding is correct, we have no lock when reading pset->vm_stat_diff.
    It mean nr_free_pages can reach negative value at very rarely race. boundary
    check is necessary?






    \
     
     \ /
      Last update: 2010-09-01 01:41    [W:0.020 / U:30.660 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site