6 years agoUnbreak world (gcc47 plugin)
John Marino [Sat, 2 Feb 2013 22:35:27 +0000 (23:35 +0100)]
Unbreak world (gcc47 plugin)

The installincludes target is run before "depend" target, so gtype.state
hasn't been created by the time "installincludes" is executed in stage 4.
Luckily there is a similar functionality for FILES that is executed at
the install phase, which will unbreak world (broken on previous commit).

Other headers are generated as well, so swap INCSGROUPS with FILESGROUPS
for everything to avoid having to figure which ones.  The headers are
needed at runtime, not buildtime, so this is okay.

6 years agogcc47: Fix plugin mechanism
John Marino [Sat, 2 Feb 2013 15:29:40 +0000 (16:29 +0100)]
gcc47: Fix plugin mechanism

There were two problems with gcc 4.7 LTO plugin:
1) It needed a number of object files from libiberty.
   Unfortunately the previous object files couldn't be used as they need
   to be built with -fPIC and libiberty is only an internal (non-pic) lib.
2) The plugin header directory was missing completely, as seen with
   gcc -print-file-name=plugin only returning "plugin".

6 years agopktgen: Use atomic for pktgen and module reference count
Sepherosa Ziehau [Sat, 2 Feb 2013 08:23:57 +0000 (16:23 +0800)]
pktgen: Use atomic for pktgen and module reference count

Module's token is no longer needed in many places.  Ease the upcoming
changes to support multiple hardware TX queues.

6 years agokernel - Fix kernel panic caused by rename race
Matthew Dillon [Fri, 1 Feb 2013 21:47:37 +0000 (13:47 -0800)]
kernel - Fix kernel panic caused by rename race

* kern_rename() must temporarily unlock the source ncp when resolving the
  target ncp, and will sometimes have to temporarily unlock the target ncp
  when relocking both.  This can race against a topological removal of one
  or both ncp's, resulting in incorrect operation or a panic due to a
  NULL vp.

* Detect the case and return EAGAIN if the ncp's have been marked NCF_DESTROYED
  or if fromncp loses its vp resolution.  Callers detect the EAGAIN and retry
  the operation.

Reported-by: ftigeot
6 years agokernel - cycle vnode in cache_unlink()
Matthew Dillon [Fri, 1 Feb 2013 17:57:55 +0000 (09:57 -0800)]
kernel - cycle vnode in cache_unlink()

* cache_unlink() and cache_rename() are called by VFS's to update the
  namecache after a file deletion or rename.  cache_rename() also calls

* Add code to this function which cycles any vnode attached to the
  namecache entry for the case where its refs are 0.  This will
  trigger VOP_INACTIVE and allow the VFS to detect file deletions.

  Generally speaking this means that VFS's no longer have to detect
  deleted files in code paths outside of VOP_INACTIVE w/regards to
  forcing a reclaim on the vnode.

* HAMMER2 now depends on this behavior.  The change in behavior allows
  HAMMER2 to do away with inode backpointers from chain structures,
  greatly simplifying the code and removing a chicken-egg dependency.

* Other VFSs (HAMMER, TMPFS, UFS) may be adjusted in the future but for
  now their file deletion code outside of VOP_INACTIVE is being left

6 years agokernel - Fix memory leak on iocom terminaion
Matthew Dillon [Fri, 1 Feb 2013 17:54:43 +0000 (09:54 -0800)]
kernel - Fix memory leak on iocom terminaion

* freerd_state was being cleaned up by the reader thread, but during
  decomissioning the writer thread can simulate incoming packets
  to cleanly shutdown open transactions, and this can reload

* Move the cleanup for freerd_state and freewr_state out of the
  reader/writer threads and into kdmsg_iocom_uninit() proper.

* Fixes dangling 112 bytes of memory left allocated after uninit.

6 years agohammer2 - serialized flush work part 4
Matthew Dillon [Fri, 1 Feb 2013 17:19:41 +0000 (09:19 -0800)]
hammer2 - serialized flush work part 4

* Hardlink helper functions now take and return hammer2_chain pointers
  instead of messing with hammer2_inode's, which simplifies matters

* Major cleanup of the hardlink handling code.

* Get hardlink creation/deletion mostly working as expected again.
  There is still an issue with hammer_inode aliasing (see TODO),
  and the rename-directory-to-some-parent hardlink issue has not been
  addressed yet.

6 years agopktgen: Unbreak compile
Sepherosa Ziehau [Fri, 1 Feb 2013 08:33:21 +0000 (16:33 +0800)]
pktgen: Unbreak compile

6 years agohammer2 - serialized flush work part 3
Matthew Dillon [Fri, 1 Feb 2013 00:03:59 +0000 (16:03 -0800)]
hammer2 - serialized flush work part 3

