)]}'
{
  "commit": "2244b95a7bcf8d24196f8a3a44187ba5dfff754c",
  "tree": "771ef8eae45c2794fd73f870109c74d67c28888a",
  "parents": [
    "f6ac2354d791195ca40822b84d73d48a4e8b7f2b"
  ],
  "author": {
    "name": "Christoph Lameter",
    "email": "clameter@sgi.com",
    "time": "Fri Jun 30 01:55:33 2006 -0700"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@g5.osdl.org",
    "time": "Fri Jun 30 11:25:34 2006 -0700"
  },
  "message": "[PATCH] zoned vm counters: basic ZVC (zoned vm counter) implementation\n\nPer zone counter infrastructure\n\nThe counters that we currently have for the VM are split per processor.  The\nprocessor however has not much to do with the zone these pages belong to.  We\ncannot tell f.e.  how many ZONE_DMA pages are dirty.\n\nSo we are blind to potentially inbalances in the usage of memory in various\nzones.  F.e.  in a NUMA system we cannot tell how many pages are dirty on a\nparticular node.  If we knew then we could put measures into the VM to balance\nthe use of memory between different zones and different nodes in a NUMA\nsystem.  For example it would be possible to limit the dirty pages per node so\nthat fast local memory is kept available even if a process is dirtying huge\namounts of pages.\n\nAnother example is zone reclaim.  We do not know how many unmapped pages exist\nper zone.  So we just have to try to reclaim.  If it is not working then we\npause and try again later.  It would be better if we knew when it makes sense\nto reclaim unmapped pages from a zone.  This patchset allows the determination\nof the number of unmapped pages per zone.  We can remove the zone reclaim\ninterval with the counters introduced here.\n\nFuthermore the ability to have various usage statistics available will allow\nthe development of new NUMA balancing algorithms that may be able to improve\nthe decision making in the scheduler of when to move a process to another node\nand hopefully will also enable automatic page migration through a user space\nprogram that can analyse the memory load distribution and then rebalance\nmemory use in order to increase performance.\n\nThe counter framework here implements differential counters for each processor\nin struct zone.  The differential counters are consolidated when a threshold\nis exceeded (like done in the current implementation for nr_pageache), when\nslab reaping occurs or when a consolidation function is called.\n\nConsolidation uses atomic operations and accumulates counters per zone in the\nzone structure and also globally in the vm_stat array.  VM functions can\naccess the counts by simply indexing a global or zone specific array.\n\nThe arrangement of counters in an array also simplifies processing when output\nhas to be generated for /proc/*.\n\nCounters can be updated by calling inc/dec_zone_page_state or\n_inc/dec_zone_page_state analogous to *_page_state.  The second group of\nfunctions can be called if it is known that interrupts are disabled.\n\nSpecial optimized increment and decrement functions are provided.  These can\navoid certain checks and use increment or decrement instructions that an\narchitecture may provide.\n\nWe also add a new CONFIG_DMA_IS_NORMAL that signifies that an architecture can\ndo DMA to all memory and therefore ZONE_NORMAL will not be populated.  This is\nonly currently set for IA64 SGI SN2 and currently only affects\nnode_page_state().  In the best case node_page_state can be reduced to\nretrieving a single counter for the one zone on the node.\n\n[akpm@osdl.org: cleanups]\n[akpm@osdl.org: export vm_stat[] for filesystems]\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\u003e\nCc: Trond Myklebust \u003ctrond.myklebust@fys.uio.no\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b487e227a1f7a3e6b17dd48d57a81d1319e0e376",
      "old_mode": 33188,
      "old_path": "arch/ia64/Kconfig",
      "new_id": "47de9ee6bcd66b03ca431b06b13681f84f0da446",
      "new_mode": 33188,
      "new_path": "arch/ia64/Kconfig"
    },
    {
      "type": "modify",
      "old_id": "d6120fa69116f92399bfeb6951250ac1cc21e4a5",
      "old_mode": 33188,
      "old_path": "include/linux/mmzone.h",
      "new_id": "543f9e411563acd8bfc87b3747ba6c97e68a63fb",
      "new_mode": 33188,
      "new_path": "include/linux/mmzone.h"
    },
    {
      "type": "modify",
      "old_id": "3ca0c1989fc2eb7de31b55dcb05748c47b13bf14",
      "old_mode": 33188,
      "old_path": "include/linux/vmstat.h",
      "new_id": "3fd5c11e544a669ce25e3b0c87f6dc4bfd07cc4e",
      "new_mode": 33188,
      "new_path": "include/linux/vmstat.h"
    },
    {
      "type": "modify",
      "old_id": "87dc1297fe39691dfc9dbb16d84a07f75ba3c889",
      "old_mode": 33188,
      "old_path": "mm/page_alloc.c",
      "new_id": "3a877fecc30068e8b5f056304e1dee59ac30deb8",
      "new_mode": 33188,
      "new_path": "mm/page_alloc.c"
    },
    {
      "type": "modify",
      "old_id": "233e39d14caf5ae2966c9df788c9c73dc6a563e3",
      "old_mode": 33188,
      "old_path": "mm/slab.c",
      "new_id": "0c33820038cb95c809c57a29a62860a7749b00d8",
      "new_mode": 33188,
      "new_path": "mm/slab.c"
    },
    {
      "type": "modify",
      "old_id": "ad456202ff1a4ab28b0ab24e697c00d89efe5af6",
      "old_mode": 33188,
      "old_path": "mm/vmstat.c",
      "new_id": "210f9bbbb04f4661bf1d2169c288a479488ab57c",
      "new_mode": 33188,
      "new_path": "mm/vmstat.c"
    }
  ]
}
