1The tenth maintenance release of the 15th version of the reverse 2mapping based VM is now available. 3This is an attempt at making a more robust and flexible VM 4subsystem, while cleaning up a lot of code at the same time. 5The patch is available from: 6 7 http://surriel.com/patches/2.4/2.4.21-pre7-rmap15j 8and http://linuxvm.bkbits.net/ 9 10 11My big TODO items for a next release are: 12 - finetune the O(1) VM code for strange corner cases 13 - add pte-highmem defines for more architectures 14 - highmem tweaks 15 16rmap 15j: 17 - agressive inode reclaim on highmem boxes (me) 18 - OOM killer tweaks, hopefully better now (me) 19 - better higher-order page allocations (me) 20 - small updates and tweaks 21rmap 15i: 22 - drop behind only drops really new pages (Arjan van de Ven) 23 - lots of VM tuning left and right (Arjan, Ingo, me) 24rmap 15h: 25 - fix obscure SMP race (Ben LaHaise, me) 26 - fix smp races with bufferhead reclaim (Andrew Morton, me) 27 - architecture updates (various) 28 - add barrier to page_unlock_rmap (Pete Zaitcev) 29rmap 15g: 30 - more ppc64 pte-highmem stuff (Julie DeWandel) 31 - hammer pte-highmem stuff (Jim Paradis) 32 - reclaim buffer heads under memory pressure (me) 33rmap 15f: 34 - remove pte-highmem compat define from ieee1394 (Marc-C. Petersen) 35 - clean up scan_active_list after suggestion from hch (me) 36 - lock ordering fix (me) 37 - add barrier() to page_chain_lock() (Pete Zaitcev) 38 - fix pte-highmem defines for ppc64 (Julie DeWandel) 39 - add pte-highmem defines for s390 & s390x (Pete Zaitcev) 40rmap 15e: 41 - make reclaiming unused inodes more efficient (Arjan van de Ven) 42 | push to Marcelo and Andrew once it's well tested ! 43 - fix DRM memory leak (Arjan van de Ven) 44 - fix potential infinite loop in kswapd (me) 45 - clean up elevator.h (no IO scheduler in -rmap...) (me) 46 - page aging interval tuned on a per zone basis, better 47 wakeup mechanism for sudden memory pressure (Arjan, me) 48rmap 15d: 49 - compatability with PREEMPT patch (me) 50 | fairly ugly, but should work 51 - bugfix for the pte_chain allocation code (Arjan van de Ven) 52rmap 15c: 53 - backport and audit akpm's reliable pte_chain alloc 54 code from 2.5 (me) 55 - reintroduce cache size tuning knobs in /proc (me) 56 | on very, very popular request 57rmap 15b: 58 - adjust anon/cache work table (me) 59 - make active_age_bias a per-active list thing (me) 60 - don't wake up kswapd early from mark_page_accessed (me) 61 - make sure pte-chains are cacheline aligned with PAE (me, Andrew Morton) 62 - change some O(1) VM thresholds (me) 63 - fix pte-highmem backport (me) 64 - 2.5 backport: pte-highmem (Ben LaHaise) 65 - 2.5 backport: large cacheline aligned pte-chains (Ben LaHaise) 66 - 2.5 backport: direct pte pointers (Ben LaHaise) 67 - undo __find_pagecache_page braindamage (Christoph Hellwig) 68rmap 15a: 69 - more agressive freeing for higher order allocations (me) 70 - export __find_pagecache_page, find_get_page define (me, Christoph, Arjan) 71 - make memory statistics SMP safe again (me) 72 - make page aging slow down again when needed (Andrew Morton) 73 - first stab at fine-tuning arjan's O(1) VM (me) 74 - split active list in cache / working set (me) 75 - fix SMP locking in arjan's O(1) VM (me) 76rmap 15: 77 - small code cleanups and spelling fixes for O(1) VM (me) 78 - O(1) page launder, O(1) page aging (Arjan van de Ven) 79 - resync code with -ac (12 small patches) (me) 80rmap 14c: 81 - fold page_over_rsslimit() into page_referenced() (me) 82 - 2.5 backport: get pte_chains from the slab cache (William Lee Irwin) 83 - remove dead code from page_launder_zone() (me) 84 - make OOM detection a bit more agressive (me) 85rmap 14b: 86 - don't unmap pages not in pagecache (ext3 & reiser) (Andrew Morton, me) 87 - clean up mark_page_accessed a bit (me) 88 - Alpha NUMA fix for Ingo's per-cpu pages (Flávio Leitner, me) 89 - remove explicit low latency schedule zap_page_range (Robert Love) 90 - fix OOM stuff for good, hopefully (me) 91rmap 14a: 92 - Ingo Molnar's per-cpu pages (SMP speedup) (Christoph Hellwig) 93 - fix SMP bug in page_launder_zone (rmap14 only) (Arjan van de Ven) 94 - semicolon day, fix typo in rmap.c w/ DEBUG_RMAP (Craig Kulesa) 95 - remove unneeded pte_chain_unlock/lock pair vmscan.c (Craig Kulesa) 96 - low latency zap_page_range also without preempt (Arjan van de Ven) 97 - do some throughput tuning for kswapd/page_launder (me) 98 - don't allocate swap space for pages we're not writing (me) 99rmap 14: 100 - get rid of stalls during swapping, hopefully (me) 101 - low latency zap_page_range (Robert Love) 102rmap 13c: 103 - add wmb() to wakeup_memwaiters (Arjan van de Ven) 104 - remap_pmd_range now calls pte_alloc with full address (Paul Mackerras) 105 - #ifdef out pte_chain_lock/unlock on UP machines (Andrew Morton) 106 - un-BUG() truncate_complete_page, the race is expected (Andrew Morton, me) 107 - remove NUMA changes from rmap13a (Christoph Hellwig) 108rmap 13b: 109 - prevent PF_MEMALLOC recursion for higher order allocs (Arjan van de Ven, me) 110 - fix small SMP race, PG_lru (Hugh Dickins) 111rmap 13a: 112 - NUMA changes for page_address (Samuel Ortiz) 113 - replace vm.freepages with simpler kswapd_minfree (Christoph Hellwig) 114rmap 13: 115 - rename touch_page to mark_page_accessed and uninline (Christoph Hellwig) 116 - NUMA bugfix for __alloc_pages (William Irwin) 117 - kill __find_page (Christoph Hellwig) 118 - make pte_chain_freelist per zone (William Irwin) 119 - protect pte_chains by per-page lock bit (William Irwin) 120 - minor code cleanups (me) 121rmap 12i: 122 - slab cleanup (Christoph Hellwig) 123 - remove references to compiler.h from mm/* (me) 124 - move rmap to marcelo's bk tree (me) 125 - minor cleanups (me) 126rmap 12h: 127 - hopefully fix OOM detection algorithm (me) 128 - drop pte quicklist in anticipation of pte-highmem (me) 129 - replace andrea's highmem emulation by ingo's one (me) 130 - improve rss limit checking (Nick Piggin) 131rmap 12g: 132 - port to armv architecture (David Woodhouse) 133 - NUMA fix to zone_table initialisation (Samuel Ortiz) 134 - remove init_page_count (David Miller) 135rmap 12f: 136 - for_each_pgdat macro (William Lee Irwin) 137 - put back EXPORT(__find_get_page) for modular rd (me) 138 - make bdflush and kswapd actually start queued disk IO (me) 139rmap 12e 140 - RSS limit fix, the limit can be 0 for some reason (me) 141 - clean up for_each_zone define to not need pgdata_t (William Lee Irwin) 142 - fix i810_dma bug introduced with page->wait removal (William Lee Irwin) 143rmap 12d: 144 - fix compiler warning in rmap.c (Roger Larsson) 145 - read latency improvement (read-latency2) (Andrew Morton) 146rmap 12c: 147 - fix small balancing bug in page_launder_zone (Nick Piggin) 148 - wakeup_kswapd / wakeup_memwaiters code fix (Arjan van de Ven) 149 - improve RSS limit enforcement (me) 150rmap 12b: 151 - highmem emulation (for debugging purposes) (Andrea Arcangeli) 152 - ulimit RSS enforcement when memory gets tight (me) 153 - sparc64 page->virtual quickfix (Greg Procunier) 154rmap 12a: 155 - fix the compile warning in buffer.c (me) 156 - fix divide-by-zero on highmem initialisation DOH! (me) 157 - remove the pgd quicklist (suspicious ...) (DaveM, me) 158rmap 12: 159 - keep some extra free memory on large machines (Arjan van de Ven, me) 160 - higher-order allocation bugfix (Adrian Drzewiecki) 161 - nr_free_buffer_pages() returns inactive + free mem (me) 162 - pages from unused objects directly to inactive_clean (me) 163 - use fast pte quicklists on non-pae machines (Andrea Arcangeli) 164 - remove sleep_on from wakeup_kswapd (Arjan van de Ven) 165 - page waitqueue cleanup (Christoph Hellwig) 166rmap 11c: 167 - oom_kill race locking fix (Andres Salomon) 168 - elevator improvement (Andrew Morton) 169 - dirty buffer writeout speedup (hopefully ;)) (me) 170 - small documentation updates (me) 171 - page_launder() never does synchronous IO, kswapd 172 and the processes calling it sleep on higher level (me) 173 - deadlock fix in touch_page() (me) 174rmap 11b: 175 - added low latency reschedule points in vmscan.c (me) 176 - make i810_dma.c include mm_inline.h too (William Lee Irwin) 177 - wake up kswapd sleeper tasks on OOM kill so the 178 killed task can continue on its way out (me) 179 - tune page allocation sleep point a little (me) 180rmap 11a: 181 - don't let refill_inactive() progress count for OOM (me) 182 - after an OOM kill, wait 5 seconds for the next kill (me) 183 - agpgart_be fix for hashed waitqueues (William Lee Irwin) 184rmap 11: 185 - fix stupid logic inversion bug in wakeup_kswapd() (Andrew Morton) 186 - fix it again in the morning (me) 187 - add #ifdef BROKEN_PPC_PTE_ALLOC_ONE to rmap.h, it 188 seems PPC calls pte_alloc() before mem_map[] init (me) 189 - disable the debugging code in rmap.c ... the code 190 is working and people are running benchmarks (me) 191 - let the slab cache shrink functions return a value 192 to help prevent early OOM killing (Ed Tomlinson) 193 - also, don't call the OOM code if we have enough 194 free pages (me) 195 - move the call to lru_cache_del into __free_pages_ok (Ben LaHaise) 196 - replace the per-page waitqueue with a hashed 197 waitqueue, reduces size of struct page from 64 198 bytes to 52 bytes (48 bytes on non-highmem machines) (William Lee Irwin) 199rmap 10: 200 - fix the livelock for real (yeah right), turned out 201 to be a stupid bug in page_launder_zone() (me) 202 - to make sure the VM subsystem doesn't monopolise 203 the CPU, let kswapd and some apps sleep a bit under 204 heavy stress situations (me) 205 - let __GFP_HIGH allocations dig a little bit deeper 206 into the free page pool, the SCSI layer seems fragile (me) 207rmap 9: 208 - improve comments all over the place (Michael Cohen) 209 - don't panic if page_remove_rmap() cannot find the 210 rmap in question, it's possible that the memory was 211 PG_reserved and belonging to a driver, but the driver 212 exited and cleared the PG_reserved bit (me) 213 - fix the VM livelock by replacing > by >= in a few 214 critical places in the pageout code (me) 215 - treat the reclaiming of an inactive_clean page like 216 allocating a new page, calling try_to_free_pages() 217 and/or fixup_freespace() if required (me) 218 - when low on memory, don't make things worse by 219 doing swapin_readahead (me) 220rmap 8: 221 - add ANY_ZONE to the balancing functions to improve 222 kswapd's balancing a bit (me) 223 - regularize some of the maximum loop bounds in 224 vmscan.c for cosmetic purposes (William Lee Irwin) 225 - move page_address() to architecture-independent 226 code, now the removal of page->virtual is portable (William Lee Irwin) 227 - speed up free_area_init_core() by doing a single 228 pass over the pages and not using atomic ops (William Lee Irwin) 229 - documented the buddy allocator in page_alloc.c (William Lee Irwin) 230rmap 7: 231 - clean up and document vmscan.c (me) 232 - reduce size of page struct, part one (William Lee Irwin) 233 - add rmap.h for other archs (untested, not for ARM) (me) 234rmap 6: 235 - make the active and inactive_dirty list per zone, 236 this is finally possible because we can free pages 237 based on their physical address (William Lee Irwin) 238 - cleaned up William's code a bit (me) 239 - turn some defines into inlines and move those to 240 mm_inline.h (the includes are a mess ...) (me) 241 - improve the VM balancing a bit (me) 242 - add back inactive_target to /proc/meminfo (me) 243rmap 5: 244 - fixed recursive buglet, introduced by directly 245 editing the patch for making rmap 4 ;))) (me) 246rmap 4: 247 - look at the referenced bits in page tables (me) 248rmap 3: 249 - forgot one FASTCALL definition (me) 250rmap 2: 251 - teach try_to_unmap_one() about mremap() (me) 252 - don't assign swap space to pages with buffers (me) 253 - make the rmap.c functions FASTCALL / inline (me) 254rmap 1: 255 - fix the swap leak in rmap 0 (Dave McCracken) 256rmap 0: 257 - port of reverse mapping VM to 2.4.16 (me) 258

