lkml.org 
[lkml]   [2005]   [Jan]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: Make pipe data structure be a circular list of pages, rather than


    On Fri, 7 Jan 2005, Linus Torvalds wrote:
    >
    > So the "standard behaviour" (aka just plain read/write on the pipe) is all
    > the same copies that it used to be.

    I want to highlight this again. The increase in throughput did _not_ come
    from avoiding a copy. It came purely from the fact that we have multiple
    buffers, and thus a throughput-intensive load gets to do several bigger
    chunks before it needs to wait for the recipient. So the increase in
    throughput comes from fewer synchronization points (scheduling and
    locking), not from anything else.

    Another way of saying the same thing: pipes actually used to have clearly
    _lower_ bandwidth than UNIX domain sockets, even though clearly pipes are
    simpler and should thus be able to be faster. The reason? UNIX domain
    sockets allow multiple packets in flight, and pipes only used to have a
    single buffer. With the new setup, pipes get roughly comparable
    performance to UNIX domain sockets for me.

    Sockets can still outperform pipes, truth be told - there's been more
    work on socket locking than on pipe locking. For example, the new pipe
    code should conceptually really allow one CPU to empty one pipe buffer
    while another CPU fills another pipe buffer, but because I kept the
    locking structure the same as it used to be, right now read/write
    serialize over the whole pipe rather than anything else.

    This is the main reason why I want to avoid coalescing if possible: if you
    never coalesce, then each "pipe_buffer" is complete in itself, and that
    simplifies locking enormously.

    (The other reason to potentially avoid coalescing is that I think it might
    be useful to allow the "sendmsg()/recvmsg()" interfaces that honour packet
    boundaries. The new pipe code _is_ internally "packetized" after all).

    Linus
    -
    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/

    \
     
     \ /
      Last update: 2009-11-18 23:46    [W:4.593 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site