)]}'
{
  "log": [
    {
      "commit": "88f5acf88ae6a9778f6d25d0d5d7ec2d57764a97",
      "tree": "6f39beef8cf918eb2ca9f64ae1bcd1ea79ca487a",
      "parents": [
        "43bb40c9e3aa51a3b038c9df2c9afb4d4685614d"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Thu Jan 13 15:45:41 2011 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Jan 13 17:32:31 2011 -0800"
      },
      "message": "mm: page allocator: adjust the per-cpu counter threshold when memory is low\n\nCommit aa45484 (\"calculate a better estimate of NR_FREE_PAGES when memory\nis low\") noted that watermarks were based on the vmstat NR_FREE_PAGES.  To\navoid synchronization overhead, these counters are maintained on a per-cpu\nbasis and drained both periodically and when a threshold is above a\nthreshold.  On large CPU systems, the difference between the estimate and\nreal value of NR_FREE_PAGES can be very high.  The system can get into a\ncase where pages are allocated far below the min watermark potentially\ncausing livelock issues.  The commit solved the problem by taking a better\nreading of NR_FREE_PAGES when memory was low.\n\nUnfortately, as reported by Shaohua Li this accurate reading can consume a\nlarge amount of CPU time on systems with many sockets due to cache line\nbouncing.  This patch takes a different approach.  For large machines\nwhere counter drift might be unsafe and while kswapd is awake, the per-cpu\nthresholds for the target pgdat are reduced to limit the level of drift to\nwhat should be a safe level.  This incurs a performance penalty in heavy\nmemory pressure by a factor that depends on the workload and the machine\nbut the machine should function correctly without accidentally exhausting\nall memory on a node.  There is an additional cost when kswapd wakes and\nsleeps but the event is not expected to be frequent - in Shaohua\u0027s test\ncase, there was one recorded sleep and wake event at least.\n\nTo ensure that kswapd wakes up, a safe version of zone_watermark_ok() is\nintroduced that takes a more accurate reading of NR_FREE_PAGES when called\nfrom wakeup_kswapd, when deciding whether it is really safe to go back to\nsleep in sleeping_prematurely() and when deciding if a zone is really\nbalanced or not in balance_pgdat().  We are still using an expensive\nfunction but limiting how often it is called.\n\nWhen the test case is reproduced, the time spent in the watermark\nfunctions is reduced.  The following report is on the percentage of time\nspent cumulatively spent in the functions zone_nr_free_pages(),\nzone_watermark_ok(), __zone_watermark_ok(), zone_watermark_ok_safe(),\nzone_page_state_snapshot(), zone_page_state().\n\nvanilla                      11.6615%\ndisable-threshold            0.2584%\n\nDavid said:\n\n: We had to pull aa454840 \"mm: page allocator: calculate a better estimate\n: of NR_FREE_PAGES when memory is low and kswapd is awake\" from 2.6.36\n: internally because tests showed that it would cause the machine to stall\n: as the result of heavy kswapd activity.  I merged it back with this fix as\n: it is pending in the -mm tree and it solves the issue we were seeing, so I\n: definitely think this should be pushed to -stable (and I would seriously\n: consider it for 2.6.37 inclusion even at this late date).\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nReported-by: Shaohua Li \u003cshaohua.li@intel.com\u003e\nReviewed-by: Christoph Lameter \u003ccl@linux.com\u003e\nTested-by: Nicolas Bareil \u003cnico@chdir.org\u003e\nCc: David Rientjes \u003crientjes@google.com\u003e\nCc: Kyle McMartin \u003ckyle@mcmartin.ca\u003e\nCc: \u003cstable@kernel.org\u003e\t\t[2.6.37.1, 2.6.36.x]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "aa45484031ddee09b06350ab8528bfe5b2c76d1c",
      "tree": "6758072232db9a54453022ec3e6cede35d52001c",
      "parents": [
        "72853e2991a2702ae93aaf889ac7db743a415dd3"
      ],
      "author": {
        "name": "Christoph Lameter",
        "email": "cl@linux.com",
        "time": "Thu Sep 09 16:38:17 2010 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Thu Sep 09 18:57:25 2010 -0700"
      },
      "message": "mm: page allocator: calculate a better estimate of NR_FREE_PAGES when memory is low and kswapd is awake\n\nOrdinarily watermark checks are based on the vmstat NR_FREE_PAGES as it is\ncheaper than scanning a number of lists.  To avoid synchronization\noverhead, counter deltas are maintained on a per-cpu basis and drained\nboth periodically and when the delta is above a threshold.  On large CPU\nsystems, the difference between the estimated and real value of\nNR_FREE_PAGES can be very high.  If NR_FREE_PAGES is much higher than\nnumber of real free page in buddy, the VM can allocate pages below min\nwatermark, at worst reducing the real number of pages to zero.  Even if\nthe OOM killer kills some victim for freeing memory, it may not free\nmemory if the exit path requires a new page resulting in livelock.\n\nThis patch introduces a zone_page_state_snapshot() function (courtesy of\nChristoph) that takes a slightly more accurate view of an arbitrary vmstat\ncounter.  It is used to read NR_FREE_PAGES while kswapd is awake to avoid\nthe watermark being accidentally broken.  The estimate is not perfect and\nmay result in cache line bounces but is expected to be lighter than the\nIPI calls necessary to continually drain the per-cpu counters while kswapd\nis awake.\n\nSigned-off-by: Christoph Lameter \u003ccl@linux.com\u003e\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "eb33575cf67d3f35fa2510210ef92631266e2465",
      "tree": "55dd9958dd10758aa5b1ad0186a3356ae620da44",
      "parents": [
        "e1342f1da06d39b3bbd530e9306347c4438bc6e5"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Wed May 13 17:34:48 2009 +0100"
      },
      "committer": {
        "name": "Russell King",
        "email": "rmk+kernel@arm.linux.org.uk",
        "time": "Mon May 18 11:22:24 2009 +0100"
      },
      "message": "[ARM] Double check memmap is actually valid with a memmap has unexpected holes V2\n\npfn_valid() is meant to be able to tell if a given PFN has valid memmap\nassociated with it or not. In FLATMEM, it is expected that holes always\nhave valid memmap as long as there is valid PFNs either side of the hole.\nIn SPARSEMEM, it is assumed that a valid section has a memmap for the\nentire section.\n\nHowever, ARM and maybe other embedded architectures in the future free\nmemmap backing holes to save memory on the assumption the memmap is never\nused. The page_zone linkages are then broken even though pfn_valid()\nreturns true. A walker of the full memmap must then do this additional\ncheck to ensure the memmap they are looking at is sane by making sure the\nzone and PFN linkages are still valid. This is expensive, but walkers of\nthe full memmap are extremely rare.\n\nThis was caught before for FLATMEM and hacked around but it hits again for\nSPARSEMEM because the page_zone linkages can look ok where the PFN linkages\nare totally screwed. This looks like a hatchet job but the reality is that\nany clean solution would end up consumning all the memory saved by punching\nthese unexpected holes in the memmap. For example, we tried marking the\nmemmap within the section invalid but the section size exceeds the size of\nthe hole in most cases so pfn_valid() starts returning false where valid\nmemmap exists. Shrinking the size of the section would increase memory\nconsumption offsetting the gains.\n\nThis patch identifies when an architecture is punching unexpected holes\nin the memmap that the memory model cannot automatically detect and sets\nARCH_HAS_HOLES_MEMORYMODEL. At the moment, this is restricted to EP93xx\nwhich is the model sub-architecture this has been reported on but may expand\nlater. When set, walkers of the full memmap must call memmap_valid_within()\nfor each PFN and passing in what it expects the page and zone to be for\nthat PFN. If it finds the linkages to be broken, it assumes the memmap is\ninvalid for that PFN.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nSigned-off-by: Russell King \u003crmk+kernel@arm.linux.org.uk\u003e\n"
    },
    {
      "commit": "5bead2a0680687b9576d57c177988e8aa082b922",
      "tree": "25d8db69bd7b353131f9a5260d024d3018eeffa0",
      "parents": [
        "7e96445533ac3f4f7964646a202ff3620602fab4"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Sat Sep 13 02:33:19 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Sat Sep 13 14:41:52 2008 -0700"
      },
      "message": "mm: mark the correct zone as full when scanning zonelists\n\nThe iterator for_each_zone_zonelist() uses a struct zoneref *z cursor when\nscanning zonelists to keep track of where in the zonelist it is.  The\nzoneref that is returned corresponds to the the next zone that is to be\nscanned, not the current one.  It was intended to be treated as an opaque\nlist.\n\nWhen the page allocator is scanning a zonelist, it marks elements in the\nzonelist corresponding to zones that are temporarily full.  As the\nzonelist is being updated, it uses the cursor here;\n\n  if (NUMA_BUILD)\n        zlc_mark_zone_full(zonelist, z);\n\nThis is intended to prevent rescanning in the near future but the zoneref\ncursor does not correspond to the zone that has been found to be full.\nThis is an easy misunderstanding to make so this patch corrects the\nproblem by changing zoneref cursor to be the current zone being scanned\ninstead of the next one.\n\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Andy Whitcroft \u003capw@shadowen.org\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: \u003cstable@kernel.org\u003e\t\t[2.6.26.x]\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "19770b32609b6bf97a3dece2529089494cbfc549",
      "tree": "3b5922d1b20aabdf929bde9309f323841717747a",
      "parents": [
        "dd1a239f6f2d4d3eedd318583ec319aa145b324c"
      ],
      "author": {
        "name": "Mel Gorman",
        "email": "mel@csn.ul.ie",
        "time": "Mon Apr 28 02:12:18 2008 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@linux-foundation.org",
        "time": "Mon Apr 28 08:58:19 2008 -0700"
      },
      "message": "mm: filter based on a nodemask as well as a gfp_mask\n\nThe MPOL_BIND policy creates a zonelist that is used for allocations\ncontrolled by that mempolicy.  As the per-node zonelist is already being\nfiltered based on a zone id, this patch adds a version of __alloc_pages() that\ntakes a nodemask for further filtering.  This eliminates the need for\nMPOL_BIND to create a custom zonelist.\n\nA positive benefit of this is that allocations using MPOL_BIND now use the\nlocal node\u0027s distance-ordered zonelist instead of a custom node-id-ordered\nzonelist.  I.e., pages will be allocated from the closest allowed node with\navailable memory.\n\n[Lee.Schermerhorn@hp.com: Mempolicy: update stale documentation and comments]\n[Lee.Schermerhorn@hp.com: Mempolicy: make dequeue_huge_page_vma() obey MPOL_BIND nodemask]\n[Lee.Schermerhorn@hp.com: Mempolicy: make dequeue_huge_page_vma() obey MPOL_BIND nodemask rework]\nSigned-off-by: Mel Gorman \u003cmel@csn.ul.ie\u003e\nAcked-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nSigned-off-by: Lee Schermerhorn \u003clee.schermerhorn@hp.com\u003e\nCc: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nCc: Mel Gorman \u003cmel@csn.ul.ie\u003e\nCc: Hugh Dickins \u003chugh@veritas.com\u003e\nCc: Nick Piggin \u003cnickpiggin@yahoo.com.au\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "045f147f3290395661b56b9231fc4d221e150963",
      "tree": "63df3be162913b044a7f88a03b45c59f438bbb19",
      "parents": [
        "a8f48a95619cbce8f85423480e7d0a1bf971a62b"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Wed Dec 06 20:40:15 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.osdl.org",
        "time": "Thu Dec 07 08:39:44 2006 -0800"
      },
      "message": "[PATCH] remove EXPORT_UNUSED_SYMBOL\u0027ed symbols\n\nIn time for 2.6.20, we can get rid of this junk.\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "b0d85c5c3009d292fe195f666cbbec7da47dabf4",
      "tree": "ca1e7158f37b8335e32568cf78dc552b2b6f29a5",
      "parents": [
        "26fc52367af3774b123334bca409159ce37d2857"
      ],
      "author": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Mon Jul 10 04:44:23 2006 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Jul 10 13:24:17 2006 -0700"
      },
      "message": "[PATCH] mm/mmzone.c: EXPORT_UNUSED_SYMBOL\n\nThis patch marks three unused exports as EXPORT_UNUSED_SYMBOL.\n\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    },
    {
      "commit": "6ab3d5624e172c553004ecc862bfeac16d9d68b7",
      "tree": "6d98881fe91fd9583c109208d5c27131b93fa248",
      "parents": [
        "e02169b682bc448ccdc819dc8639ed34a23cedd8"
      ],
      "author": {
        "name": "Jörn Engel",
        "email": "joern@wohnheim.fh-wedel.de",
        "time": "Fri Jun 30 19:25:36 2006 +0200"
      },
      "committer": {
        "name": "Adrian Bunk",
        "email": "bunk@stusta.de",
        "time": "Fri Jun 30 19:25:36 2006 +0200"
      },
      "message": "Remove obsolete #include \u003clinux/config.h\u003e\n\nSigned-off-by: Jörn Engel \u003cjoern@wohnheim.fh-wedel.de\u003e\nSigned-off-by: Adrian Bunk \u003cbunk@stusta.de\u003e\n"
    },
    {
      "commit": "95144c788dc01b6a0ff2c9c2222e37ffdab358b8",
      "tree": "9f7f186575bb717de39cedaf42bf02a94c11b664",
      "parents": [
        "ae0f15fb91274e67d78836d38c99ec363df33073"
      ],
      "author": {
        "name": "KAMEZAWA Hiroyuki",
        "email": "kamezawa.hiroyu@jp.fujitsu.com",
        "time": "Mon Mar 27 01:16:02 2006 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Mon Mar 27 08:44:48 2006 -0800"
      },
      "message": "[PATCH] uninline zone helpers\n\nHelper functions for for_each_online_pgdat/for_each_zone look too big to be\ninlined.  Speed of these helper macro itself is not very important.  (inner\nloops are tend to do more work than this)\n\nThis patch make helper function to be out-of-lined.\n\n\tinline\t\tout-of-line\n.text   005c0680        005bf6a0\n\n005c0680 - 005bf6a0 \u003d FE0 \u003d 4Kbytes.\n\nSigned-off-by: KAMEZAWA Hiroyuki \u003ckamezawa.hiroyu@jp.fujitsu.com\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    }
  ]
}
