git: tcp: Let sosendtcp() call tcp_usrreq.pru_send asynchronous

Sepherosa Ziehau sephe at crater.dragonflybsd.org
Mon Oct 24 05:21:23 PDT 2011


commit 0ad8e15ea0059b225c9aa255b844cb9ec48d5227
Author: Sepherosa Ziehau <sephe at dragonflybsd.org>
Date:   Sun Oct 23 20:55:16 2011 +0800

    tcp: Let sosendtcp() call tcp_usrreq.pru_send asynchronous
    
    - Embed netmsg_pru_send into mbuf.m_hdr, which shares the space with
      netmsg_pru_packet.
    - Use the newly added netmsg_pru_send in mbuf to perform asynchronous
      pru_send.  For asynchronous pru_send, PRUS_NOREPLY is added, which
      prevents pru_send to reply the message.
    - In sosendtcp(), if we have more data to call pru_send, we call it
      asynchronously.  The last piece of data or OOB data will still be
      passed to pru_send synchronously.
    
    On Phenom 9550 (4 core, 2.2GHz):
    8 parallel netperf -H 127.0.0.1 (4 runs, unit: Mbps)
    
    old  5863.85  5773.13  5534.14  5506.72
    new  6735.98  6903.13  6971.89  7056.66
    
    This give ~20% performance improvement.
    
    It has no obvious impact on 1000BaseT or 100baseTX network performace.

Summary of changes:
 sys/kern/uipc_msg.c      |   18 ++++++++++++++++++
 sys/kern/uipc_socket.c   |   10 +++++++++-
 sys/net/netmsg.h         |    1 +
 sys/netinet/tcp_usrreq.c |   12 ++++++++----
 sys/sys/mbuf.h           |    7 ++++++-
 sys/sys/socketops.h      |    3 +++
 6 files changed, 45 insertions(+), 6 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/0ad8e15ea0059b225c9aa255b844cb9ec48d5227


-- 
DragonFly BSD source repository





More information about the Commits mailing list