diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2006-03-20 12:47:40 -0500 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2006-03-20 12:47:40 -0500 |
commit | 9a21247181d93fdf99255911845ecdb041d21583 (patch) | |
tree | 6d69be36f8a2bd8c76bf02ead2f0121a511c0a92 /Documentation | |
parent | c752666c17f870fa8ae9f16804dd457e9e6daaec (diff) | |
parent | 7705a8792b0fc82fd7d4dd923724606bbfd9fb20 (diff) |
Merge branch 'master'
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/cpusets.txt | 41 | ||||
-rw-r--r-- | Documentation/dvb/bt8xx.txt | 6 | ||||
-rw-r--r-- | Documentation/feature-removal-schedule.txt | 9 | ||||
-rw-r--r-- | Documentation/kernel-parameters.txt | 21 | ||||
-rw-r--r-- | Documentation/video4linux/CARDLIST.saa7134 | 4 | ||||
-rw-r--r-- | Documentation/vm/page_migration | 118 |
6 files changed, 133 insertions, 66 deletions
diff --git a/Documentation/cpusets.txt b/Documentation/cpusets.txt index 990998ee10b6..30c41459953c 100644 --- a/Documentation/cpusets.txt +++ b/Documentation/cpusets.txt | |||
@@ -4,8 +4,9 @@ | |||
4 | Copyright (C) 2004 BULL SA. | 4 | Copyright (C) 2004 BULL SA. |
5 | Written by Simon.Derr@bull.net | 5 | Written by Simon.Derr@bull.net |
6 | 6 | ||
7 | Portions Copyright (c) 2004 Silicon Graphics, Inc. | 7 | Portions Copyright (c) 2004-2006 Silicon Graphics, Inc. |
8 | Modified by Paul Jackson <pj@sgi.com> | 8 | Modified by Paul Jackson <pj@sgi.com> |
9 | Modified by Christoph Lameter <clameter@sgi.com> | ||
9 | 10 | ||
10 | CONTENTS: | 11 | CONTENTS: |
11 | ========= | 12 | ========= |
@@ -90,7 +91,8 @@ This can be especially valuable on: | |||
90 | 91 | ||
91 | These subsets, or "soft partitions" must be able to be dynamically | 92 | These subsets, or "soft partitions" must be able to be dynamically |
92 | adjusted, as the job mix changes, without impacting other concurrently | 93 | adjusted, as the job mix changes, without impacting other concurrently |
93 | executing jobs. | 94 | executing jobs. The location of the running jobs pages may also be moved |
95 | when the memory locations are changed. | ||
94 | 96 | ||
95 | The kernel cpuset patch provides the minimum essential kernel | 97 | The kernel cpuset patch provides the minimum essential kernel |
96 | mechanisms required to efficiently implement such subsets. It | 98 | mechanisms required to efficiently implement such subsets. It |
@@ -102,8 +104,8 @@ memory allocator code. | |||
102 | 1.3 How are cpusets implemented ? | 104 | 1.3 How are cpusets implemented ? |
103 | --------------------------------- | 105 | --------------------------------- |
104 | 106 | ||
105 | Cpusets provide a Linux kernel (2.6.7 and above) mechanism to constrain | 107 | Cpusets provide a Linux kernel mechanism to constrain which CPUs and |
106 | which CPUs and Memory Nodes are used by a process or set of processes. | 108 | Memory Nodes are used by a process or set of processes. |
107 | 109 | ||
108 | The Linux kernel already has a pair of mechanisms to specify on which | 110 | The Linux kernel already has a pair of mechanisms to specify on which |
109 | CPUs a task may be scheduled (sched_setaffinity) and on which Memory | 111 | CPUs a task may be scheduled (sched_setaffinity) and on which Memory |
@@ -371,22 +373,17 @@ cpusets memory placement policy 'mems' subsequently changes. | |||
371 | If the cpuset flag file 'memory_migrate' is set true, then when | 373 | If the cpuset flag file 'memory_migrate' is set true, then when |
372 | tasks are attached to that cpuset, any pages that task had | 374 | tasks are attached to that cpuset, any pages that task had |
373 | allocated to it on nodes in its previous cpuset are migrated | 375 | allocated to it on nodes in its previous cpuset are migrated |
374 | to the tasks new cpuset. Depending on the implementation, | 376 | to the tasks new cpuset. The relative placement of the page within |
375 | this migration may either be done by swapping the page out, | 377 | the cpuset is preserved during these migration operations if possible. |
376 | so that the next time the page is referenced, it will be paged | 378 | For example if the page was on the second valid node of the prior cpuset |
377 | into the tasks new cpuset, usually on the node where it was | 379 | then the page will be placed on the second valid node of the new cpuset. |
378 | referenced, or this migration may be done by directly copying | 380 | |
379 | the pages from the tasks previous cpuset to the new cpuset, | ||
380 | where possible to the same node, relative to the new cpuset, | ||
381 | as the node that held the page, relative to the old cpuset. | ||
382 | Also if 'memory_migrate' is set true, then if that cpusets | 381 | Also if 'memory_migrate' is set true, then if that cpusets |
383 | 'mems' file is modified, pages allocated to tasks in that | 382 | 'mems' file is modified, pages allocated to tasks in that |
384 | cpuset, that were on nodes in the previous setting of 'mems', | 383 | cpuset, that were on nodes in the previous setting of 'mems', |
385 | will be moved to nodes in the new setting of 'mems.' Again, | 384 | will be moved to nodes in the new setting of 'mems.' |
386 | depending on the implementation, this might be done by swapping, | 385 | Pages that were not in the tasks prior cpuset, or in the cpusets |
387 | or by direct copying. In either case, pages that were not in | 386 | prior 'mems' setting, will not be moved. |
388 | the tasks prior cpuset, or in the cpusets prior 'mems' setting, | ||
389 | will not be moved. | ||
390 | 387 | ||
391 | There is an exception to the above. If hotplug functionality is used | 388 | There is an exception to the above. If hotplug functionality is used |
392 | to remove all the CPUs that are currently assigned to a cpuset, | 389 | to remove all the CPUs that are currently assigned to a cpuset, |
@@ -434,16 +431,6 @@ and then start a subshell 'sh' in that cpuset: | |||
434 | # The next line should display '/Charlie' | 431 | # The next line should display '/Charlie' |
435 | cat /proc/self/cpuset | 432 | cat /proc/self/cpuset |
436 | 433 | ||
437 | In the case that a change of cpuset includes wanting to move already | ||
438 | allocated memory pages, consider further the work of IWAMOTO | ||
439 | Toshihiro <iwamoto@valinux.co.jp> for page remapping and memory | ||
440 | hotremoval, which can be found at: | ||
441 | |||
442 | http://people.valinux.co.jp/~iwamoto/mh.html | ||
443 | |||
444 | The integration of cpusets with such memory migration is not yet | ||
445 | available. | ||
446 | |||
447 | In the future, a C library interface to cpusets will likely be | 434 | In the future, a C library interface to cpusets will likely be |
448 | available. For now, the only way to query or modify cpusets is | 435 | available. For now, the only way to query or modify cpusets is |
449 | via the cpuset file system, using the various cd, mkdir, echo, cat, | 436 | via the cpuset file system, using the various cd, mkdir, echo, cat, |
diff --git a/Documentation/dvb/bt8xx.txt b/Documentation/dvb/bt8xx.txt index df6c05453cb5..52ed462061df 100644 --- a/Documentation/dvb/bt8xx.txt +++ b/Documentation/dvb/bt8xx.txt | |||
@@ -111,4 +111,8 @@ source: linux/Documentation/video4linux/CARDLIST.bttv | |||
111 | If you have problems with this please do ask on the mailing list. | 111 | If you have problems with this please do ask on the mailing list. |
112 | 112 | ||
113 | -- | 113 | -- |
114 | Authors: Richard Walker, Jamie Honan, Michael Hunold, Manu Abraham | 114 | Authors: Richard Walker, |
115 | Jamie Honan, | ||
116 | Michael Hunold, | ||
117 | Manu Abraham, | ||
118 | Michael Krufky | ||
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index be5ae600f533..81bc51369f59 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -180,3 +180,12 @@ Why: These events are not correct, and do not properly let userspace know | |||
180 | when a file system has been mounted or unmounted. Userspace should | 180 | when a file system has been mounted or unmounted. Userspace should |
181 | poll the /proc/mounts file instead to detect this properly. | 181 | poll the /proc/mounts file instead to detect this properly. |
182 | Who: Greg Kroah-Hartman <gregkh@suse.de> | 182 | Who: Greg Kroah-Hartman <gregkh@suse.de> |
183 | |||
184 | --------------------------- | ||
185 | |||
186 | What: Support for NEC DDB5074 and DDB5476 evaluation boards. | ||
187 | When: June 2006 | ||
188 | Why: Board specific code doesn't build anymore since ~2.6.0 and no | ||
189 | users have complained indicating there is no more need for these | ||
190 | boards. This should really be considered a last call. | ||
191 | Who: Ralf Baechle <ralf@linux-mips.org> | ||
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index b874771385cd..fc99075e0af4 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -335,6 +335,12 @@ running once the system is up. | |||
335 | timesource is not avalible, it defaults to PIT. | 335 | timesource is not avalible, it defaults to PIT. |
336 | Format: { pit | tsc | cyclone | pmtmr } | 336 | Format: { pit | tsc | cyclone | pmtmr } |
337 | 337 | ||
338 | disable_8254_timer | ||
339 | enable_8254_timer | ||
340 | [IA32/X86_64] Disable/Enable interrupt 0 timer routing | ||
341 | over the 8254 in addition to over the IO-APIC. The | ||
342 | kernel tries to set a sensible default. | ||
343 | |||
338 | hpet= [IA-32,HPET] option to disable HPET and use PIT. | 344 | hpet= [IA-32,HPET] option to disable HPET and use PIT. |
339 | Format: disable | 345 | Format: disable |
340 | 346 | ||
@@ -1034,6 +1040,8 @@ running once the system is up. | |||
1034 | 1040 | ||
1035 | nomce [IA-32] Machine Check Exception | 1041 | nomce [IA-32] Machine Check Exception |
1036 | 1042 | ||
1043 | nomca [IA-64] Disable machine check abort handling | ||
1044 | |||
1037 | noresidual [PPC] Don't use residual data on PReP machines. | 1045 | noresidual [PPC] Don't use residual data on PReP machines. |
1038 | 1046 | ||
1039 | noresume [SWSUSP] Disables resume and restores original swap | 1047 | noresume [SWSUSP] Disables resume and restores original swap |
@@ -1282,6 +1290,19 @@ running once the system is up. | |||
1282 | New name for the ramdisk parameter. | 1290 | New name for the ramdisk parameter. |
1283 | See Documentation/ramdisk.txt. | 1291 | See Documentation/ramdisk.txt. |
1284 | 1292 | ||
1293 | rcu.blimit= [KNL,BOOT] Set maximum number of finished | ||
1294 | RCU callbacks to process in one batch. | ||
1295 | |||
1296 | rcu.qhimark= [KNL,BOOT] Set threshold of queued | ||
1297 | RCU callbacks over which batch limiting is disabled. | ||
1298 | |||
1299 | rcu.qlowmark= [KNL,BOOT] Set threshold of queued | ||
1300 | RCU callbacks below which batch limiting is re-enabled. | ||
1301 | |||
1302 | rcu.rsinterval= [KNL,BOOT,SMP] Set the number of additional | ||
1303 | RCU callbacks to queued before forcing reschedule | ||
1304 | on all cpus. | ||
1305 | |||
1285 | rdinit= [KNL] | 1306 | rdinit= [KNL] |
1286 | Format: <full_path> | 1307 | Format: <full_path> |
1287 | Run specified binary instead of /init from the ramdisk, | 1308 | Run specified binary instead of /init from the ramdisk, |
diff --git a/Documentation/video4linux/CARDLIST.saa7134 b/Documentation/video4linux/CARDLIST.saa7134 index 8a352597830f..da4fb890165f 100644 --- a/Documentation/video4linux/CARDLIST.saa7134 +++ b/Documentation/video4linux/CARDLIST.saa7134 | |||
@@ -13,7 +13,7 @@ | |||
13 | 12 -> Medion 7134 [16be:0003] | 13 | 12 -> Medion 7134 [16be:0003] |
14 | 13 -> Typhoon TV+Radio 90031 | 14 | 13 -> Typhoon TV+Radio 90031 |
15 | 14 -> ELSA EX-VISION 300TV [1048:226b] | 15 | 14 -> ELSA EX-VISION 300TV [1048:226b] |
16 | 15 -> ELSA EX-VISION 500TV [1048:226b] | 16 | 15 -> ELSA EX-VISION 500TV [1048:226a] |
17 | 16 -> ASUS TV-FM 7134 [1043:4842,1043:4830,1043:4840] | 17 | 16 -> ASUS TV-FM 7134 [1043:4842,1043:4830,1043:4840] |
18 | 17 -> AOPEN VA1000 POWER [1131:7133] | 18 | 17 -> AOPEN VA1000 POWER [1131:7133] |
19 | 18 -> BMK MPEX No Tuner | 19 | 18 -> BMK MPEX No Tuner |
@@ -75,7 +75,7 @@ | |||
75 | 74 -> LifeView FlyTV Platinum Mini2 [14c0:1212] | 75 | 74 -> LifeView FlyTV Platinum Mini2 [14c0:1212] |
76 | 75 -> AVerMedia AVerTVHD MCE A180 [1461:1044] | 76 | 75 -> AVerMedia AVerTVHD MCE A180 [1461:1044] |
77 | 76 -> SKNet MonsterTV Mobile [1131:4ee9] | 77 | 76 -> SKNet MonsterTV Mobile [1131:4ee9] |
78 | 77 -> Pinnacle PCTV 110i (saa7133) [11bd:002e] | 78 | 77 -> Pinnacle PCTV 40i/50i/110i (saa7133) [11bd:002e] |
79 | 78 -> ASUSTeK P7131 Dual [1043:4862] | 79 | 78 -> ASUSTeK P7131 Dual [1043:4862] |
80 | 79 -> Sedna/MuchTV PC TV Cardbus TV/Radio (ITO25 Rev:2B) | 80 | 79 -> Sedna/MuchTV PC TV Cardbus TV/Radio (ITO25 Rev:2B) |
81 | 80 -> ASUS Digimatrix TV [1043:0210] | 81 | 80 -> ASUS Digimatrix TV [1043:0210] |
diff --git a/Documentation/vm/page_migration b/Documentation/vm/page_migration index c52820fcf500..0dd4ef30c361 100644 --- a/Documentation/vm/page_migration +++ b/Documentation/vm/page_migration | |||
@@ -12,12 +12,18 @@ is running. | |||
12 | 12 | ||
13 | Page migration allows a process to manually relocate the node on which its | 13 | Page migration allows a process to manually relocate the node on which its |
14 | pages are located through the MF_MOVE and MF_MOVE_ALL options while setting | 14 | pages are located through the MF_MOVE and MF_MOVE_ALL options while setting |
15 | a new memory policy. The pages of process can also be relocated | 15 | a new memory policy via mbind(). The pages of process can also be relocated |
16 | from another process using the sys_migrate_pages() function call. The | 16 | from another process using the sys_migrate_pages() function call. The |
17 | migrate_pages function call takes two sets of nodes and moves pages of a | 17 | migrate_pages function call takes two sets of nodes and moves pages of a |
18 | process that are located on the from nodes to the destination nodes. | 18 | process that are located on the from nodes to the destination nodes. |
19 | 19 | Page migration functions are provided by the numactl package by Andi Kleen | |
20 | Manual migration is very useful if for example the scheduler has relocated | 20 | (a version later than 0.9.3 is required. Get it from |
21 | ftp://ftp.suse.com/pub/people/ak). numactl provided libnuma which | ||
22 | provides an interface similar to other numa functionality for page migration. | ||
23 | cat /proc/<pid>/numa_maps allows an easy review of where the pages of | ||
24 | a process are located. See also the numa_maps manpage in the numactl package. | ||
25 | |||
26 | Manual migration is useful if for example the scheduler has relocated | ||
21 | a process to a processor on a distant node. A batch scheduler or an | 27 | a process to a processor on a distant node. A batch scheduler or an |
22 | administrator may detect the situation and move the pages of the process | 28 | administrator may detect the situation and move the pages of the process |
23 | nearer to the new processor. At some point in the future we may have | 29 | nearer to the new processor. At some point in the future we may have |
@@ -25,10 +31,12 @@ some mechanism in the scheduler that will automatically move the pages. | |||
25 | 31 | ||
26 | Larger installations usually partition the system using cpusets into | 32 | Larger installations usually partition the system using cpusets into |
27 | sections of nodes. Paul Jackson has equipped cpusets with the ability to | 33 | sections of nodes. Paul Jackson has equipped cpusets with the ability to |
28 | move pages when a task is moved to another cpuset. This allows automatic | 34 | move pages when a task is moved to another cpuset (See ../cpusets.txt). |
29 | control over locality of a process. If a task is moved to a new cpuset | 35 | Cpusets allows the automation of process locality. If a task is moved to |
30 | then also all its pages are moved with it so that the performance of the | 36 | a new cpuset then also all its pages are moved with it so that the |
31 | process does not sink dramatically (as is the case today). | 37 | performance of the process does not sink dramatically. Also the pages |
38 | of processes in a cpuset are moved if the allowed memory nodes of a | ||
39 | cpuset are changed. | ||
32 | 40 | ||
33 | Page migration allows the preservation of the relative location of pages | 41 | Page migration allows the preservation of the relative location of pages |
34 | within a group of nodes for all migration techniques which will preserve a | 42 | within a group of nodes for all migration techniques which will preserve a |
@@ -37,22 +45,26 @@ process. This is necessary in order to preserve the memory latencies. | |||
37 | Processes will run with similar performance after migration. | 45 | Processes will run with similar performance after migration. |
38 | 46 | ||
39 | Page migration occurs in several steps. First a high level | 47 | Page migration occurs in several steps. First a high level |
40 | description for those trying to use migrate_pages() and then | 48 | description for those trying to use migrate_pages() from the kernel |
41 | a low level description of how the low level details work. | 49 | (for userspace usage see the Andi Kleen's numactl package mentioned above) |
50 | and then a low level description of how the low level details work. | ||
42 | 51 | ||
43 | A. Use of migrate_pages() | 52 | A. In kernel use of migrate_pages() |
44 | ------------------------- | 53 | ----------------------------------- |
45 | 54 | ||
46 | 1. Remove pages from the LRU. | 55 | 1. Remove pages from the LRU. |
47 | 56 | ||
48 | Lists of pages to be migrated are generated by scanning over | 57 | Lists of pages to be migrated are generated by scanning over |
49 | pages and moving them into lists. This is done by | 58 | pages and moving them into lists. This is done by |
50 | calling isolate_lru_page() or __isolate_lru_page(). | 59 | calling isolate_lru_page(). |
51 | Calling isolate_lru_page increases the references to the page | 60 | Calling isolate_lru_page increases the references to the page |
52 | so that it cannot vanish under us. | 61 | so that it cannot vanish while the page migration occurs. |
62 | It also prevents the swapper or other scans to encounter | ||
63 | the page. | ||
53 | 64 | ||
54 | 2. Generate a list of newly allocates page to move the contents | 65 | 2. Generate a list of newly allocates page. These pages will contain the |
55 | of the first list to. | 66 | contents of the pages from the first list after page migration is |
67 | complete. | ||
56 | 68 | ||
57 | 3. The migrate_pages() function is called which attempts | 69 | 3. The migrate_pages() function is called which attempts |
58 | to do the migration. It returns the moved pages in the | 70 | to do the migration. It returns the moved pages in the |
@@ -63,13 +75,17 @@ A. Use of migrate_pages() | |||
63 | 4. The leftover pages of various types are returned | 75 | 4. The leftover pages of various types are returned |
64 | to the LRU using putback_to_lru_pages() or otherwise | 76 | to the LRU using putback_to_lru_pages() or otherwise |
65 | disposed of. The pages will still have the refcount as | 77 | disposed of. The pages will still have the refcount as |
66 | increased by isolate_lru_pages()! | 78 | increased by isolate_lru_pages() if putback_to_lru_pages() is not |
79 | used! The kernel may want to handle the various cases of failures in | ||
80 | different ways. | ||
67 | 81 | ||
68 | B. Operation of migrate_pages() | 82 | B. How migrate_pages() works |
69 | -------------------------------- | 83 | ---------------------------- |
70 | 84 | ||
71 | migrate_pages does several passes over its list of pages. A page is moved | 85 | migrate_pages() does several passes over its list of pages. A page is moved |
72 | if all references to a page are removable at the time. | 86 | if all references to a page are removable at the time. The page has |
87 | already been removed from the LRU via isolate_lru_page() and the refcount | ||
88 | is increased so that the page cannot be freed while page migration occurs. | ||
73 | 89 | ||
74 | Steps: | 90 | Steps: |
75 | 91 | ||
@@ -79,36 +95,40 @@ Steps: | |||
79 | 95 | ||
80 | 3. Make sure that the page has assigned swap cache entry if | 96 | 3. Make sure that the page has assigned swap cache entry if |
81 | it is an anonyous page. The swap cache reference is necessary | 97 | it is an anonyous page. The swap cache reference is necessary |
82 | to preserve the information contain in the page table maps. | 98 | to preserve the information contain in the page table maps while |
99 | page migration occurs. | ||
83 | 100 | ||
84 | 4. Prep the new page that we want to move to. It is locked | 101 | 4. Prep the new page that we want to move to. It is locked |
85 | and set to not being uptodate so that all accesses to the new | 102 | and set to not being uptodate so that all accesses to the new |
86 | page immediately lock while we are moving references. | 103 | page immediately lock while the move is in progress. |
87 | 104 | ||
88 | 5. All the page table references to the page are either dropped (file backed) | 105 | 5. All the page table references to the page are either dropped (file |
89 | or converted to swap references (anonymous pages). This should decrease the | 106 | backed pages) or converted to swap references (anonymous pages). |
90 | reference count. | 107 | This should decrease the reference count. |
91 | 108 | ||
92 | 6. The radix tree lock is taken | 109 | 6. The radix tree lock is taken. This will cause all processes trying |
110 | to reestablish a pte to block on the radix tree spinlock. | ||
93 | 111 | ||
94 | 7. The refcount of the page is examined and we back out if references remain | 112 | 7. The refcount of the page is examined and we back out if references remain |
95 | otherwise we know that we are the only one referencing this page. | 113 | otherwise we know that we are the only one referencing this page. |
96 | 114 | ||
97 | 8. The radix tree is checked and if it does not contain the pointer to this | 115 | 8. The radix tree is checked and if it does not contain the pointer to this |
98 | page then we back out. | 116 | page then we back out because someone else modified the mapping first. |
99 | 117 | ||
100 | 9. The mapping is checked. If the mapping is gone then a truncate action may | 118 | 9. The mapping is checked. If the mapping is gone then a truncate action may |
101 | be in progress and we back out. | 119 | be in progress and we back out. |
102 | 120 | ||
103 | 10. The new page is prepped with some settings from the old page so that accesses | 121 | 10. The new page is prepped with some settings from the old page so that |
104 | to the new page will be discovered to have the correct settings. | 122 | accesses to the new page will be discovered to have the correct settings. |
105 | 123 | ||
106 | 11. The radix tree is changed to point to the new page. | 124 | 11. The radix tree is changed to point to the new page. |
107 | 125 | ||
108 | 12. The reference count of the old page is dropped because the reference has now | 126 | 12. The reference count of the old page is dropped because the radix tree |
109 | been removed. | 127 | reference is gone. |
110 | 128 | ||
111 | 13. The radix tree lock is dropped. | 129 | 13. The radix tree lock is dropped. With that lookups become possible again |
130 | and other processes will move from spinning on the tree lock to sleeping on | ||
131 | the locked new page. | ||
112 | 132 | ||
113 | 14. The page contents are copied to the new page. | 133 | 14. The page contents are copied to the new page. |
114 | 134 | ||
@@ -119,11 +139,37 @@ Steps: | |||
119 | 139 | ||
120 | 17. Queued up writeback on the new page is triggered. | 140 | 17. Queued up writeback on the new page is triggered. |
121 | 141 | ||
122 | 18. If swap pte's were generated for the page then remove them again. | 142 | 18. If swap pte's were generated for the page then replace them with real |
143 | ptes. This will reenable access for processes not blocked by the page lock. | ||
144 | |||
145 | 19. The page locks are dropped from the old and new page. | ||
146 | Processes waiting on the page lock can continue. | ||
147 | |||
148 | 20. The new page is moved to the LRU and can be scanned by the swapper | ||
149 | etc again. | ||
150 | |||
151 | TODO list | ||
152 | --------- | ||
153 | |||
154 | - Page migration requires the use of swap handles to preserve the | ||
155 | information of the anonymous page table entries. This means that swap | ||
156 | space is reserved but never used. The maximum number of swap handles used | ||
157 | is determined by CHUNK_SIZE (see mm/mempolicy.c) per ongoing migration. | ||
158 | Reservation of pages could be avoided by having a special type of swap | ||
159 | handle that does not require swap space and that would only track the page | ||
160 | references. Something like that was proposed by Marcelo Tosatti in the | ||
161 | past (search for migration cache on lkml or linux-mm@kvack.org). | ||
123 | 162 | ||
124 | 19. The locks are dropped from the old and new page. | 163 | - Page migration unmaps ptes for file backed pages and requires page |
164 | faults to reestablish these ptes. This could be optimized by somehow | ||
165 | recording the references before migration and then reestablish them later. | ||
166 | However, there are several locking challenges that have to be overcome | ||
167 | before this is possible. | ||
125 | 168 | ||
126 | 20. The new page is moved to the LRU. | 169 | - Page migration generates read ptes for anonymous pages. Dirty page |
170 | faults are required to make the pages writable again. It may be possible | ||
171 | to generate a pte marked dirty if it is known that the page is dirty and | ||
172 | that this process has the only reference to that page. | ||
127 | 173 | ||
128 | Christoph Lameter, December 19, 2005. | 174 | Christoph Lameter, March 8, 2006. |
129 | 175 | ||