Messages in this thread | | | Date | Fri, 10 Oct 2008 15:32:41 -0500 | From | Christoph Lameter <> | Subject | Re: [PATCH] mm: use a radix-tree to make do_move_pages() complexity linear |
| |
Brice Goglin wrote:
> Just try sys_move_pages() on a 10-100MB buffer, you'll get something > like 50MB/s on a recent Opteron machine. This throughput decreases > significantly with the number of pages. With this patch, we get about > 350MB/s and the throughput is stable when the migrated buffer gets > larger. I don't have detailled numbers at hand, I'll send them by monday.
Migration throughput is optimal for sys_move_pages() and the cpuset migration. Some comparison would be useful.
With 100MB you have ~250k pages which will require a vmalloc of 4MB for the struct pm struct array to control the migration of each individual page.
Would it be possible to restructure this in such a way that we work in chunks of 100 or so pages each so that we can avoid the vmalloc?
We also could do a kmalloc for each individual struct pm_struct with the radix tree which would also avoid the vmalloc but still keep the need to allocate 4MB for temporary struct pm_structs.
Or get rid of the pm_struct altogether by storing the address of the node vector somewhere and retrieve the node as needed from the array. This would allow storing the struct page * pointers in the radix tree.
| |