dragonfly.git
18 months agore(4): Use MSI if device supports it.
Tim Bisson [Mon, 19 Mar 2012 02:39:37 +0000 (19:39 -0700)]
re(4): Use MSI if device supports it.

RT8168E supports MSI.

18 months agokernel - Acquire vm_token in pmap_remove_all() (3)
Matthew Dillon [Fri, 5 Oct 2012 05:15:04 +0000 (22:15 -0700)]
kernel - Acquire vm_token in pmap_remove_all() (3)

* Correct bug in last commit, resident_count adjustment has to be
  moved past the revalidation.

18 months agokernel - Acquire vm_token in pmap_remove_all() (2)
Matthew Dillon [Fri, 5 Oct 2012 05:09:30 +0000 (22:09 -0700)]
kernel - Acquire vm_token in pmap_remove_all() (2)

* Remove this, the token is already acquired in all pmap_remove_all()
  paths.

* Instead, try catching the problem in pmap_remove_all(m) by re-validating
  the pv_entry (essentially detecting a removal race).

18 months agokernel - (fix syntax error last commit)
Matthew Dillon [Fri, 5 Oct 2012 04:16:02 +0000 (21:16 -0700)]
kernel - (fix syntax error last commit)

* i386 pmap.c

18 months agokernel - Acquire vm_token in pmap_remove_all()
Matthew Dillon [Fri, 5 Oct 2012 04:14:32 +0000 (21:14 -0700)]
kernel - Acquire vm_token in pmap_remove_all()

* Kitchen sink try to fix the wire_count panic, acquire vm_token
  in pmap_remove_all().

18 months agokernel - Fix edge case with machdep.pmap_mmu_optimize on x86-64
Matthew Dillon [Fri, 5 Oct 2012 03:51:02 +0000 (20:51 -0700)]
kernel - Fix edge case with machdep.pmap_mmu_optimize on x86-64

* Fix two edge cases when enabling or disabling machdep.pmap_mmu_optimize,
  causing a shared page table page to be reverted to a local page table page
  and vise-versa.

* Remove debugging kprintf()s

Reported-by: thesjg
18 months agogcc47: Remove a gcc-aux leftover.
Sascha Wildner [Thu, 4 Oct 2012 16:58:37 +0000 (18:58 +0200)]
gcc47: Remove a gcc-aux leftover.

18 months agobsd.prog.mk: Avoid redefining $PROG target
John Marino [Thu, 4 Oct 2012 16:17:47 +0000 (18:17 +0200)]
bsd.prog.mk: Avoid redefining $PROG target

In rare cases, the PROG target is intentionally redefined before
including bsd.prog.mk, but when that happens a target redefinition
warning is emitting.  This adds a check for a pre-existing $PROG
target before attempting to define it.

It stops warnings from being emitted when loader and loader_tftp
are built.

18 months agogcc47: Restore cross-build capability
John Marino [Thu, 4 Oct 2012 16:03:52 +0000 (18:03 +0200)]
gcc47: Restore cross-build capability

The internal specs of gcc47 featured an hardcoded standard include
directory which prevented cross-target builds.  The same mistake also
caused the "crosstools" compiler in a native build to look at the host
system includes instead of the world_{TARGET}/usr/includes directory.
As a result, the cross-build would break as soon as GCC47 was used to
build its own libraries.

A stage-specific prefix was added to the internal specs directory
definition that restored cross-target building capability.

18 months agoixgbe: Do not use mbuf jumbo clusters
François Tigeot [Wed, 3 Oct 2012 10:04:56 +0000 (12:04 +0200)]
ixgbe: Do not use mbuf jumbo clusters

* They caused crashes when using jumbo frames; the root of the issue should
  probably be investigated further but the driver works perfectly with this
  change.

* Single-stream TCP performance has been measured up to 9.89 Gb/s with
  mtu=16114

18 months agoMakefile.inc1: Unbreak buildworld
John Marino [Wed, 3 Oct 2012 00:42:34 +0000 (02:42 +0200)]
Makefile.inc1: Unbreak buildworld

There was a bootstrap problem with gcc47.
For systems without gcc47 (which is almost all of them), the buildworld
failed on the first gcc47 libraries which require gcc47 to build.  The
gnu/lib/gcc47/csu target was duplicated and the makefile was attempting
to build it before gcc47 was installed.

18 months agokernel: Fix a few more mbuf MB_* vs. kmalloc M_* flag misuses.
Nuno Antunes [Tue, 2 Oct 2012 06:39:26 +0000 (07:39 +0100)]
kernel: Fix a few more mbuf MB_* vs. kmalloc M_* flag misuses.

18 months agolibstdc++47: fix wrong vec.o inclusion
John Marino [Tue, 2 Oct 2012 20:07:43 +0000 (22:07 +0200)]
libstdc++47: fix wrong vec.o inclusion

The vec.cc file never got compiled for libstdc++.  The gcc/vec.c object
file was getting included into the library instead.  This change
effectively renames vec.cc to avoid name clashes.

This also allows gcc47 to completely build world.

18 months agomtree: Use spaces for indentation.
Sascha Wildner [Tue, 2 Oct 2012 11:43:30 +0000 (13:43 +0200)]
mtree: Use spaces for indentation.

18 months agoixgbe: Use MB_DONTWAIT with mbuf operations
François Tigeot [Tue, 2 Oct 2012 05:59:33 +0000 (07:59 +0200)]
ixgbe: Use MB_DONTWAIT with mbuf operations

