DragonFly-2.3.1.772.g1ae37 master sys/kern sys_pipe.c sys/sys pipe.h

Matthew Dillon dillon at crater.dragonflybsd.org
Sun Jul 12 16:09:01 PDT 2009


commit 1ae37239759b49870dcaae946fc436b7f9f53f73
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date:   Sun Jul 12 15:42:43 2009 -0700

    pipe - Make pipe r/w MPSAFE, add kern.pipe.mpsafe (disabled by default)
    
    * Make pipe_read and pipe_write MPSAFE.
    
    * Add a sysctl kern.pipe.mpsafe which defaults to disabled.  Set to
      1 to test the MPSAFE pipe code.  The expectation is that it will be
      set to 1 for the release.  Currently only pipe_read and pipe_write
      is MPSAFE.
    
    * The new code in mpsafe mode also implements a streaming optimization
      to avoid unnecessary tsleep/wakeup/IPIs.  If the reader and writer
      are operating on different cpus this feature results in more uniform
      performance across a wide swath of block sizes.
    
    * The new code currently does not use any page mapping optimizations.
      Page table overhead is fairly nasty on SMP so for now we rely on cpu
      caches and do an extra copy.  This means the code is tuned better for
      more recent cpus and tuned worse for older cpus.  At least for now.
    
    OLD pipe code:  dwe = dwrite_enable, sfb = dwrite_sfbuf mode
    NEW pipe code:  mpsafe = 0 (gets bgl) or 1 (does not use bgl)
    
    Using /usr/src/test/sysperf/pipe2.c to test, all results in MBytes/sec
    
    			  8K	 16K	 32K	 64K	128K	256K
    			----	----	----	----	----	----
    OLD dwe=0		1193	1167	1555	1525	1473	1477
    OLD dwe=1 sfb=0		 856    1458	2307	2182	2275	2307
    OLD dwe=1 sfb=1		 955	1537	2300	2356	2363	2708
    OLD dwe=1 sfb=2		 939	1561	2367	2477	2379	2360
    
    NEW mpsafe=0		1150	1369	1536	1591	1358	1270
    NEW mpsafe=1		2133	2319	2375	2387	2396	2418

Summary of changes:
 sys/kern/sys_pipe.c |  865 +++++++++++++++++++++++++++++++++------------------
 sys/sys/pipe.h      |   22 +-
 2 files changed, 577 insertions(+), 310 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/1ae37239759b49870dcaae946fc436b7f9f53f73


-- 
DragonFly BSD source repository





More information about the Commits mailing list