Re: [DATAPOINT] kernels and latencies

From: Andrew Morton (andrewm@uow.edu.au)
Date: Mon Jul 03 2000 - 13:22:54 EST


Roger Larsson wrote:
>
> Hi,
>
> I have gone trough my collected data and found that
> the best yet (non latency patched) is
> test1-ac22-riel++
> It works perfectly for streaming read/write/copy
> (latencies to SCHED_FIFO process below 5 ms !)
> but fails for mmap002 with latencies > 180 ms

With a conditional reschedule in generic_file_read,
generic_file_write and truncate_inode_pages the scheduling
latency falls from 130 millisecs to 4 millisecs during a kernel build.

I don't think mmap002 is a very pointful test. "Don't
run mmap002 when you're doing multimedia".

Here's the story on mmap002:

switchin_0144:0 -> switchout_0144:0 2600 .90 159336.00 319.49 830693.16
   start_0144:0 -> switchout_0144:0 2 2552.31 100519.87 51536.09 103072.18
           open.c:811 -> open.c:813 78 .15 74553.96 960.08 74886.74
switchin_0120:0 -> switchout_0120:0 2418 .65 58210.29 451.25 1091147.90
      switchin_0001:0 -> open.c:806 1 50005.77 50005.77 50005.77 50005.77
   start_0001:0 -> switchout_0001:0 1 14107.08 14107.08 14107.08 14107.08
switchin_0001:0 -> switchout_0001:0 54 263.45 3880.48 1696.84 91629.60
     switchin_0106:0 -> stop_0106:0 4 3.50 1420.02 419.48 1677.94
         start_0011:0 -> open.c:834 3 220.58 719.98 487.38 1462.15

                                                       ^^^^^^^^^
                                                      This column

160 milliseconds in sys_msync() -> "don't use sys_msync()...."

That 75 millisecs in open.c is the fput(filp) in sys_close(). Investigating...

syscall 120 is sys_clone.

syscall 1 is sys_exit.

All very interesting, but really the only thing which needs tweaking in
the filesystem apart from the patch below appears to be sys_close(). After that
I'll take a look at X11 and /proc performance.

On a fast uniprocessor, it is going to be very hard to do better
than 3.5 milliseconds.

BTW: I love the comment below about shared mappings :)

Index: mm/filemap.c
===================================================================
RCS file: /opt/cvs/lk/mm/filemap.c,v
retrieving revision 1.16.2.7
diff -u -r1.16.2.7 filemap.c
--- mm/filemap.c 2000/06/30 08:26:00 1.16.2.7
+++ mm/filemap.c 2000/07/03 18:12:35
@@ -29,6 +29,8 @@
 
 #include <linux/highmem.h>
 
+#include <asm/timepeg.h>
+
 /*
  * Shared mappings implemented 30.11.1994. It's not fully working yet,
  * though.
@@ -160,6 +162,8 @@
         start = (lstart + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
 
 repeat:
+ if (current->need_resched)
+ schedule(); // AKPM
         head = &mapping->pages;
         spin_lock(&pagecache_lock);
         curr = head->next;
@@ -1043,6 +1047,9 @@
                 struct page *page, **hash;
                 unsigned long end_index, nr;
 
+ if (current->need_resched) // AKPM3
+ schedule();
+
                 end_index = inode->i_size >> PAGE_CACHE_SHIFT;
                 if (index > end_index)
                         break;
@@ -2490,6 +2497,9 @@
         while (count) {
                 unsigned long bytes, index, offset;
                 char *kaddr;
+
+ if (current->need_resched)
+ schedule();
 
                 /*
                  * Try to find the page in the cache. If it isn't there,

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Jul 07 2000 - 21:00:13 EST