* M_NOWAIT is only valid with kmalloc(9)

18 months agobsd.sys.mk: Remove -Werror flag from gcc47 builds
John Marino [Mon, 1 Oct 2012 17:39:37 +0000 (19:39 +0200)]
bsd.sys.mk: Remove -Werror flag from gcc47 builds

While most of the breakage caused by new GCC47 warnings have been fixed,
swildner would prefer to complete the task and review the previously
and hastily submitted warning fixes at his leisure.

To accommodate this, the -Werror flag is removed when gcc47 is used to
build so the new warnings will pass by harmlessly.  swildner will
restore the -Werror flag when his task is complete.

18 months agogcc47 warnings: A few more fixes
John Marino [Mon, 1 Oct 2012 17:32:45 +0000 (19:32 +0200)]
gcc47 warnings: A few more fixes

usr.bin/make pass -fno-address, NO_WERROR=true
usr.bin/monitor modified source file
usr.bin/netstat modified source file (2)
usr.bin/sdpquery WARNS=2, pass -fno-unused-but-set-variable

Make has several evaluations that gcc47 believes will always
(without exception) evaluate to true or false.  Likely gcc47 is not
detecting some cases correctly, so -Wno-address was passed to it.
However, -Werror overrides it, so NO_WERROR had to be set on this
Makefile.

The remaining GCC warnings will be left for swildner to handle.
The -Werror flag will be suppress for GCC47 until further notice.

18 months agolibstdc++47: Fix c++config.h race
John Marino [Mon, 1 Oct 2012 12:52:03 +0000 (14:52 +0200)]
libstdc++47: Fix c++config.h race

With high job numbers, sometimes c++config.h would get included before
it finished getting generated.  Solve this race by using "depend all"
which should ensure c++config.h gets generated before anything else
in libstdc++ starts to build.

18 months agoSwitch on gcc47 and switch off gcc41
John Marino [Sat, 29 Sep 2012 20:47:42 +0000 (22:47 +0200)]
Switch on gcc47 and switch off gcc41

Replace GCC 4.1 with GCC 4.7.  The primary compiler remains GCC 4.4
and the source and makefiles for GCC 4.1 remain intact so it can be
brought back if necessary.  All references to GCC 4.1 in documentation
where updated to reflect version 4.7.

A full world build is probably required after this point.

18 months agogcc47: Add DragonFly READMEs and world makefiles
John Marino [Sat, 29 Sep 2012 20:14:07 +0000 (22:14 +0200)]
gcc47: Add DragonFly READMEs and world makefiles

18 months agoGCC47: Add local modifications
John Marino [Sat, 29 Sep 2012 19:58:02 +0000 (21:58 +0200)]
GCC47: Add local modifications

The majority of these changes are new files required to build GCC on
DragonFly.  They are identical to the lang/gcc-aux modifications.  Of
interest:

1) The modification to c-format.c is a carry-over from GCC44. It
   maintains support for the DragonFly-specific %b and %D conversions.
2) The modification to tree-inline.c is a carry-over from GCC44. It
   maintains the suppression of "unlikely call" inline warnings.
3) The gcc driver was modified to strip out all the bad paths in its
   search path.  gcc -print-search-dirs is now short and accurate.

18 months agoMerge branch 'vendor/GCC47'
John Marino [Mon, 1 Oct 2012 10:43:18 +0000 (12:43 +0200)]
Merge branch 'vendor/GCC47'

18 months agoImport gcc-4.7.2 to new vendor branch
John Marino [Mon, 1 Oct 2012 10:42:17 +0000 (12:42 +0200)]
Import gcc-4.7.2 to new vendor branch

18 months agogcc47 build fixes: Unused-but-set-variable + more warnings
John Marino [Mon, 1 Oct 2012 01:09:06 +0000 (03:09 +0200)]
gcc47 build fixes: Unused-but-set-variable + more warnings

The following programs fail to build with gcc47 due to the new
unused-but-set-variable warning.  They've been fixed in various ways.
The ones set with WARNS=3 suppress cast-qual warning
There is a single enum-compare error too.

This effort is not complete.

bin/csh pass -Wno-unused-but-set-variable
bin/mined source file modified
bin/sh set WARNS=3
crypto/openssh source file modified (2)
gnu/lib/libdialog source file modified
gnu/usr.bin/gdb/kgdb source file modified
gnu/usr.bin/rcs  source file modified
lib/libalias source file modified
lib/libdevstat source file modified
lib/libdm set WARNS=3
lib/libevtr source file modified
lib/libldns pass -Wno-unused-but-set-variable
lib/libncp source file modified
lib/libpam set WARNS=3
lib/libsmdb pass -Wno-unused-but-set-variable
lib/libstand source file modified (4)
lib/libtcplay source file modified
lib/libthread_xu source file modified (2)
libexec/rshd source file modified
libexec/telnetd source file modified
libexec/ypxfr pass -Wno-enum-compare
sbin/atm/fore_dnld source file modified
sbin/atm/ilmid source file modified
sbin/atm/camcontrol source file modifief (2)
sbin/ccdconfig source file modified
sbin/cryptdisks source file modified
sbin/ffsinfo source file modified
sbin/fsirand source file modified
sbin/growfs source file modified
sbin/hammer source file modified
sbin/ldconfig source file modified (real bug here?)
sbin/mount source file modified
sbin/mount_ufs source file modified
sbin/mount_extfs source file modified
sbin/mountd source file modified
sbin/natd source file modified
sbin/newfs source file modified
sbin/ping6 set WARNS=3, source modified
sbin/rcorder source file modified
sbin/reboot source file modified (real bug here?)
sbin/udevd source file modified
sbin/usched source file modified
sbin/vinum source file modified
sys/boot/common  source file modified
sys/boot/pc32/loader source file modified
usr.bin/brandelf source file modified
usr.bin/bzip2 pass -Wno-unused-but-set-variable
usr.bin/dfregress source file modified
usr.bin/ee source file modified
usr.bin/less pass -Wno-unused-but-set-variable

