)]}'
{
  "commit": "4fc3f1d66b1ef0d7b8dc11f4ff1cc510f78b37d6",
  "tree": "90baaa56f6b5244525c7637a14550f830486112a",
  "parents": [
    "5a505085f043e8380f83610f79642853c051e2f1"
  ],
  "author": {
    "name": "Ingo Molnar",
    "email": "mingo@kernel.org",
    "time": "Sun Dec 02 19:56:50 2012 +0000"
  },
  "committer": {
    "name": "Mel Gorman",
    "email": "mgorman@suse.de",
    "time": "Tue Dec 11 14:43:00 2012 +0000"
  },
  "message": "mm/rmap, migration: Make rmap_walk_anon() and try_to_unmap_anon() more scalable\n\nrmap_walk_anon() and try_to_unmap_anon() appears to be too\ncareful about locking the anon vma: while it needs protection\nagainst anon vma list modifications, it does not need exclusive\naccess to the list itself.\n\nTransforming this exclusive lock to a read-locked rwsem removes\na global lock from the hot path of page-migration intense\nthreaded workloads which can cause pathological performance like\nthis:\n\n    96.43%        process 0  [kernel.kallsyms]  [k] perf_trace_sched_switch\n                  |\n                  --- perf_trace_sched_switch\n                      __schedule\n                      schedule\n                      schedule_preempt_disabled\n                      __mutex_lock_common.isra.6\n                      __mutex_lock_slowpath\n                      mutex_lock\n                     |\n                     |--50.61%-- rmap_walk\n                     |          move_to_new_page\n                     |          migrate_pages\n                     |          migrate_misplaced_page\n                     |          __do_numa_page.isra.69\n                     |          handle_pte_fault\n                     |          handle_mm_fault\n                     |          __do_page_fault\n                     |          do_page_fault\n                     |          page_fault\n                     |          __memset_sse2\n                     |          |\n                     |           --100.00%-- worker_thread\n                     |                     |\n                     |                      --100.00%-- start_thread\n                     |\n                      --49.39%-- page_lock_anon_vma\n                                try_to_unmap_anon\n                                try_to_unmap\n                                migrate_pages\n                                migrate_misplaced_page\n                                __do_numa_page.isra.69\n                                handle_pte_fault\n                                handle_mm_fault\n                                __do_page_fault\n                                do_page_fault\n                                page_fault\n                                __memset_sse2\n                                |\n                                 --100.00%-- worker_thread\n                                           start_thread\n\nWith this change applied the profile is now nicely flat\nand there\u0027s no anon-vma related scheduling/blocking.\n\nRename anon_vma_[un]lock() \u003d\u003e anon_vma_[un]lock_write(),\nto make it clearer that it\u0027s an exclusive write-lock in\nthat case - suggested by Rik van Riel.\n\nSuggested-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\nCc: Peter Zijlstra \u003ca.p.zijlstra@chello.nl\u003e\nCc: Paul Turner \u003cpjt@google.com\u003e\nCc: Lee Schermerhorn \u003cLee.Schermerhorn@hp.com\u003e\nCc: Christoph Lameter \u003ccl@linux.com\u003e\nCc: Rik van Riel \u003criel@redhat.com\u003e\nCc: Mel Gorman \u003cmgorman@suse.de\u003e\nCc: Andrea Arcangeli \u003caarcange@redhat.com\u003e\nCc: Johannes Weiner \u003channes@cmpxchg.org\u003e\nCc: Hugh Dickins \u003chughd@google.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@kernel.org\u003e\nSigned-off-by: Mel Gorman \u003cmgorman@suse.de\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "027ad04ef3a89bd13edd264320472a4418c01957",
      "old_mode": 33188,
      "old_path": "include/linux/huge_mm.h",
      "new_id": "0d1208c0bdc40b8c717fe1ec5901eedd4fe2dc2a",
      "new_mode": 33188,
      "new_path": "include/linux/huge_mm.h"
    },
    {
      "type": "modify",
      "old_id": "f3f41d242e25a0e5bed4dc7c8a02c2316d5d1c4e",
      "old_mode": 33188,
      "old_path": "include/linux/rmap.h",
      "new_id": "c20635c527a9071c35d804157b527d199188800d",
      "new_mode": 33188,
      "new_path": "include/linux/rmap.h"
    },
    {
      "type": "modify",
      "old_id": "acd37fe55eb7760946d43f466f1bf401081442f1",
      "old_mode": 33188,
      "old_path": "mm/huge_memory.c",
      "new_id": "a24c9cb9c83eb7c82b0c6aabd28eeefacb7cfb75",
      "new_mode": 33188,
      "new_path": "mm/huge_memory.c"
    },
    {
      "type": "modify",
      "old_id": "ae539f0b8aa1115ce2ba86ae8b94ec48a79b8333",
      "old_mode": 33188,
      "old_path": "mm/ksm.c",
      "new_id": "7fa37de1ee0c8a1f64f44041584190244981991c",
      "new_mode": 33188,
      "new_path": "mm/ksm.c"
    },
    {
      "type": "modify",
      "old_id": "ddb68a169e4517f085cca927453e4c67424f1e43",
      "old_mode": 33188,
      "old_path": "mm/memory-failure.c",
      "new_id": "f2cd830f66c0768efa4c31b69d014c4ebc813f7b",
      "new_mode": 33188,
      "new_path": "mm/memory-failure.c"
    },
    {
      "type": "modify",
      "old_id": "f24e9cc49cc4feecfef671111dd3ca1fae842fa1",
      "old_mode": 33188,
      "old_path": "mm/migrate.c",
      "new_id": "6e46485f014c8a206d8ca5d425ed00cfb0060d52",
      "new_mode": 33188,
      "new_path": "mm/migrate.c"
    },
    {
      "type": "modify",
      "old_id": "88408632da6630f916e7156f6af3766df747228d",
      "old_mode": 33188,
      "old_path": "mm/mmap.c",
      "new_id": "68a16b40c209ef380c0909d3f7ad5e87ea086775",
      "new_mode": 33188,
      "new_path": "mm/mmap.c"
    },
    {
      "type": "modify",
      "old_id": "1b61c2d3307a800c9c958e5f949d81fb76515899",
      "old_mode": 33188,
      "old_path": "mm/mremap.c",
      "new_id": "3dabd170753a695ead563e12e8a1af8242194fd9",
      "new_mode": 33188,
      "new_path": "mm/mremap.c"
    },
    {
      "type": "modify",
      "old_id": "6e3ee3b82798f3fa59a1daa18321ba86a15afb97",
      "old_mode": 33188,
      "old_path": "mm/rmap.c",
      "new_id": "b0f612df7b9d4e61796f4df90aacfc3f8a9df4af",
      "new_mode": 33188,
      "new_path": "mm/rmap.c"
    }
  ]
}