* Clean up hammer2_inode vs hammer2_chain.  Remove chain->u.ip (the
  backpointer from the chain to the inode), which simplifies a lot
  of things.  This was only used to detect when a vnode might have to
  be recycled but we solve that a different way by adjusting the
  kernel's cache_unlink() code.

* Revamp hammer2_inode_get().  This routine now always kmalloc()'s a new
  hammer2_inode.  In HAMMER2, the hammer2_inode structure is actually
  an indirect pointer to an underlying chain so it does not have to be
  unique.  There can multiple ip's pointing to the same chain.

* Revamp hammer2_inode_put().  The ref on ip->chain is dropped via ip->chain,
  and the (passed_chain) argument is treated separately and does not
  necessarily have to match ip->chain.  This makes hammer2_inode_put()'s API
  comparable to hammer2_inode_unlock_ex(), reducing confusion.

* Depend on adjustments to cache_unlink() and cache_rename() to detect
  vnodes which should be recycled.  This code (in the proper kernel, not
  here) now triggers a deactivation if the vnode related to the namecache
  entry has no refs, allowing HAMMER2 to detect any deletions and vrecycle()
  the vnode immediately.

* Numerous ref/lock fixes.

6 years agoMerge branch 'master' of ssh://crater.dragonflybsd.org/repository/git/dragonfly
Matthew Dillon [Fri, 1 Feb 2013 00:03:21 +0000 (16:03 -0800)]
Merge branch 'master' of ssh://crater.dragonflybsd.org/repository/git/dragonfly

6 years agoRemove legacy lex source files
John Marino [Thu, 31 Jan 2013 19:18:54 +0000 (20:18 +0100)]
Remove legacy lex source files

The ancient lex was replaced by flex recently.  The bootstrapping issue
seems to be solved, so let's go ahead and purge lex from base now.

6 years agolibstdc++47: Fix iostream bug 2478
John Marino [Thu, 31 Jan 2013 15:58:59 +0000 (16:58 +0100)]
libstdc++47: Fix iostream bug 2478

c++ iostreams were segfaulting -- apparently _M_table isn't defined in all
cases.  Fix inspired from FreeBSD configuration files.


6 years agohammer2 - serialized flush work part 2
Matthew Dillon [Thu, 31 Jan 2013 06:41:52 +0000 (22:41 -0800)]
hammer2 - serialized flush work part 2

* Adjust the hammer2_inode_lock*() API to separate the inode lock from
  the chain lock (it gets both).  The locked chain associated with the
  inode is now returned and can change during search iterations, eventually
  to be returned via hammer2_inode_unlock*().

* Fixes issues related to threads obtaining more than 1 shared lock on the
  same chain, which can deadlock deeper procedures which might need to
  temporarily upgrade the lock.

* Continue working through bugs.

6 years agohammer2 - serialized flush work part 1
Matthew Dillon [Thu, 31 Jan 2013 04:53:27 +0000 (20:53 -0800)]
hammer2 - serialized flush work part 1

This is preliminary work required to support chain structure replication
for the purposes of recording modifications which are then separated by
serialization points (by transaction id).  Ultimately this will allow the
flush code to flush to an exact serialization point and in the process
operate completely asynchronously from any further modifications being
made on the frontend after that serialization point.

* Separate hammer2_inode from hammer2_chain.

* Split the locking APIs for inodes and chains into their own functions.