18 months agojme: Factor out jme_rx_restart
Sepherosa Ziehau [Sun, 30 Sep 2012 13:45:52 +0000 (21:45 +0800)]
jme: Factor out jme_rx_restart

18 months agojme: Rework MSI-X mapping, so RX MSI-X need not read register
Sepherosa Ziehau [Sun, 30 Sep 2012 13:25:25 +0000 (21:25 +0800)]
jme: Rework MSI-X mapping, so RX MSI-X need not read register

RX empty event rarely happens (I didn't see it even if the card is
sinking full speed tiny packets on one RX ring).  Put the RX empty
events into independent MSI-X, so the hot path RX MSI-X need not
read register at all.

18 months agojme: Remove unused macros
Sepherosa Ziehau [Sun, 30 Sep 2012 12:14:05 +0000 (20:14 +0800)]
jme: Remove unused macros

18 months agojme: Make sure only rx desc empty is cleared in status register
Sepherosa Ziehau [Sun, 30 Sep 2012 12:11:53 +0000 (20:11 +0800)]
jme: Make sure only rx desc empty is cleared in status register

18 months agojme: Move colesce parameters setup out of sysctl tree creation
Sepherosa Ziehau [Tue, 25 Sep 2012 00:01:17 +0000 (08:01 +0800)]
jme: Move colesce parameters setup out of sysctl tree creation

18 months agojme: Change polling(4) support to ifpoll support
Sepherosa Ziehau [Mon, 24 Sep 2012 12:01:17 +0000 (20:01 +0800)]
jme: Change polling(4) support to ifpoll support

While I'm here, fix the disable/enable intr handing.

18 months agoFix buildworld with NO_GCC41.
Sascha Wildner [Sun, 30 Sep 2012 14:35:39 +0000 (16:35 +0200)]
Fix buildworld with NO_GCC41.

The Makefile logic was kinda broken and gmp/mpfr were built only when
gcc41 was being built (i.e., when NO_GCC41 was not specified).

Instead, just build them in any case.

18 months agoixgbe: Purge queue on inactive interfaces
François Tigeot [Sun, 30 Sep 2012 11:27:15 +0000 (13:27 +0200)]
ixgbe: Purge queue on inactive interfaces

* The transmission code needs to process all queued packets in one way or
  another; if this is not done, the kernel will busy loop

* Fix a kernel freeze issue when bringing up network interfaces not having
  an active link (cable not plugged...)

18 months agoRevert "Makefile.usr - Switch to pkgsrc-2012Q2."
Justin C. Sherrill [Sun, 30 Sep 2012 02:23:13 +0000 (22:23 -0400)]
Revert "Makefile.usr - Switch to pkgsrc-2012Q2."

This reverts commit f22a9489615d510c36982f39cd47f93d42a1c0aa.

This does not match the current batch of pkgsrc binaries.
Also, pkgsrc-2012Q3 is due out in the next 24 hours.

18 months agoMakefile.usr - Switch to pkgsrc-2012Q2.
Antonio Huete Jimenez [Sat, 29 Sep 2012 23:40:23 +0000 (01:40 +0200)]
Makefile.usr - Switch to pkgsrc-2012Q2.

18 months agoixgbe: Remove useless locking directives
François Tigeot [Sat, 29 Sep 2012 17:41:04 +0000 (19:41 +0200)]
ixgbe: Remove useless locking directives

18 months agoixgbe: Remove link handler tasklet remnants
François Tigeot [Sat, 29 Sep 2012 12:12:23 +0000 (14:12 +0200)]
ixgbe: Remove link handler tasklet remnants

18 months agogmp/mpfr relocation: Forgot to commit one file
John Marino [Sat, 29 Sep 2012 19:15:06 +0000 (21:15 +0200)]
gmp/mpfr relocation: Forgot to commit one file

18 months agoRelocate libgmp and libmpfr world makefiles
John Marino [Sat, 29 Sep 2012 17:57:07 +0000 (19:57 +0200)]
Relocate libgmp and libmpfr world makefiles

This action prepares for the import of GCC 4.7 into base.
GCC 4.4, unlike GCC 4.1, requires gmp and mpfr, and these libraries
were part of the GCC 4.4 world makefile set.  GCC 4.7 also needs
these libraries, so rather than build them twice, they are moved out
to a common area where both compilers can use them.

18 months agompc: Add DragonFly READMEs and world makefiles
John Marino [Sat, 29 Sep 2012 17:39:13 +0000 (19:39 +0200)]
mpc: Add DragonFly READMEs and world makefiles

18 months agoMerge branch 'vendor/MPC'
John Marino [Sat, 29 Sep 2012 19:04:33 +0000 (21:04 +0200)]
Merge branch 'vendor/MPC'

