1. 01 May, 2006 5 commits
    • Jens Axboe's avatar
      [PATCH] pipe: enable atomic copying of pipe data to/from user space · f6762b7a
      Jens Axboe authored
      The pipe ->map() method uses kmap() to virtually map the pages, which
      is both slow and has known scalability issues on SMP. This patch enables
      atomic copying of pipe pages, by pre-faulting data and using kmap_atomic()
      instead.
      
      lmbench bw_pipe and lat_pipe measurements agree this is a Good Thing. Here
      are results from that on a UP machine with highmem (1.5GiB of RAM), running
      first a UP kernel, SMP kernel, and SMP kernel patched.
      
      Vanilla-UP:
      Pipe bandwidth: 1622.28 MB/sec
      Pipe bandwidth: 1610.59 MB/sec
      Pipe bandwidth: 1608.30 MB/sec
      Pipe latency: 7.3275 microseconds
      Pipe latency: 7.2995 microseconds
      Pipe latency: 7.3097 microseconds
      
      Vanilla-SMP:
      Pipe bandwidth: 1382.19 MB/sec
      Pipe bandwidth: 1317.27 MB/sec
      Pipe bandwidth: 1355.61 MB/sec
      Pipe latency: 9.6402 microseconds
      Pipe latency: 9.6696 microseconds
      Pipe latency: 9.6153 microseconds
      
      Patched-SMP:
      Pipe bandwidth: 1578.70 MB/sec
      Pipe bandwidth: 1579.95 MB/sec
      Pipe bandwidth: 1578.63 MB/sec
      Pipe latency: 9.1654 microseconds
      Pipe latency: 9.2266 microseconds
      Pipe latency: 9.1527 microseconds
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      f6762b7a
    • Jens Axboe's avatar
      [PATCH] splice: call handle_ra_miss() on failure to lookup page · e27dedd8
      Jens Axboe authored
      Notify the readahead logic of the missing page. Suggested by
      Oleg Nesterov.
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      e27dedd8
    • Jens Axboe's avatar
      [PATCH] Add ->splice_read/splice_write to def_blk_fops · 7f9c51f0
      Jens Axboe authored
      It can use the generic handlers.
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      7f9c51f0
    • Jens Axboe's avatar
      [PATCH] pipe: introduce ->pin() buffer operation · f84d7519
      Jens Axboe authored
      The ->map() function is really expensive on highmem machines right now,
      since it has to use the slower kmap() instead of kmap_atomic(). Splice
      rarely needs to access the virtual address of a page, so it's a waste
      of time doing it.
      
      Introduce ->pin() to take over the responsibility of making sure the
      page data is valid. ->map() is then reduced to just kmap(). That way we
      can also share a most of the pipe buffer ops between pipe.c and splice.c
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      f84d7519
    • Jens Axboe's avatar
      [PATCH] splice: fix bugs in pipe_to_file() · 0568b409
      Jens Axboe authored
      Found by Oleg Nesterov <oleg@tv-sign.ru>, fixed by me.
      
      - Only allow full pages to go to the page cache.
      - Check page != buf->page instead of using PIPE_BUF_FLAG_STOLEN.
      - Remember to clear 'stolen' if add_to_page_cache() fails.
      
      And as a cleanup on that:
      
      - Make the bottom fall-through logic a little less convoluted. Also make
        the steal path hold an extra reference to the page, so we don't have
        to differentiate between stolen and non-stolen at the end.
      Signed-off-by: default avatarJens Axboe <axboe@suse.de>
      0568b409
  2. 30 Apr, 2006 3 commits
  3. 29 Apr, 2006 5 commits
  4. 28 Apr, 2006 27 commits