Messages in this thread |  | | Date | Sat, 9 Jun 2001 13:40:52 -0400 (EDT) | | From | Alexander Viro <> | | Subject | Re: [patch] truncate_inode_pages |
| |
> takes 45 seconds CPU time due to the O(clean * dirty) algorithm in > truncate_inode_pages(). The machine is locked up for the duration. > The patch reduces this to 20 milliseconds via an O(clean + dirty) > algorithm.
Unfortunately, it's _not_ O(clean + dirty).
> + while (truncate_list_pages(&mapping->clean_pages, start, &partial)) { > + spin_lock(&pagecache_lock); > + complete = 0; > + }
Cool. Now think what happens if pages with large indices are in the very end of list. Half of them. You skip clean/2 pages on each of clean/2 passes. Hardly a linear behaviour - all you need is a different program to trigger it.
Now, having a separate pass that would reorder the pages on list, moving the to-kill ones in the beginning might help.
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|  |