[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug 1199 (linux mm)] New - 2.4.1: prune_icache horribly inefficient



http://distro.conectiva.com.br/bugzilla/show_bug.cgi?id=1199

--- shadow/1199	Fri Feb  2 15:05:50 2001
+++ shadow/1199.tmp.12527	Fri Feb  2 15:05:50 2001
@@ -0,0 +1,33 @@
++============================================================================+
+| 2.4.1: prune_icache horribly inefficient                                   |
++----------------------------------------------------------------------------+
+|        Bug #: 1199                        Product: Linux kernel MM         |
+|       Status: NEW                         Version: 2.4 (stable)            |
+|   Resolution:                            Platform: All                     |
+|     Severity: minor                    OS/Version: Linux                   |
+|     Priority: P2                        Component: linux mm                |
++----------------------------------------------------------------------------+
+|  Assigned To: linux-mm-bugs@nl.linux.org                                   |
+|  Reported By: riel@conectiva.com.br                                        |
+|      CC list: Cc:                                                          |
++----------------------------------------------------------------------------+
+|          URL:                                                              |
++============================================================================+
+|                              DESCRIPTION                                   |
+fs/inode.c::prune_icache() is horribly inefficient and has the potential to make
+kswapd (or applications) block on IO for a very long time.
+
+Near the top of prune_icache():	
+        /* go simple and safe syncing everything before starting */
+        sync_all_inodes();
+
+The sync_all_inodes() ends up doing an fsync on all inodes in the system - in
+sync_one() - and waiting for the data to be flushed synchronously.
+
+What we would want instead is to get rid of the call to sync_all_inodes() and
+add code to sync out those dirty inodes - with no data pages attached - that we
+want to free .. asynchronously.
+
+This is mostly a performance issue, but it looks like an easy to fix problem
+that doesn't involve much new code ... just a sync_one() variant that leaves the
+data pages alone and syncs dirty inodes with no data pages attached.
\ No newline at end of file

-
Linux-mm-bugs:  bugzilla list for the Linux-MM subsystem
Archive:        http://mail.nl.linux.org/linux-mm-bugs/
Web site:       http://www.linux.eu.org/Linux-MM/
Development:    linux-mm@kvack.org