)]}'
{
  "commit": "21eac81f252fe31c3cf64b805a1e8652192f3a3b",
  "tree": "255662bda67f54ffde484046fd9ab9b0900ab409",
  "parents": [
    "15316ba81aee6775d6079fb46c66c801989e7d10"
  ],
  "author": {
    "name": "Christoph Lameter",
    "email": "clameter@sgi.com",
    "time": "Sun Jan 08 01:00:45 2006 -0800"
  },
  "committer": {
    "name": "Linus Torvalds",
    "email": "torvalds@g5.osdl.org",
    "time": "Sun Jan 08 20:12:41 2006 -0800"
  },
  "message": "[PATCH] Swap Migration V5: LRU operations\n\nThis is the start of the `swap migration\u0027 patch series.\n\nSwap migration allows the moving of the physical location of pages between\nnodes in a numa system while the process is running.  This means that the\nvirtual addresses that the process sees do not change.  However, the system\nrearranges the physical location of those pages.\n\nThe main intent of page migration patches here is to reduce the latency of\nmemory access by moving pages near to the processor where the process\naccessing that memory is running.\n\nThe patchset allows a process to manually relocate the node on which its\npages are located through the MF_MOVE and MF_MOVE_ALL options while\nsetting a new memory policy.\n\nThe pages of process can also be relocated from another process using the\nsys_migrate_pages() function call.  Requires CAP_SYS_ADMIN.  The migrate_pages\nfunction call takes two sets of nodes and moves pages of a process that are\nlocated on the from nodes to the destination nodes.\n\nManual migration is very useful if for example the scheduler has relocated a\nprocess to a processor on a distant node.  A batch scheduler or an\nadministrator can detect the situation and move the pages of the process\nnearer to the new processor.\n\nsys_migrate_pages() could be used on non-numa machines as well, to force all\nof a particualr process\u0027s pages out to swap, if someone thinks that\u0027s useful.\n\nLarger installations usually partition the system using cpusets into sections\nof nodes.  Paul has equipped cpusets with the ability to move pages when a\ntask is moved to another cpuset.  This allows automatic control over locality\nof a process.  If a task is moved to a new cpuset then also all its pages are\nmoved with it so that the performance of the process does not sink\ndramatically (as is the case today).\n\nSwap migration works by simply evicting the page.  The pages must be faulted\nback in.  The pages are then typically reallocated by the system near the node\nwhere the process is executing.\n\nFor swap migration the destination of the move is controlled by the allocation\npolicy.  Cpusets set the allocation policy before calling sys_migrate_pages()\nin order to move the pages as intended.\n\nNo allocation policy changes are performed for sys_migrate_pages().  This\nmeans that the pages may not faulted in to the specified nodes if no\nallocation policy was set by other means.  The pages will just end up near the\nnode where the fault occurred.\n\nThere\u0027s another patch series in the pipeline which implements \"direct\nmigration\".\n\nThe direct migration patchset extends the migration functionality to avoid\ngoing through swap.  The destination node of the relation is controllable\nduring the actual moving of pages.  The crutch of using the allocation policy\nto relocate is not necessary and the pages are moved directly to the target.\nIts also faster since swap is not used.\n\nAnd sys_migrate_pages() can then move pages directly to the specified node.\nImplement functions to isolate pages from the LRU and put them back later.\n\nThis patch:\n\nAn earlier implementation was provided by Hirokazu Takahashi\n\u003ctaka@valinux.co.jp\u003e and IWAMOTO Toshihiro \u003ciwamoto@valinux.co.jp\u003e for the\nmemory hotplug project.\n\nFrom: Magnus\n\nThis breaks out isolate_lru_page() and putpack_lru_page().  Needed for swap\nmigration.\n\nSigned-off-by: Magnus Damm \u003cmagnus.damm@gmail.com\u003e\nSigned-off-by: Christoph Lameter \u003cclameter@sgi.com\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": "47762ca695a59de5e0b3b55c3b7cbd9255f07088",
      "old_mode": 33188,
      "old_path": "include/linux/mm_inline.h",
      "new_id": "49cc68af01f8e6d971d870fd952d229d31810628",
      "new_mode": 33188,
      "new_path": "include/linux/mm_inline.h"
    },
    {
      "type": "modify",
      "old_id": "556617bcf7accb79a763eda248e4075df6330e1a",
      "old_mode": 33188,
      "old_path": "include/linux/swap.h",
      "new_id": "a49112536c02c519a6ccd77b8552dfc15af9cc8f",
      "new_mode": 33188,
      "new_path": "include/linux/swap.h"
    },
    {
      "type": "modify",
      "old_id": "428c5801d4b45cf19be318079ed23c8c55a7ccfd",
      "old_mode": 33188,
      "old_path": "mm/vmscan.c",
      "new_id": "261a56ee11b690b8e182fbbe84a0b42c097c446f",
      "new_mode": 33188,
      "new_path": "mm/vmscan.c"
    }
  ]
}