* Move ip_data into chain->data->ipdata (kmalloc'd), instead of embedding
  it in hammer2_inode.  This allows the inode structure to disconnect from
  the chain.

6 years agousb4bsd: Add missing parameter to ue_start().
Sascha Wildner [Wed, 30 Jan 2013 22:49:35 +0000 (23:49 +0100)]
usb4bsd: Add missing parameter to ue_start().

Submitted-by: Yellow Rabbit <yrabbit@sdf.lonestar.org>
Dragonfly-bug: <http://bugs.dragonflybsd.org/issues/2503>

6 years agohammer2 - Start working on the freemap (note: freemap not yet operational)
Matthew Dillon [Wed, 30 Jan 2013 07:27:01 +0000 (23:27 -0800)]
hammer2 - Start working on the freemap (note: freemap not yet operational)

* hammer2 show now tries to dump all four volume headers

* Minimum storage allocation chunk size is 1K, increase MIN_RADIX and
  MIN_ALLOC appropriately.

* Preliminary reserved block mappings for the freemap indirect and bitmap

* Preliminary freemap design will use normal indirect blocks (but with
  a different bref.type name).  The check area of the bref will be used to
  store additional freemap hints.

  The volume header will contain a blockref to the root of the freemap,
  and newfs_hammer2 now initializes this blockref.

* Bring major hammer2_disk.h media structure comments up to snuff.

* Formalize blockref.methods and set proper defaults.  This field contains
  the crc/check and compression methods for a blockref.

6 years agokernel - Fix deadlock when umount races an access on the underlying filesystem
Matthew Dillon [Tue, 29 Jan 2013 23:04:05 +0000 (15:04 -0800)]
kernel - Fix deadlock when umount races an access on the underlying filesystem

* The nlookup code temporarily busies the target mount when diving a
  mount point in cases where the base of the mount is not resolved
  in the namecache.

* Fix a deadlock which can occur between the namecache structural lock
  and the vfs_busy() on the mount structure by reordering the lock.

* Generally only occured if an attempt was made to unmount a filesystem
  on which programs are still doing active operations (verses just
  passively holding references to the filesystem).  For example, a
  umount on the target filesystem occuring while a cpdup using an
  absolute path is running.

Reported-by: ftigeot
6 years agokernel - Attempt to fix NULL pointer dereference during console switch
Matthew Dillon [Tue, 29 Jan 2013 19:19:22 +0000 (11:19 -0800)]
kernel - Attempt to fix NULL pointer dereference during console switch

* Attempt to fix NULL pointer dereference during console switch.
  Bug 2481.

Reported-by: marino
6 years agokernel - Fix tty cool-aid
Matthew Dillon [Tue, 29 Jan 2013 19:11:49 +0000 (11:11 -0800)]
kernel - Fix tty cool-aid

* Fix a tty crash in the ^T handling code.  The code can race LWP
  destruction and blow up.

6 years agosocket: Mark the asynchronous rcvd netmsg dead, when it is dropped
Sepherosa Ziehau [Tue, 29 Jan 2013 08:29:35 +0000 (16:29 +0800)]
socket: Mark the asynchronous rcvd netmsg dead, when it is dropped

This is an attempt to fix the race that asynchronous rcvd netmsg
is queued to netisr after it is dropped in tcp_close().

Reported-by: ftigeot@
6 years agoigb: Enable multiple hardware TX queues
Sepherosa Ziehau [Tue, 29 Jan 2013 06:48:11 +0000 (14:48 +0800)]
igb: Enable multiple hardware TX queues

6 years agoigb: Implement aggregated RX/TX MSI-X support
Sepherosa Ziehau [Tue, 29 Jan 2013 06:27:11 +0000 (14:27 +0800)]
igb: Implement aggregated RX/TX MSI-X support

6 years agoigb: Rework serializer array setup
Sepherosa Ziehau [Tue, 29 Jan 2013 03:32:32 +0000 (11:32 +0800)]
igb: Rework serializer array setup

6 years agoigb: Setup TX rings' intr CPUID properly if MSI/legacy intr is used
Sepherosa Ziehau [Tue, 29 Jan 2013 02:50:14 +0000 (10:50 +0800)]
igb: Setup TX rings' intr CPUID properly if MSI/legacy intr is used

6 years agoigb: Fix up TX rings' MSI-X setup
Sepherosa Ziehau [Tue, 29 Jan 2013 02:42:58 +0000 (10:42 +0800)]
igb: Fix up TX rings' MSI-X setup

6 years agoif: Fix wrong assertion condition in ifq_set_subq_mask
Sepherosa Ziehau [Mon, 28 Jan 2013 13:37:26 +0000 (21:37 +0800)]
if: Fix wrong assertion condition in ifq_set_subq_mask

6 years agoigb: Utilize power of 2 mask based CPUID to subqueue mapping
Sepherosa Ziehau [Mon, 28 Jan 2013 13:24:55 +0000 (21:24 +0800)]
igb: Utilize power of 2 mask based CPUID to subqueue mapping

6 years agoif: Add power of 2 mask based CPUID to subqueue mapping
Sepherosa Ziehau [Mon, 28 Jan 2013 13:24:17 +0000 (21:24 +0800)]
if: Add power of 2 mask based CPUID to subqueue mapping

6 years agoigb: Setup subqueue count properly
Sepherosa Ziehau [Mon, 28 Jan 2013 13:08:16 +0000 (21:08 +0800)]
igb: Setup subqueue count properly

6 years agoif: Add function to set subqueue count
Sepherosa Ziehau [Mon, 28 Jan 2013 13:08:00 +0000 (21:08 +0800)]
if: Add function to set subqueue count

6 years agoigb: Add per-TX ring tx_pkt sysctl node, if IGB_TSS_DEBUG is enabled
Sepherosa Ziehau [Mon, 28 Jan 2013 11:51:23 +0000 (19:51 +0800)]
igb: Add per-TX ring tx_pkt sysctl node, if IGB_TSS_DEBUG is enabled

6 years agoigb: Add IGB_TSS_DEBUG kernel option
Sepherosa Ziehau [Mon, 28 Jan 2013 09:53:23 +0000 (17:53 +0800)]
igb: Add IGB_TSS_DEBUG kernel option

6 years agoigb: Add per-TX ring enable flag.
Sepherosa Ziehau [Mon, 28 Jan 2013 09:45:50 +0000 (17:45 +0800)]
igb: Add per-TX ring enable flag.

For TX rings' whose enable flag are not set, which could happen during
polling entering/exiting, its corresponding subqueue will be purged.

6 years agoigb: Move IGB_FLAG_TSO_IPLEN0 into TX rings
Sepherosa Ziehau [Mon, 28 Jan 2013 09:36:36 +0000 (17:36 +0800)]
igb: Move IGB_FLAG_TSO_IPLEN0 into TX rings

Avoid extra access to softc and leave enough space for TX ring specific

6 years agoigb: Define macros for wreg_nsegs, instead of using magic number
Sepherosa Ziehau [Mon, 28 Jan 2013 09:22:17 +0000 (17:22 +0800)]
igb: Define macros for wreg_nsegs, instead of using magic number

6 years agowlan: ifaltq is no longer ifqueue
Sepherosa Ziehau [Mon, 28 Jan 2013 01:57:04 +0000 (09:57 +0800)]
wlan: ifaltq is no longer ifqueue

6 years agowlan: Remove unused ieee80211_drain_ifq
Sepherosa Ziehau [Mon, 28 Jan 2013 01:43:03 +0000 (09:43 +0800)]
wlan: Remove unused ieee80211_drain_ifq

6 years agoigb: Make tx_intr_nsegs and tx_wreg_nsegs nodes aware of multiple TX queues
Sepherosa Ziehau [Sun, 27 Jan 2013 13:49:51 +0000 (21:49 +0800)]
igb: Make tx_intr_nsegs and tx_wreg_nsegs nodes aware of multiple TX queues

6 years agoigb: Merge per-RX queue rx_wregs into single rx_wreg_nsegs node
Sepherosa Ziehau [Sun, 27 Jan 2013 13:21:22 +0000 (21:21 +0800)]
igb: Merge per-RX queue rx_wregs into single rx_wreg_nsegs node

There is no use case that it needs to be tuned on per-RX queue base.

6 years agokernel/agp: No need to include opt_bus.h here.
Sascha Wildner [Sat, 26 Jan 2013 13:58:32 +0000 (14:58 +0100)]
kernel/agp: No need to include opt_bus.h here.

6 years agokernel/mfi: Sort commands by opcode.
Sascha Wildner [Fri, 25 Jan 2013 22:48:59 +0000 (23:48 +0100)]
kernel/mfi: Sort commands by opcode.

6 years agoigb: Don't assume only one TX queue will be enabled.
Sepherosa Ziehau [Fri, 25 Jan 2013 05:52:59 +0000 (13:52 +0800)]
igb: Don't assume only one TX queue will be enabled.

Prepare multiple TX queue support.

- Add TX queue count when MSI-X is used
- Add currently used TX queue count

Number of TX queues are still limited to 1 as of this commit.

6 years agoigb: Use ifsq_devstart_sched in watchdog and resume methods
Sepherosa Ziehau [Fri, 25 Jan 2013 04:33:14 +0000 (12:33 +0800)]
igb: Use ifsq_devstart_sched in watchdog and resume methods

So these two method won't consume too much time.

In watchdog method, schedule all subqueues instead of the subqueue
causing watchdog timeout.

6 years agoigb: Setup subqueue CPUID before possible calling of igb_init
Sepherosa Ziehau [Fri, 25 Jan 2013 03:34:36 +0000 (11:34 +0800)]
igb: Setup subqueue CPUID before possible calling of igb_init

6 years agoigb: Utilize subqueue watchdog functions
Sepherosa Ziehau [Fri, 25 Jan 2013 03:31:01 +0000 (11:31 +0800)]
igb: Utilize subqueue watchdog functions

Prepare for the multiple TX queue support

6 years agoif: Add subqueue watchdog helper functions for driver use
Sepherosa Ziehau [Fri, 25 Jan 2013 03:29:47 +0000 (11:29 +0800)]
if: Add subqueue watchdog helper functions for driver use

Ease driver's multiple TX queue support

6 years agoigb: Properly set RX ring in use upon enter/exit polling mode
Sepherosa Ziehau [Thu, 24 Jan 2013 12:35:28 +0000 (20:35 +0800)]
igb: Properly set RX ring in use upon enter/exit polling mode

6 years agokernel -- virtio: Implement virtio-layer lwkt_serializer for devices
Venkatesh Srinivas [Sat, 19 Jan 2013 09:43:03 +0000 (01:43 -0800)]
kernel -- virtio: Implement virtio-layer lwkt_serializer for devices

* Switch virtio device targets (currently only -blk) to use a
  serializer for synchronizing per-target state. Thread the
  serializer through virtqueue_notify (release around kick) and
  into the bus interrupt setup code.

* Remove dump support from virtio-blk for now; it doesn't work and
  results in further panics from an incorrectly setup bio.

* Other cleanups of virtio-blk (de-indirect locks).

6 years agobuildworld - Attempt to fix m4 bootstrapping issue (2)
Matthew Dillon [Thu, 24 Jan 2013 02:35:10 +0000 (18:35 -0800)]
buildworld - Attempt to fix m4 bootstrapping issue (2)

* m4 depends on flex which exec's (depends on) m4.

* Change m4 to not depend on flex and reorder the [b]yacc build to run
  before m4.  M4's lex file is now manually generated and made part of
  the source archive, and the Makefile simply compiles the .c version
  instead of trying to run flex.

  Any future update to m4 will require it's lex file to be manually
  lex'd.  Too bad, that's the way it goes.  M4 is a piece of crap and
  flex is an even bigger piece of crap for needing to exec M4.  I'm not
  going to play with this stuff more than I need to to make things compile.

* Remove conditionals from m4 .y and .l files.  They were wrong because
  they weren't necessarily reflective of which lexer was being run,
  and now they aren't needed at all.

6 years agokernel - Do not allow (devfs) devices to be force-unmounted
Matthew Dillon [Wed, 23 Jan 2013 21:56:37 +0000 (13:56 -0800)]
kernel - Do not allow (devfs) devices to be force-unmounted

* Do not force-unmount devfs devices.  Even more importantly, don't
  force-unmount devfs devices and then try to force-vflush them.

  Filesystems have always been responsible for flushing their underlying
  block devices.

  These situations occur during halt/reboot.

* Fixes at least one issue when hammer's volume-add is used to specify
  a block device in /dev which is then added to the root mount.  This
  created a situation where the /dev vs / unmount order breaks.

* Should also prevent e.g. the console or other vty hangers-on from being
  destroyed out from under active descriptors during a halt or reboot.

6 years agobuildworld - Attempt to fix m4 bootstrapping issue
Matthew Dillon [Wed, 23 Jan 2013 21:40:40 +0000 (13:40 -0800)]
buildworld - Attempt to fix m4 bootstrapping issue

* Set the M4 environment variable to force the buildworld to use the
  bootstrap version of M4 in all passes.  This removes the need to
  manually build/install the m4 binary due to the recent major tools

* Force build ordering for some of the bootstrap utilities, particularly
  the m4 binary, so the binary is available to help build other bootstrap
  tools later on.

6 years agom4.1: Remove some unneeded arguments to .Nm
Sascha Wildner [Wed, 23 Jan 2013 19:00:10 +0000 (20:00 +0100)]
m4.1: Remove some unneeded arguments to .Nm

6 years agoRemove some more %D remains here and there.
Sascha Wildner [Wed, 23 Jan 2013 16:54:32 +0000 (17:54 +0100)]
Remove some more %D remains here and there.

6 years agotcp: Limit new segements burst to 4 during extended limited transmit
Sepherosa Ziehau [Wed, 23 Jan 2013 12:37:49 +0000 (20:37 +0800)]
tcp: Limit new segements burst to 4 during extended limited transmit

6 years agoTOP wasn't reporting correctly CPU states without -M
Javier Alcázar [Thu, 3 Jan 2013 21:36:32 +0000 (06:36 +0900)]
TOP wasn't reporting correctly CPU states without -M

Adding code to get averages and updating man page.

This commit fixes issue #2447

6 years agotcp: Add comment about "fairsend"
Sepherosa Ziehau [Wed, 23 Jan 2013 11:24:03 +0000 (19:24 +0800)]
tcp: Add comment about "fairsend"

6 years agoifconfig: IFF_OACTIVE and IFF_POLLING are gone
Sepherosa Ziehau [Wed, 23 Jan 2013 09:58:46 +0000 (17:58 +0800)]
ifconfig: IFF_OACTIVE and IFF_POLLING are gone

6 years agosockio: Sort SIOC into numerical order
Sepherosa Ziehau [Wed, 23 Jan 2013 09:48:43 +0000 (17:48 +0800)]
sockio: Sort SIOC into numerical order

While im here, add comment about used SIOC in non-continuous SIOC block

6 years agoif: Update comment about polling cpuid ioctl variables, which is deprecated
Sepherosa Ziehau [Wed, 23 Jan 2013 09:34:33 +0000 (17:34 +0800)]
if: Update comment about polling cpuid ioctl variables, which is deprecated

6 years agoudp6: Remove pcb from wildcard table before calling in_pcbconnect
Sepherosa Ziehau [Wed, 23 Jan 2013 09:21:03 +0000 (17:21 +0800)]
udp6: Remove pcb from wildcard table before calling in_pcbconnect

DragonFly-bug: http://bugs.dragonflybsd.org/issues/2485

6 years agokernel - Fix improper tmpfs resource limit check
Matthew Dillon [Wed, 23 Jan 2013 00:51:52 +0000 (16:51 -0800)]
kernel - Fix improper tmpfs resource limit check

* Fix an improper check that was causing tmpfs to blow up when used as
  backing store for a VN device.

Reported-by: tuxillo
6 years agokernel/amr: Extend the visibility of AMR_DEBUG.
Sascha Wildner [Tue, 22 Jan 2013 19:19:38 +0000 (20:19 +0100)]
kernel/amr: Extend the visibility of AMR_DEBUG.

Half the code was missing the setting of AMR_DEBUG in the config file
because its visibility was reduced to amr.c only.

Reported-by: tuxillo
6 years agoReplace few more cases where %D format string is used.
Antonio Huete Jimenez [Tue, 22 Jan 2013 18:49:00 +0000 (19:49 +0100)]
Replace few more cases where %D format string is used.

Also remove a reference to %D in kvcprintf's comment.

6 years agotcp: Improve sender-sender and sender-receiver fairness on the same netisr
Sepherosa Ziehau [Thu, 17 Jan 2013 08:33:55 +0000 (16:33 +0800)]
tcp: Improve sender-sender and sender-receiver fairness on the same netisr

Yield to other senders or receivers on the same netisr if the current TCP
stream has sent certain amount of segments (currently 4) and is going to
burst more segments.  sysctl net.inet.tcp.fairsend could be used to tune
how many segements are allowed to burst.  For TSO capable devices, their
TSO aggregate size limit could also affect the number of segments allowed
to burst.  Set net.inet.tcp.fairsend to 0 will allow single TCP stream to
burst as much as it wants (the old TCP sender's behaviour).

"Fairsend" is performed at the places that do not affect segment sending
during congestion control:
- User requested output path
- ACK input path

Measured improvement in the following setup:

+---+            +---+
|   |<-----------| B |
|   |            +---+
| A |
|   |            +---+
|   |----------->| C |
+---+            +---+

A (i7-2600, w/ HT enabled), 82571EB
B (e3-1230, w/ HT enabled), 82574L
C (e3-1230, w/ HT enabled), 82574L
The performance stats are gathered from 'systat -if 1'

When A runs 8 TCP senders to C and 8 TCP receivers from B, sending
performance are same ~975Mbps, however, the receiving performance before
this commit stumbles between 670Mbps and 850Mbps; w/ "fairsend" receiving
performance stays at 981Mbps.

When A runs 16 TCP senders to C and 16 TCP receivers from B, sending
performance are same ~975Mbps, however, the receiving performance before
this commit goes from 960Mbps to 980Mbps; w/ "fairsend" receiving
performance stays at 981Mbps stably.

When there are more senders and receivers running on A, there is no
noticable performance difference on either sending or receiving between
non-"fairsend" and "fairsend", because senders are no longer being able
to do continuous large burst.

"Fairsend" also improves Jain's fairness index between various amount of
senders (8 ~ 128) a little bit (sending only tests).

6 years agotcp/tso: Add per-device TSO aggregation size limit
Sepherosa Ziehau [Wed, 16 Jan 2013 11:02:36 +0000 (19:02 +0800)]
tcp/tso: Add per-device TSO aggregation size limit

- Prevent possible TSO large burst, when it is inappropriate (plenty of
  >24 segements bursts were observered, even when 32 parallel sending TCP
  streams are running on the same GigE NIC).
  TSO large burst has following drawbacks on a single TX queue, even on
  the devices that are multiple TX queues capable:
  o  Delay other senders' packet transmission quite a lot.
  o  Has negative effect on TCP receivers, which sends ACKs.
  o  Cause buffer bloat in software sending queues, whose upper limit is
     based on "packet count".
  o  Packet scheduler's decision could be less effective.
  On the other hand, TSO large burst could improve CPU usage.
- Improve fairness between multiple TX queues on the devices that are
  multiple TX queues capable but only fetch data on TSO large packet
  boundary instead of TCP segment boundary.

Drivers could supply their own TSO aggregation size limit.  If driver
does not set it, the default value is 6000 (4 segments if MTU is 1500).
The default value increases CPU usage a little bit: on i7-2600 w/ HT
enabled, single TCP sending stream, CPU usage increases from 14%~17%
to 17%~20%.

User could configure TSO aggregation size limit by using ifconfig(8):
ifconfig ifaceX tsolen _n_

6 years agokernel/nexus: Remove some unneeded includes.
Sascha Wildner [Mon, 21 Jan 2013 18:28:54 +0000 (19:28 +0100)]
kernel/nexus: Remove some unneeded includes.

6 years agokernel/802_11: Put a couple more ethstr[] under IEEE80211_DEBUG.
Sascha Wildner [Sun, 20 Jan 2013 10:52:59 +0000 (11:52 +0100)]
kernel/802_11: Put a couple more ethstr[] under IEEE80211_DEBUG.

6 years agolibdmsg: Mark some return values unused.
Sascha Wildner [Sat, 19 Jan 2013 23:02:26 +0000 (00:02 +0100)]
libdmsg: Mark some return values unused.

6 years agolibfetch: Remove an unused variable.
Sascha Wildner [Sat, 19 Jan 2013 23:01:05 +0000 (00:01 +0100)]
libfetch: Remove an unused variable.

6 years agobmake: Mark a return value unused.
Sascha Wildner [Sat, 19 Jan 2013 23:05:28 +0000 (00:05 +0100)]
bmake: Mark a return value unused.

6 years agolibdmsg: last{dist,rnss} are used with REQUIRE_SYMMETRICAL only.
Sascha Wildner [Sat, 19 Jan 2013 22:58:40 +0000 (23:58 +0100)]
libdmsg: last{dist,rnss} are used with REQUIRE_SYMMETRICAL only.

While here, also remove two unused variables.

6 years agom4/ngctl/ppp: Silence gcc47 -Wcast-qual warnings.
Sascha Wildner [Sat, 19 Jan 2013 22:41:46 +0000 (23:41 +0100)]
m4/ngctl/ppp: Silence gcc47 -Wcast-qual warnings.

6 years agohotplugd(8): Remove some compat defines and add comments about it.
Sascha Wildner [Sat, 19 Jan 2013 12:42:36 +0000 (13:42 +0100)]
hotplugd(8): Remove some compat defines and add comments about it.

6 years agoFix buildkernel for lex/yacc upgrades, too.
Sascha Wildner [Sat, 19 Jan 2013 21:21:12 +0000 (22:21 +0100)]
Fix buildkernel for lex/yacc upgrades, too.

6 years agom4: define yylex based on __DragonFly_version
John Marino [Sat, 19 Jan 2013 16:32:39 +0000 (17:32 +0100)]
m4: define yylex based on __DragonFly_version

The old lex wants it and emits errors if it's not there.
The new lex doesn't want it, and emits warnings if it is there.
On gcc44, the build breaks on an error.
To make both happy, switch it on based on recent __DragonFly_version bump.

Bump __DragonFly_version to be 100% everyone can upgrade

6 years agoatc game: lex cleanup
John Marino [Sat, 19 Jan 2013 17:59:03 +0000 (18:59 +0100)]
atc game: lex cleanup

6 years agoFix warnings from byacc import.
Peter Avalos [Sat, 19 Jan 2013 13:59:58 +0000 (05:59 -0800)]
Fix warnings from byacc import.

6 years agoUpdate build for byacc import.
Peter Avalos [Sat, 19 Jan 2013 11:05:28 +0000 (03:05 -0800)]
Update build for byacc import.

6 years agoMerge branch 'vendor/BYACC'
Peter Avalos [Sat, 19 Jan 2013 11:01:30 +0000 (03:01 -0800)]
Merge branch 'vendor/BYACC'

6 years agoImport byacc-20121003.
Peter Avalos [Sat, 19 Jan 2013 10:03:58 +0000 (02:03 -0800)]
Import byacc-20121003.

This is a significant update for yacc that's being maintained by Thomas
Dickey at http://invisible-island.net/byacc/.

6 years agoRevert "gcc4x: Update README to remove format.c from patched list"
Sascha Wildner [Thu, 17 Jan 2013 18:01:19 +0000 (19:01 +0100)]
Revert "gcc4x: Update README to remove format.c from patched list"

This reverts commit fc18d536e167227d9010b0ce3420f5d21aba5799.

%D was removed, true, but c-format.c is still patched.

6 years agoRelocate Flexlexer.h to /usr/include
John Marino [Thu, 17 Jan 2013 14:43:05 +0000 (15:43 +0100)]
Relocate Flexlexer.h to /usr/include

FlexLexer was placed in /usr/include/c++ but this is not the normal
location nor is it a search path for either base compiler.  I believe
this is a legacy that should have been changed when the c++ search
path changed.

6 years agoflex cleanup, silence errors
John Marino [Thu, 17 Jan 2013 13:33:50 +0000 (14:33 +0100)]
flex cleanup, silence errors

On the poudriere jail build, it was impossible to build world due to
flex errors.  I don't know what is different about the environments --
perhaps one has -Werror and the other doesn't.

In any case, the new flex makes a lot of complaints due to internally
generated functions, etc, and this cleans them all up at once.

6 years agokernel/wlan_acl: Put two more ethstr[] under IEEE80211_DEBUG.
Sascha Wildner [Wed, 16 Jan 2013 20:34:26 +0000 (21:34 +0100)]
kernel/wlan_acl: Put two more ethstr[] under IEEE80211_DEBUG.

6 years agokernel/netgraph7: Use kether_ntoa().
Sascha Wildner [Wed, 16 Jan 2013 20:29:09 +0000 (21:29 +0100)]
kernel/netgraph7: Use kether_ntoa().

6 years agokernel/netgraph7: Fix cluster_limit argument to objcache_create_mbacked().
Sascha Wildner [Wed, 16 Jan 2013 20:19:51 +0000 (21:19 +0100)]
kernel/netgraph7: Fix cluster_limit argument to objcache_create_mbacked().

6 years agokernel/netgraph7: Add a missing header to the Makefile.
Sascha Wildner [Wed, 16 Jan 2013 20:19:44 +0000 (21:19 +0100)]
kernel/netgraph7: Add a missing header to the Makefile.

6 years agokernel/netgraph7: Remove <sys/ktr.h>. There's no DragonFly KTR here.
Sascha Wildner [Wed, 16 Jan 2013 20:14:31 +0000 (21:14 +0100)]
kernel/netgraph7: Remove <sys/ktr.h>. There's no DragonFly KTR here.

6 years agokernel: Fix the build of the SOEKRIS kernel config.
Sascha Wildner [Wed, 16 Jan 2013 19:52:24 +0000 (20:52 +0100)]
kernel: Fix the build of the SOEKRIS kernel config.

It's the only one that has if_ath and 80211 in the kernel and ATH_DEBUG
and IEEE80211_DEBUG isn't set at the same time. So it caught a few
ethstr[] that were not yet under the proper #ifdef.

6 years agoflex/lex: Activate flex 2.5.37, deactivate lex 2.5.4
John Marino [Wed, 16 Jan 2013 02:05:46 +0000 (03:05 +0100)]
flex/lex: Activate flex 2.5.37, deactivate lex 2.5.4

Flex is a bootstrap tool.  This swaps the new flex for the old lex.
The old lex subdirectory should stay in place for around a week in case
we need to revert this change for any reason.

6 years agoflex: Add world makefiles, but don't tie it into build yet.
John Marino [Wed, 16 Jan 2013 01:50:25 +0000 (02:50 +0100)]
flex: Add world makefiles, but don't tie it into build yet.

6 years agoflex: Add local modifications and DragonFly READMEs
John Marino [Wed, 16 Jan 2013 01:47:11 +0000 (02:47 +0100)]
flex: Add local modifications and DragonFly READMEs

The quality of the latest flex 2.5.37 release is pretty poor.  The
man page displayed the wrong version, the code doesn't compile with
GCC 4.7, the new lerrs_fatal function missing a protocol and then
given the wrong type once when it was called.  Some of the errors
could have been fixed with higher WARNS settings but these patches
applied over the flex vendor branch should fix the bugs.

The standard DragonFly README files are added at the same time.

6 years agoMerge branch 'vendor/FLEX'
John Marino [Wed, 16 Jan 2013 01:39:56 +0000 (02:39 +0100)]
Merge branch 'vendor/FLEX'

6 years agoImport flex-2.5.37 to new vendor branch vendor/FLEX
John Marino [Wed, 16 Jan 2013 01:38:47 +0000 (02:38 +0100)]
Import flex-2.5.37 to new vendor branch

6 years agoam-utils: Patch for recent flex
John Marino [Wed, 16 Jan 2013 03:01:38 +0000 (04:01 +0100)]
am-utils: Patch for recent flex

To prepare for the import of the latest flex, am-utils needs a tweak.
This allows both the old flex and the new flex to build it.  It is the
only software that failed to build out of the box with the new flex.

6 years ago.gitignore: Remove build products from list
John Marino [Tue, 15 Jan 2013 17:17:07 +0000 (18:17 +0100)]
.gitignore: Remove build products from list

The following patterns were previously active.
They have been commented out because the system "make" will pick up build
products in the source tree causing strange build failures.  The benefit
of avoiding an accidental commit of a binary is quickly offset by the
liability of chasing build failures caused by "invisible" files.  This
has burned a few people already and even the source of bug reports.


6 years agogcc4x: Update README to remove format.c from patched list
John Marino [Tue, 15 Jan 2013 16:55:49 +0000 (17:55 +0100)]
gcc4x: Update README to remove format.c from patched list

This is the result of %D format being removed by swildner yesterday.

6 years agoRemove %D conversion from kprintf(9) and the GCCs.
Sascha Wildner [Fri, 21 Dec 2012 20:20:04 +0000 (21:20 +0100)]
Remove %D conversion from kprintf(9) and the GCCs.

It has been removed also from libstand's printf.

While useful, these non-standard conversions have the downside that
each compiler needs adjusting to support proper printf format warnings
for them.

We have now a kether_ntoa() function to serve the purpose of %D

6 years agokern - More work replacing %D
Antonio Huete Jimenez [Sun, 13 Jan 2013 12:25:22 +0000 (13:25 +0100)]
kern - More work replacing %D

Use hexncpy() for special cases where, for example,
a different separator might be needed.

6 years agolibkern - Add new function hexncpy.
Antonio Huete Jimenez [Sat, 12 Jan 2013 20:45:20 +0000 (21:45 +0100)]
libkern - Add new function hexncpy.