18 months agoImport mpc-1.0.1 to new vendor branch vendor/MPC
John Marino [Sat, 29 Sep 2012 19:03:54 +0000 (21:03 +0200)]
Import mpc-1.0.1 to new vendor branch

This multiprecision library is required for gcc 4.6 and later.

18 months agobsd.lib.mk: Prevent "profiling impossible" warning
John Marino [Sat, 29 Sep 2012 16:25:58 +0000 (18:25 +0200)]
bsd.lib.mk: Prevent "profiling impossible" warning

The flag combination of "-pg" and "-ffunction-sections" do not mix.
GCC will emit the warning: "-ffunction-sections disabled; it makes
profiling impossible"

This simple modification to bsd.lib.mk will filter out
-ffunction-sections flag whenever it tries to build profile
objects.  The seemingly hundreds of warning in the world build
log are now gone.

18 months agokernel: Make KTR_USCHED_DFLY a kernel option.
Sascha Wildner [Fri, 28 Sep 2012 15:48:02 +0000 (17:48 +0200)]
kernel: Make KTR_USCHED_DFLY a kernel option.

18 months agoAdd NO_LWKT_SPLIT_USERPRI to the LINTs.
Sascha Wildner [Fri, 28 Sep 2012 15:47:13 +0000 (17:47 +0200)]
Add NO_LWKT_SPLIT_USERPRI to the LINTs.

18 months agotcp: Reduce RTO minimal value from 1 second to 500ms
Sepherosa Ziehau [Thu, 27 Sep 2012 06:43:32 +0000 (14:43 +0800)]
tcp: Reduce RTO minimal value from 1 second to 500ms

The RTO slop is reduced from 200ms to 100ms.  The effect RTO minimal
value is 600ms, which should be suitable even for satellite links.

18 months agokernel - Fix i386 wire_count panics (2)
Matthew Dillon [Wed, 26 Sep 2012 18:03:32 +0000 (11:03 -0700)]
kernel - Fix i386 wire_count panics (2)

* Optimize wakeup case.

18 months agokernel - Fix i386 wire_count panics
Matthew Dillon [Wed, 26 Sep 2012 17:36:13 +0000 (10:36 -0700)]
kernel - Fix i386 wire_count panics

