Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 29 Nov 2001 14:46:48 -0800 (PST)
From:      Luigi Rizzo <luigi@FreeBSD.org>
To:        cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org
Subject:   cvs commit: src/sys/pci if_dc.c
Message-ID:  <200111292246.fATMkmN96781@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
luigi       2001/11/29 14:46:48 PST

  Modified files:
    sys/pci              if_dc.c 
  Log:
  For i386 architecture, remove an expensive m_devget() (and the
  underlying unaligned bcopy) on incoming packets that are already
  available (albeit unaligned) in a buffer.
  The performance improvement varies, depending on CPU and memory
  speed, but can be quite large especially on slow CPUs. I have seen
  over 50% increase on forwarding speed on the sis driver for the
  486/133 (embedded systems), which does exactly the same thing.
  
  The behaviour is controlled by a sysctl variable, hw.dc_quick which
  defaults to 1. Set it to 0 to restore the old behaviour.
  
  After running a few experiments (in userland, though) I am convinced
  that doing the m_devget() is detrimental to performance in almost
  all cases.
  
  Even if your CPU has degraded performance with misaligned data,
  the bcopy() in the driver has the same overhead due to misaligment
  as the one that you save in the uiomove(), plus you do one extra
  copy and pollute the cache.
  
  But more often than not, you do not even have to touch the payload,
  e.g. when you are forwarding packets, and even in the often-cited
  case of NFS, you often end up passing a pointer to the payload to
  the disk controller.
  
  In any case, you can play with the sysctl variable to toggle between
  the two behaviours, and see if it makes a difference.
  
  MFC-after: 3 days
  
  Revision  Changes    Path
  1.59      +40 -31    src/sys/pci/if_dc.c

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200111292246.fATMkmN96781>