* Tracked down to a situation where a pmap structure is being dtor'd by
  the objcache simultaniously with a vm_page_protect() operation on
  a page table page's vm_page_t.

  (1) vm_page_protect() begins running, finds page table page to remove,
      removes the related pv_entry, but then gets stuck waiting for the
      pmap->pm_pteobj (vm_object token).

  (2) Exit on another thread simultaniously removes all remaining VM
      pages from the pmap.  However, due to #(1), there is still an
      active page table page in pmap->pm_pteobj that the exit code has
      no visibility to.

  (3) The related pmap is then dtor'd due to heavy fork/exec/exit load
      on the system.  The VM page is still present, vm_page_protect()
      is still stuck on the token (or hasn't gotten cpu back).

  (4) Nominal vm_object_terminate() destroys the page table page.

  (5) vm_page_protect() unblocks and tries to destroy the page.

  (6) BOOM.

* This fix places a barrier between the normal process exit code and the
  dtor which will block while a vm_page_protect() is active on the pmap.

* This time for sure, but if not we still know that the problem is related
  to this exit race.

18 months agoMerge branch 'master' of ssh://crater.dragonflybsd.org/repository/git/dragonfly
Samuel J. Greear [Wed, 26 Sep 2012 04:51:10 +0000 (22:51 -0600)]
Merge branch 'master' of ssh://crater.dragonflybsd.org/repository/git/dragonfly

18 months agodloader - Add user_scheduler kenv tuneable sample
Samuel J. Greear [Wed, 26 Sep 2012 04:50:33 +0000 (22:50 -0600)]
dloader - Add user_scheduler kenv tuneable sample

18 months agokernel - usched_dfly revamp (8), add reschedule hints
Matthew Dillon [Wed, 26 Sep 2012 02:13:39 +0000 (19:13 -0700)]
kernel - usched_dfly revamp (8), add reschedule hints

* Add reschedule hints when issuing a read() on a pipe or socket, or
  issuing a blocking kevent() call.

* usched_dfly will force a reschedule after the round-robin count has
  passed the half-way point if it detects a scheduling hint.  This is
  an attempt to avoid rescheduling in the middle of some critical user
  operation (e.g. postgres server holding internal locks).

* Add kern.usched_dfly.fast_resched which allows the scheduler to avoid
  interrupting a less desireable process with a more desireable process
  as long as the priority difference is not too great.

  However, default the value to 0, because setting the value has
  consequences for interactive responsiveness.

* When running pgbench we recommend leaving fast_resched disabled and
  instead running the pgbench at idprio 15 to work around issues where
  the postgres server process(es) get interrupted by the pgbench processes
  which causes the postgres server process(es) to hit internal lock conflicts
  more quickly and enter a semaphore wait more often (when both pgbench and
  the postgres servers are running on the same machine).

  This is really an issue with postgres server scaling.  Because the pgbench's
  use so much less cpu than the postgres server processes they are given a
  more desireable priority and thus can interrupt the postgres server
  processes.  We can't really 'fix' this in the scheduler without really
  messing up normal interactive responsiveness for the system.

  Example:

  idprio pgbench -j 80 -c 80 -T 60 -S bench

18 months agokernel - usched_dfly revamp (7), bring back td_release, sysv_sem, weights
Matthew Dillon [Tue, 25 Sep 2012 18:53:58 +0000 (11:53 -0700)]
kernel - usched_dfly revamp (7), bring back td_release, sysv_sem, weights

* Bring back the td_release kernel priority adjustment.

* sysv_sem now attempts to delay wakeups until after releasing its token.

* Tune default weights.

* Do not depress priority until we've become the uschedcp.

* Fix priority sort for LWKT and usched_dfly to avoid context-switching
  across all runable threads twice.

18 months agomake.conf.5: Add some words about WANT_NETGRAPH7.
Sascha Wildner [Tue, 25 Sep 2012 15:21:52 +0000 (17:21 +0200)]
make.conf.5: Add some words about WANT_NETGRAPH7.

18 months agoarcmsr(4): Sync with FreeBSD (Areca's driver version 1.20.00.25).
Sascha Wildner [Tue, 25 Sep 2012 05:37:07 +0000 (07:37 +0200)]
arcmsr(4): Sync with FreeBSD (Areca's driver version 1.20.00.25).

Some bug fixes and added support for ARC-1213, ARC-1223 and ARC-1882.

Thanks to ftigeot for giving it some testing.

18 months agokernel - usched_dfly revamp (6), reimplement shared spinlocks & misc others
Matthew Dillon [Tue, 25 Sep 2012 01:24:22 +0000 (18:24 -0700)]
kernel - usched_dfly revamp (6), reimplement shared spinlocks & misc others

* Rename gd_spinlocks_wr to just gd_spinlocks.

* Reimplement shared spinlocks and optimize the shared spinlock path.
  Contended exclusive spinlocks are less optimal with this change.

* Use shared spinlocks for all file descriptor accesses.  This includes
  not only most IO calls like read() and write(), but also callbacks
  from kqueue to double-check the validity of a file descriptor.

* Use getnanouptime() instead of nanouptime() in kqueue_sleep() and
  kern_kevent(), removing a hardware I/O serialization (to read the HPET)
  from the critical path.

* These changes significantly reduce kernel spinlock contention when running
  postgres/pgbench benchmarks.

18 months agokernel - Add PC sampling for x86-64
Matthew Dillon [Mon, 24 Sep 2012 21:34:41 +0000 (14:34 -0700)]
kernel - Add PC sampling for x86-64

* Xtimer interrupt (lapic timer) now samples the %rip value and stores
  it in the globaldata structure.  Sampling occurs whether the machine is
  in a critical section or not.

* Used for debugging.

18 months agokernel - usched_dfly revamp (5), correct default in last commit
Matthew Dillon [Mon, 24 Sep 2012 20:43:50 +0000 (13:43 -0700)]
kernel - usched_dfly revamp (5), correct default in last commit

* Doh. weight2 should be 120, not 1200.

18 months agokernel - usched_dfly revamp (4), improve tail
Matthew Dillon [Mon, 24 Sep 2012 20:32:11 +0000 (13:32 -0700)]
kernel - usched_dfly revamp (4), improve tail

* Improve tail performance (many more cpu-bound processes than available
  cpus).

* Experiment with removing the LWKT priority adjustments for kernel vs user.
  Instead give LWKT a hint about the user scheduler when scheduling a thread.
  LWKT's round-robin is left unhinted to hopefully round-robin starved LWKTs
  running in kernel mode.

* Implement a better calculation for the per-thread uload than the priority.
  Instead, use estcpu.

* Adjust default weigntings for new uload calculation scale.

18 months agosystat - Ensure vmmeter output separates fields by at least one space.
Matthew Dillon [Mon, 24 Sep 2012 17:31:47 +0000 (10:31 -0700)]
systat - Ensure vmmeter output separates fields by at least one space.

* Ensure vmmeter output separates fields by at least one space.

* Fix minor formatting issue with token names.

18 months agosystat - Display colliding token
Matthew Dillon [Mon, 24 Sep 2012 17:27:32 +0000 (10:27 -0700)]
systat - Display colliding token

* Display the colliding token when a non-zero token collision count is
  reported.  This is somewhat statistical but should still provide good
  information on MP bottlenecks.

18 months agokernel - Add v_token_name to gd_cnt
Matthew Dillon [Mon, 24 Sep 2012 17:26:28 +0000 (10:26 -0700)]
kernel - Add v_token_name to gd_cnt

* Copy the tok->t_desc field into the gd_cnt.v_token_name buffer
  when a token collides so systat -pv 1 can pick it up.

18 months agousr.sbin/Makefile: Remove an obsolete old comment.
Sascha Wildner [Mon, 24 Sep 2012 12:45:04 +0000 (12:45 +0000)]
usr.sbin/Makefile: Remove an obsolete old comment.

18 months agopnpinfo(8): Don't build/install for x86_64.
Sascha Wildner [Mon, 24 Sep 2012 12:44:16 +0000 (12:44 +0000)]
pnpinfo(8): Don't build/install for x86_64.

It crashes and isn't really useful. FreeBSD did so, too.

18 months agovlan: Dispatch mbuf to be sent to physical interface's start cpu
Sepherosa Ziehau [Sun, 23 Sep 2012 09:12:52 +0000 (17:12 +0800)]
vlan: Dispatch mbuf to be sent to physical interface's start cpu

18 months agobridge: Utilize netisr to run physical interface's if_start
Sepherosa Ziehau [Sun, 23 Sep 2012 09:08:22 +0000 (17:08 +0800)]
bridge: Utilize netisr to run physical interface's if_start

18 months agoaue/lgue: Utilize netisr to run if_start
Sepherosa Ziehau [Sun, 23 Sep 2012 09:07:01 +0000 (17:07 +0800)]
aue/lgue: Utilize netisr to run if_start

18 months agoif: Defer if_start to netisr instead of ifnet for further processing
Sepherosa Ziehau [Sun, 23 Sep 2012 09:04:48 +0000 (17:04 +0800)]
if: Defer if_start to netisr instead of ifnet for further processing

18 months agoifpoll: Use u_long for statistics
Sepherosa Ziehau [Sun, 23 Sep 2012 07:59:03 +0000 (15:59 +0800)]
ifpoll: Use u_long for statistics

18 months agoifpoll: Reorder iopoll fields a little bit
Sepherosa Ziehau [Sun, 23 Sep 2012 07:48:31 +0000 (15:48 +0800)]
ifpoll: Reorder iopoll fields a little bit

18 months agoifpoll: Simplify TX polling logic
Sepherosa Ziehau [Sun, 23 Sep 2012 07:42:14 +0000 (15:42 +0800)]
ifpoll: Simplify TX polling logic

18 months agotop - Fix -t / -S
Matthew Dillon [Sun, 23 Sep 2012 02:07:02 +0000 (19:07 -0700)]
top - Fix -t / -S

* -t to show threads now just shows threaded processes (all LWPs),
  and no longer also shows system processes.

* -s to show system threads now works as expected.

18 months agotop - Adjust top to account for kernel changes
Matthew Dillon [Sun, 23 Sep 2012 02:00:12 +0000 (19:00 -0700)]
top - Adjust top to account for kernel changes

* ccpu no longer exists

* if top is out of sync with the system, fix a seg-fault which can occur
  when it tries to use lwp_stat as an array indx.

18 months agops - Adjust ps to account for kernel changes
Matthew Dillon [Sun, 23 Sep 2012 01:59:26 +0000 (18:59 -0700)]
ps - Adjust ps to account for kernel changes

* ccpu no longer exists.

* pctcpu is now accurate regardless of the lwp's state.

18 months agokernel - usched_dfly revamp (3), fix estcpu
Matthew Dillon [Sun, 23 Sep 2012 01:57:06 +0000 (18:57 -0700)]
kernel - usched_dfly revamp (3), fix estcpu

* Fix the estcpu calculation, which previously assumed only a single
  runq (in usched_dfly there is a runq per cpu).

* Add a global atomic int accounting for all running and runnable lwp's.

* Fix cpu-hogging issues for bursty processes by creating a fast-decay-mode
  for estcpu when a thread first starts up, or after it has been asleep
  for more than 1 seconds.

18 months agoemx: Allow user to specify RX/TX processing CPU's offset
Sepherosa Ziehau [Sat, 22 Sep 2012 13:45:43 +0000 (21:45 +0800)]
emx: Allow user to specify RX/TX processing CPU's offset

18 months agokernel - usched_dfly revamp (2), reduce token collisions
Matthew Dillon [Sat, 22 Sep 2012 01:34:09 +0000 (18:34 -0700)]
kernel - usched_dfly revamp (2), reduce token collisions

* Add wakeup_start_delayed() and wakeup_end_delayed().  These functions
  will attempt to delay any wakeup() calls made between them.

  Use the functions in the unix domain socket send code.

* This removes a lot of volatility from monster's 48:48 pgbench tests by
  delaying the wakeup()s related to a unix domain socket write until after
  the pool token has been released.

* Adjust usched_dfly parameters.  In particular, weight2 can be higher now.

18 months agokernel - Add vmmeter counter for token collisions
Matthew Dillon [Fri, 21 Sep 2012 23:53:37 +0000 (16:53 -0700)]
kernel - Add vmmeter counter for token collisions

* Add vmmeter counter for token collisions.

* Add token collisions to systat -pv's display.

18 months agokernel - usched_dfly revamp
Matthew Dillon [Fri, 21 Sep 2012 23:09:25 +0000 (16:09 -0700)]
kernel - usched_dfly revamp

* NOTE: This introduces a few regressions at high loads.  They've been
  identified and will be fixed in another iteration.

  We've identified an issue with weight2.  When weight2 successfully
  schedules a process pair on the same cpu it can lead to inefficiencies
  elsewhere in the scheduler related to user-mode and kernel-mode
  priority switching.  In this situation testing pgbench/postgres pairs
  (e.g. -j $ncpus -c $ncpus) we sometimes see some serious regressions on
  multi-socket machines, and other times see remarkably high performance.

* Fix a reported panic.

* Revamp the weights and algorithms signficantly.  Fix algorithmic errors
  and improve the accuracy of weight3.  Add weight4 which basically tells
  the scheduler to try harder to find a free cpu to schedule the lwp on
  when the current cpu is busy doing something else.

18 months agokdump - cleanup cpu-stamp formatting
Matthew Dillon [Fri, 21 Sep 2012 23:07:00 +0000 (16:07 -0700)]
kdump - cleanup cpu-stamp formatting

* %2d instead of %d so columns align.

18 months agops - Show cpu# even when process is sleeping
Matthew Dillon [Fri, 21 Sep 2012 23:05:50 +0000 (16:05 -0700)]
ps - Show cpu# even when process is sleeping

* Show the cpu# the process is scheduled on even when it is sleeping.

* Add a 'Q' flag for 'R'unnable processes, indicating that it is runnable
  but on the user scheduler runq and does not actually have cpu at the
  moment.

18 months agosysctl - Allow integers to use hex
Matthew Dillon [Fri, 21 Sep 2012 20:16:56 +0000 (13:16 -0700)]
sysctl - Allow integers to use hex

* Allow integers to be specified in hex using a 0x or 0X prefix.

18 months agonrelease: Remove the obsolete -scmgit-gui option from the build.
Sascha Wildner [Thu, 20 Sep 2012 20:45:13 +0000 (22:45 +0200)]
nrelease: Remove the obsolete -scmgit-gui option from the build.

Its presence was breaking snapshot building.

It is no longer necessary to prevent gitk from being built along
with git using '-scmgit-gui', because pkgsrc now has a separate
scmgit-gitk package for it.

Since we used to build our GUI distribution without -scmgit-gui
(meaning with gitk), add scmgit-gitk to the GUI build.

18 months agokernel - Improve regressions in usched_dfly (2)
Matthew Dillon [Thu, 20 Sep 2012 18:35:21 +0000 (11:35 -0700)]
kernel - Improve regressions in usched_dfly (2)

* Allow various fork() behaviors to be supported via
  kern.usched_dfly.features.

* Set the default to place the newly forked process on
  a random cpu instead of the current cpu.

  The bsd4 scheduler had a global queue and could just signal
  a random helper to pick up the thread.  The dfly scheduler
  has per-cpu queues and must actually enqueue the thread to
  another cpu.

  The bsd4 scheduler is still slightly superior here because
  if the parent running on the current cpu immediately waits
  for the child, the child is able to run on the current cpu.
  However, randomization works quite well and this removes
  nearly all of the make -j N regression.

18 months agokdump - Add options to print physical cpu
Matthew Dillon [Thu, 20 Sep 2012 18:33:52 +0000 (11:33 -0700)]
kdump - Add options to print physical cpu

* -c option adds the physical cpu to the output

* -a option humanform.  This options turns on -c and -R.

18 months agokernel - Include physical cpu in ktrace header
Matthew Dillon [Thu, 20 Sep 2012 18:33:03 +0000 (11:33 -0700)]
kernel - Include physical cpu in ktrace header

* Record which cpu the system call (etc) is running on
  in the ktrace header.

18 months agowmesg - Increase to 8 chars from 7
Samuel J. Greear [Thu, 20 Sep 2012 07:52:58 +0000 (01:52 -0600)]
wmesg - Increase to 8 chars from 7

* Increase top from 7 to 8 and use the WMESGLEN define in ps (previously 6).

18 months agokernel - Add usched_dfly algorith, set as default for now (9)
Matthew Dillon [Thu, 20 Sep 2012 07:37:40 +0000 (00:37 -0700)]
kernel - Add usched_dfly algorith, set as default for now (9)

* Code cleanup, remove bits that shouldn't matter any more.

18 months agokernel - Improve regressions in usched_dfly (1)
Matthew Dillon [Thu, 20 Sep 2012 07:31:43 +0000 (00:31 -0700)]
kernel - Improve regressions in usched_dfly (1)

* The new scheduler is MP locked at a very fine-grain.  The old scheduler
  had a global spinlock which effectively serialized competing cores during
  exit/wait sequences.

  With the new scheduler this serialization is gone and resulted in a
  vfork performance regression due to a fallback tsleep loop in the
  reaper.

* This fixes the problem with an explicit signal bit for tsleep/wakeup.
  The sequence is avoided if the reaper determines the thread has
  already completed its exit.

18 months agokernel - Add usched_dfly algorith, set as default for now (8)
Matthew Dillon [Thu, 20 Sep 2012 04:37:18 +0000 (21:37 -0700)]
kernel - Add usched_dfly algorith, set as default for now (8)

* Fix additional edge cases, in particular improving the process pairing
  algorithm to reduce flapping.

* Reorder conditionals in dd->uschedcp assignment to improve the hot path.

* Rewrite the balancing rover.  The rover will now move one process per
  tick from a very heavily loaded cpu queue to a lightly loaded cpu queue.
  Each cpu target is iterated by the rover, one target per tick.

* Reformulate dfly_chooseproc_locked() and friends.  Add a capability to
  choose the 'worst' process (from the end of the queue), which is used
  by the rover.

* When pulling a random thread we require the queue it is taken from to
  be MUCH more heavily loaded than our own queue, which avoids ping-ponging
  processes back and forth when the load is not balanced against the number
  of cpu cores (e.g. 6 servers, 4 cores).

18 months agokernel - Add lwkt_yield_quick()
Matthew Dillon [Thu, 20 Sep 2012 04:33:54 +0000 (21:33 -0700)]
kernel - Add lwkt_yield_quick()

* Add a quick version of lwkt_yield() which does not try to round-robin
  LWKT threads at the same priority.

18 months agokernel - Don't call lwkt_user_yield() in uiomove() unless xfer is big
Matthew Dillon [Thu, 20 Sep 2012 04:33:03 +0000 (21:33 -0700)]
kernel - Don't call lwkt_user_yield() in uiomove() unless xfer is big

* Only call lwkt_user_yield() in uiomove() when the xfer is big.

18 months agokernel - Add usched_dfly algorith, set as default for now (7)
Matthew Dillon [Wed, 19 Sep 2012 18:25:09 +0000 (11:25 -0700)]
kernel - Add usched_dfly algorith, set as default for now (7)

* Reenable weight2 (the process pairing heuristic) and fix the
  edge cases associated with it.

* Change the process pulling behavior.  Now we pull the 'worst' thread
  from some other cpu instead of the best (duh!), we only pull when a
  cpu winds up with no designated user threads, or we pull via a
  schedulerclock-implemented rover.

  The schedulerclock-implemented rover will allow ONE cpu to pull the
  'worst' thread across all cpus (with some locality) once every
  round-robin ticks (4 scheduler ticks).

  The rover is responsible for taking excess processes that are unbalancing
  one or more cpu's (for example, you have 6 running batch processes and
  only 4 cpus) and slowly moving them between cpus.  If we did not do this
  the 'good' processes running on the unbalanced cpus are put at an unfair
  disadvantage.

* This should fix all known edge cases, including ramp-down edge cases.

18 months agokernel - Add usched_dfly algorith, set as default for now (6)
Matthew Dillon [Wed, 19 Sep 2012 12:10:21 +0000 (05:10 -0700)]
kernel - Add usched_dfly algorith, set as default for now (6)

* Fix an edge case where the pairing could cause flapping.

* Fix an edge case where user processes were interrupting each other
  when they were in the same queue, which could cause a synchronous
  process like a postgres server to lose cpu while holding internal
  locks during a short operation.

18 months agokernel - Add usched_dfly algorith, set as default for now (5)
Matthew Dillon [Wed, 19 Sep 2012 11:41:27 +0000 (04:41 -0700)]
kernel - Add usched_dfly algorith, set as default for now (5)

* Do a better job pushing threads to the correct cpu.  Keep the load
  factor live even when the thread goes to sleep, until some other thread
  tries to go to sleep on the same cpu.

* Handle an edge case where a cpu-bound thread needs to be moved to
  another cpu.

* Pull once a second and on-demand.

18 months agokernel - Add usched_dfly algorith, set as default for now (4)
Matthew Dillon [Wed, 19 Sep 2012 03:55:18 +0000 (20:55 -0700)]
kernel - Add usched_dfly algorith, set as default for now (4)

* Fix fork regression with usched_dfly.  Most fork/exec sequences involve
  the parent waiting.  The new scheduler was placing the newly forked
  process on another cpu which is non-optimal if the parent is going
  to immediately wait.

  Instead if there is nothing else waiting to run on the current cpu,
  leave the forked process on the current cpu initially.  If the parent
  waits quickly the forked process will get cpu, otherwise it will get
  scheduled away soon enough.  If the parent forks additional children
  then we find there is something on the queue now (the first child) and
  put the additional children on other cpus.

Reported-by: thesjg
19 months agokernel - Increase machdep.cpu_idle_repeat from 4 to 750
Matthew Dillon [Tue, 18 Sep 2012 21:18:24 +0000 (14:18 -0700)]
kernel - Increase machdep.cpu_idle_repeat from 4 to 750

* Increase machdep.cpu_idle_repeat from 4 to 750.  It now takes longer
  before the kernel will move from HLT/MONITOR/MWAIT to ACPI-based halting.

* Improves benchmark performance significantly on recent cpus without
  eating up too much extra power, but laptop tests are still pending.

* Laptop users can always set it back to 4.

19 months agousched - Add usched utility
Matthew Dillon [Tue, 18 Sep 2012 20:58:11 +0000 (13:58 -0700)]
usched - Add usched utility

* Currently must run as root

* usched {bsd4,dfly} program args...

19 months agotuning(7): shm_use_phys is now enabled by default
François Tigeot [Tue, 18 Sep 2012 20:38:59 +0000 (22:38 +0200)]
tuning(7): shm_use_phys is now enabled by default

19 months agokernel - Account for file reads that take the VM shortcut
Matthew Dillon [Tue, 18 Sep 2012 18:45:19 +0000 (11:45 -0700)]
kernel - Account for file reads that take the VM shortcut

* Account for file reads that take the VM shortcut in hammer's statistics.

19 months agokernel/usched_dfly: Small UP compilation fix.
Sascha Wildner [Tue, 18 Sep 2012 18:18:35 +0000 (20:18 +0200)]
kernel/usched_dfly: Small UP compilation fix.

19 months agokernel - Add usched_dfly algorith, set as default for now (3)
Matthew Dillon [Tue, 18 Sep 2012 18:01:35 +0000 (11:01 -0700)]
kernel - Add usched_dfly algorith, set as default for now (3)

* Add a field to the thread structure, td_wakefromcpu.  All wakeup()
  family calls will load this field with the cpu the thread was woken
  up FROM.

* Use this field in usched_dfly to weight scheduling such that pairs
  of synchronously-dependent threads (for example, a pgbench thread
  and a postgres server process) are placed closer to each other in
  the cpu topology.

* Weighting:

  - Load matters the most
  - Current cpu thread is scheduled on is next
  - Synchronous wait/wakeup weighting is last

* Tests on monster yield better all-around results with a new all-time
  high w/ pgbench -j 40 -c 40 -T 60 -S bench:

  25% idle at 40:40 tps = 215293.173300 (excluding connections establishing)

  Without the wait/wakeup weighting (but with allwload and current cpu
  weighting):

  41% idle at 40:40 tps = 162352.813046 (excluding connections establishing)

  Without wait/wakeup or current-cpu weighting.  Load balancing only:

  43% idle at 40:40 tps = 159047.440641 (excluding connections establishing)