Displaying 1 50 of 36,333 commits (0.010s)

DragonFlyBSD — sys/kern subr_cpu_topology.c, sys/sys cpu_topology.h globaldata.h

kernel - Refactor cpu localization for VM page allocations

* Change how cpu localization works.  The old scheme was extremely unbalanced
  in terms of vm_page_queue[] load.

  The new scheme uses cpu topology information to break the vm_page_queue[]
  down into major blocks based on the physical package id, minor blocks
  based on the core id in each physical package, and then by 1's based on
  (pindex + object->pg_color).

  If PQ_L2_SIZE is not big enough such that 16-way operation is attainable
  by physical and core id, we break the queue down only by physical id.

  Note that the core id is a real core count, not a cpu thread count, so
  an 8-core/16-thread x 2 socket xeon system will just fit in the 16-way
  requirement (there are 256 PQ_FREE queues).

* When a particular queue does not have a free page, iterate nearby queues
  start at +/- 1 (before we started at +/- PQ_L2_SIZE/2), in an attempt to
  retain as much locality as possible.  This won't be perfect but it should
  be good enough.

* Also fix an issue with the idlezero counters.

DragonFlyBSD — sys/kern subr_cpu_topology.c, sys/sys cpu_topology.h globaldata.h

kernel - Refactor cpu localization for VM page allocations

* Change how cpu localization works.  The old scheme was extremely unbalanced
  in terms of vm_page_queue[] load.

  The new scheme uses cpu topology information to break the vm_page_queue[]
  down into major blocks based on the physical package id, minor blocks
  based on the core id in each physical package, and then by 1's based on
  (pindex + object->pg_color).

  If PQ_L2_SIZE is not big enough such that 16-way operation is attainable
  by physical and core id, we break the queue down only by physical id.

  Note that the core id is a real core count, not a cpu thread count, so
  an 8-core/16-thread x 2 socket xeon system will just fit in the 16-way
  requirement (there are 256 PQ_FREE queues).

* When a particular queue does not have a free page, iterate nearby queues
  start at +/- 1 (before we started at +/- PQ_L2_SIZE/2), in an attempt to
  retain as much locality as possible.  This won't be perfect but it should
  be good enough.

* Also fix an issue with the idlezero counters.

DragonFlyBSD — usr.bin/systat vmstat.c

systat - Adjust extended vmstats display

* When the number of devices are few enough (or you explicitly specify
  just a few disk devices, or one), there is enough room for the
  extended vmstats display.  Make some adjustments to this display.

* Display values in bytes (K, M, G, etc) instead of pages like the other
  fields.

* Rename zfod to nzfod and subtract-away ozfod when displaying nzfod
  (only in the extended display), so the viewer doesn't have to do the
  subtraction in his head.
Delta File
+10 -8 usr.bin/systat/vmstat.c
+10 -8 1 file

DragonFlyBSD — usr.bin/systat vmstat.c

systat - Adjust extended vmstats display

* When the number of devices are few enough (or you explicitly specify
  just a few disk devices, or one), there is enough room for the
  extended vmstats display.  Make some adjustments to this display.

* Display values in bytes (K, M, G, etc) instead of pages like the other
  fields.

* Rename zfod to nzfod and subtract-away ozfod when displaying nzfod
  (only in the extended display), so the viewer doesn't have to do the
  subtraction in his head.
Delta File
+10 -8 usr.bin/systat/vmstat.c
+10 -8 1 file

DragonFlyBSD — sys/platform/pc64/x86_64 machdep.c, sys/vm vm_zeroidle.c vm_meter.c

kernel - Reduce memory testing and early-boot zeroing.

* Reduce the amount of memory testing and early-boot zeroing that
  we do, improving boot times on systems with large amounts of memory.

* Fix race in the page zeroing count.

* Refactor the VM zeroidle code.  Instead of having just one kernel thread,
  have one on each cpu.

  This significantly increases the rate at which the machine can eat up
  idle cycles to pre-zero pages in the cold path, improving performance
  in the hot-path (normal) page allocations which request zerod pages.

* On systems with a lot of cpus there is usually a little idle time (e.g.
  0.1%) on a few of the cpus, even under extreme loads.  At the same time,
  such loads might also imply a lot of zfod faults requiring zero'd pages.

  On our 48-core opteron we see a zfod rate of 1.0 to 1.5 GBytes/sec and
  a page-freeing rate of 1.3 - 2.5 GBytes/sec.  Distributing the page
  zeroing code and eating up these miniscule bits of idle improves the
  kernel's ability to provide a pre-zerod page (vs having to zero-it in
  the hot path) significantly.

  Under the synth test load the kernel was still able to provide 400-700

    [2 lines not shown]

DragonFlyBSD — sys/platform/pc64/x86_64 machdep.c, sys/vm vm_zeroidle.c vm_meter.c

kernel - Reduce memory testing and early-boot zeroing.

* Reduce the amount of memory testing and early-boot zeroing that
  we do, improving boot times on systems with large amounts of memory.

* Fix race in the page zeroing count.

* Refactor the VM zeroidle code.  Instead of having just one kernel thread,
  have one on each cpu.

  This significantly increases the rate at which the machine can eat up
  idle cycles to pre-zero pages in the cold path, improving performance
  in the hot-path (normal) page allocations which request zerod pages.

* On systems with a lot of cpus there is usually a little idle time (e.g.
  0.1%) on a few of the cpus, even under extreme loads.  At the same time,
  such loads might also imply a lot of zfod faults requiring zero'd pages.

  On our 48-core opteron we see a zfod rate of 1.0 to 1.5 GBytes/sec and
  a page-freeing rate of 1.3 - 2.5 GBytes/sec.  Distributing the page
  zeroing code and eating up these miniscule bits of idle improves the
  kernel's ability to provide a pre-zerod page (vs having to zero-it in
  the hot path) significantly.

  Under the synth test load the kernel was still able to provide 400-700

    [2 lines not shown]

DragonFlyBSD — sys/kern vfs_cache.c

kernel - Cleanup namecache stall messages on console

* Report the proper elapsed time and also include td->td_comm
  in the printed output on the console.
Delta File
+9 -7 sys/kern/vfs_cache.c
+9 -7 1 file

DragonFlyBSD — sys/kern vfs_cache.c

kernel - Cleanup namecache stall messages on console

* Report the proper elapsed time and also include td->td_comm
  in the printed output on the console.
Delta File
+9 -7 sys/kern/vfs_cache.c
+9 -7 1 file

DragonFlyBSD — sys/kern kern_synch.c

kernel - Fix rare tsleep/callout race

* Fix a rare tsleep/callout race.  The callout timer can trigger before
  the tsleep() releases its lwp_token (or if someone else holds the
  calling thread's lwp_token).

  This case is detected, but failed to adjust lwp_stat before
  descheduling and switching away.  This resulted in an endless sleep.
Delta File
+3 -0 sys/kern/kern_synch.c
+3 -0 1 file

DragonFlyBSD — sys/kern kern_synch.c

kernel - Fix rare tsleep/callout race

* Fix a rare tsleep/callout race.  The callout timer can trigger before
  the tsleep() releases its lwp_token (or if someone else holds the
  calling thread's lwp_token).

  This case is detected, but failed to adjust lwp_stat before
  descheduling and switching away.  This resulted in an endless sleep.
Delta File
+3 -0 sys/kern/kern_synch.c
+3 -0 1 file

DragonFlyBSD — sys/dev/acpica acpi.c, sys/dev/virtual/hyperv/vmbus vmbus.c vmbus_var.h

hyperv/vmbus: Passthrough interrupt resource allocation to nexus

This greatly simplies interrupt allocation.  And reenable the interrupt
resource not found warning in acpi.

DragonFlyBSD — sys/dev/acpica acpi.c, sys/dev/virtual/hyperv/vmbus vmbus.c vmbus_var.h

hyperv/vmbus: Passthrough interrupt resource allocation to nexus

This greatly simplies interrupt allocation.  And reenable the interrupt
resource not found warning in acpi.

DragonFlyBSD — gnu/usr.bin/groff/tmac mdoc.local

mdoc.local: Add DragonFly 4.6 for future reference.
Delta File
+1 -0 gnu/usr.bin/groff/tmac/mdoc.local
+1 -0 1 file

DragonFlyBSD — lib/libc/stdio mktemp.3 Makefile.inc

mktemp.3: Improve the manpage, add mklinks.

Fix SYNOPSIS, remove outdated information and clarify availability.

Taken-from: FreeBSD

DragonFlyBSD — lib/libthread_xu/thread thr_syscalls.c

libthread_xu - Don't override vfork()

* Allow vfork() to operate normally in a threaded environment.  The kernel
  can handle multiple concurrent vfork()s by different threads (only the
  calling thread blocks, same as how Linux deals with it).

DragonFlyBSD — lib/libthread_xu/thread thr_syscalls.c

libthread_xu - Don't override vfork()

* Allow vfork() to operate normally in a threaded environment.  The kernel
  can handle multiple concurrent vfork()s by different threads (only the
  calling thread blocks, same as how Linux deals with it).

DragonFlyBSD — lib/libc/stdio mktemp.3

mktemp.3: Fix a typo and bump .Dd
Delta File
+2 -3 lib/libc/stdio/mktemp.3
+2 -3 1 file

DragonFlyBSD — lib/libc/stdio mktemp.3

mktemp.3: Fix a typo and bump .Dd
Delta File
+2 -3 lib/libc/stdio/mktemp.3
+2 -3 1 file

DragonFlyBSD — bin/ed main.c

ed(1): Remove handling of non-POSIX environment.
Delta File
+1 -14 bin/ed/main.c
+1 -14 1 file

DragonFlyBSD — bin/ed main.c

ed(1): Remove handling of non-POSIX environment.
Delta File
+1 -14 bin/ed/main.c
+1 -14 1 file

DragonFlyBSD — sys/kern kern_fork.c

kernel - Be nicer to pthreads in vfork()

* When vfork()ing, give the new sub-process's lwp the same TID as the one
  that called vfork().  Even though user processes are not supposed to do
  anything sophisticated inside a vfork() prior to exec()ing, some things
  such as fileno() having to lock in a threaded environment might not be
  apparent to the programmer.

* By giving the sub-process the same TID, operations done inside the
  vfork() prior to exec that interact with pthreads will not confuse
  pthreads and cause corruption due to e.g. TID 0 clashing with TID 0
  running in the parent that is running concurrently.
Delta File
+14 -2 sys/kern/kern_fork.c
+14 -2 1 file

DragonFlyBSD — sys/kern kern_fork.c

kernel - Be nicer to pthreads in vfork()

* When vfork()ing, give the new sub-process's lwp the same TID as the one
  that called vfork().  Even though user processes are not supposed to do
  anything sophisticated inside a vfork() prior to exec()ing, some things
  such as fileno() having to lock in a threaded environment might not be
  apparent to the programmer.

* By giving the sub-process the same TID, operations done inside the
  vfork() prior to exec that interact with pthreads will not confuse
  pthreads and cause corruption due to e.g. TID 0 clashing with TID 0
  running in the parent that is running concurrently.
Delta File
+14 -2 sys/kern/kern_fork.c
+14 -2 1 file

DragonFlyBSD — bin/ed io.c main.c

ed(1): Sync with FreeBSD.
Delta File
+19 -10 bin/ed/io.c
+7 -5 bin/ed/main.c
+3 -6 bin/ed/cbc.c
+2 -2 bin/ed/ed.1
+2 -2 bin/ed/glbl.c
+1 -1 bin/ed/Makefile
+34 -26 6 files

DragonFlyBSD — bin/ed io.c main.c

ed(1): Sync with FreeBSD.
Delta File
+19 -10 bin/ed/io.c
+7 -5 bin/ed/main.c
+3 -6 bin/ed/cbc.c
+2 -2 bin/ed/ed.1
+2 -2 bin/ed/glbl.c
+1 -1 bin/ed/Makefile
+34 -26 6 files

DragonFlyBSD — lib/libc/gen popen.c

libc - Fix more popen() issues

* Fix a file descriptor leak between popen() and pclose() in a threaded
  environment.  The control structure is removed from the list, then the
  list is unlocked, then the file is closed.  This can race a popen
  inbetween the unlock and the closure.

* Do not use fileno() inside vfork, it is a complex function in a threaded
  environment which could lead to corruption since the vfork()'s lwp id may
  clash with one from the parent process.
Delta File
+5 -1 lib/libc/gen/popen.c
+5 -1 1 file

DragonFlyBSD — lib/libc/gen popen.c

libc - Fix more popen() issues

* Fix a file descriptor leak between popen() and pclose() in a threaded
  environment.  The control structure is removed from the list, then the
  list is unlocked, then the file is closed.  This can race a popen
  inbetween the unlock and the closure.

* Do not use fileno() inside vfork, it is a complex function in a threaded
  environment which could lead to corruption since the vfork()'s lwp id may
  clash with one from the parent process.
Delta File
+5 -1 lib/libc/gen/popen.c
+5 -1 1 file

DragonFlyBSD — sys/kern kern_exec.c kern_exit.c

kernel - Fix getpid() issue in vfork() when threaded

* upmap->invfork was a 0 or 1, but in a threaded program it is possible
  for multiple threads to be in vfork() at the same time.  Change invfork
  to a count.

* Fixes improper getpid() return when concurrent vfork()s are occuring in
  a threaded program.

DragonFlyBSD — sys/kern kern_exec.c kern_exit.c

kernel - Fix getpid() issue in vfork() when threaded

* upmap->invfork was a 0 or 1, but in a threaded program it is possible
  for multiple threads to be in vfork() at the same time.  Change invfork
  to a count.

* Fixes improper getpid() return when concurrent vfork()s are occuring in
  a threaded program.

DragonFlyBSD — sys/dev/drm/include/linux pci.h

drm/linux: Clean-up pci_resource_start()

Making it less verbose
Delta File
+10 -8 sys/dev/drm/include/linux/pci.h
+10 -8 1 file

DragonFlyBSD — sys/dev/drm/include/linux pci.h

drm/linux: Clean-up pci_resource_start()

Making it less verbose
Delta File
+10 -8 sys/dev/drm/include/linux/pci.h
+10 -8 1 file

DragonFlyBSD — sys/kern kern_clock.c, usr.bin/systat vmmeter.c

systat - Restrict %rip sampling to root

* Only allow root to sample the %rip and %rsp on all cpus.  The sysctl will
  not sample and return 0 for these fields if the uid is not root.

  This is for security, as %rip sampling can be used to break cryptographic
  keys.

* systat -pv 1 will not display the sampling columns if the sample value
  is 0.
Delta File
+19 -8 usr.bin/systat/vmmeter.c
+16 -3 sys/kern/kern_clock.c
+35 -11 2 files

DragonFlyBSD — sys/kern kern_clock.c, usr.bin/systat vmmeter.c

systat - Restrict %rip sampling to root

* Only allow root to sample the %rip and %rsp on all cpus.  The sysctl will
  not sample and return 0 for these fields if the uid is not root.

  This is for security, as %rip sampling can be used to break cryptographic
  keys.

* systat -pv 1 will not display the sampling columns if the sample value
  is 0.
Delta File
+19 -8 usr.bin/systat/vmmeter.c
+16 -3 sys/kern/kern_clock.c
+35 -11 2 files

DragonFlyBSD — test/sysperf umtx1.c Makefile

test - Add umtx1 code

* Add umtx1 code - fast context switch tests

* Make blib.c thread-safe.

DragonFlyBSD — test/sysperf umtx1.c Makefile

test - Add umtx1 code

* Add umtx1 code - fast context switch tests

* Make blib.c thread-safe.

DragonFlyBSD — include stdlib.h, lib/libc/db/btree bt_open.c

libc - Fix numerous fork/exec*() leaks, also add mkostemp() and mkostemps().

* Use O_CLOEXEC in many places to prevent temporary descriptors from leaking
  into fork/exec'd code (e.g. in multi-threaded situations).

* Note that the popen code will close any other popen()'d descriptors in
  the child process that it forks just prior to exec.  However, there was
  a descriptor leak where another thread issuing popen() at the same time
  could leak the descriptors into their exec.

  Use O_CLOEXEC to close this hole.

* popen() now accepts the 'e' flag (i.e. "re") to retain O_CLOEXEC in the
  returned descriptor.  Normal "r" (etc) will clear O_CLOEXEC in the returned
  descriptor.

  Note that normal "r" modes are still fine for most use cases since popen
  properly closes other popen()d descriptors in the fork().  BUT!! If the
  threaded program calls exec*() in other ways, such descriptors may
  unintentionally be passed onto sub-processes.  So consider using "re".

* Add mkostemp() and mkostemps() to allow O_CLOEXEC to be passed in,
  closing a thread race that would otherwise leak the temporary descriptor
  into other fork/exec()s.

Taken-from: Mostly taken from FreeBSD

DragonFlyBSD — include stdlib.h, lib/libc/db/btree bt_open.c

libc - Fix numerous fork/exec*() leaks, also add mkostemp() and mkostemps().

* Use O_CLOEXEC in many places to prevent temporary descriptors from leaking
  into fork/exec'd code (e.g. in multi-threaded situations).

* Note that the popen code will close any other popen()'d descriptors in
  the child process that it forks just prior to exec.  However, there was
  a descriptor leak where another thread issuing popen() at the same time
  could leak the descriptors into their exec.

  Use O_CLOEXEC to close this hole.

* popen() now accepts the 'e' flag (i.e. "re") to retain O_CLOEXEC in the
  returned descriptor.  Normal "r" (etc) will clear O_CLOEXEC in the returned
  descriptor.

  Note that normal "r" modes are still fine for most use cases since popen
  properly closes other popen()d descriptors in the fork().  BUT!! If the
  threaded program calls exec*() in other ways, such descriptors may
  unintentionally be passed onto sub-processes.  So consider using "re".

* Add mkostemp() and mkostemps() to allow O_CLOEXEC to be passed in,
  closing a thread race that would otherwise leak the temporary descriptor
  into other fork/exec()s.

Taken-from: Mostly taken from FreeBSD

DragonFlyBSD — sys/platform/pc64/x86_64 swtch.s

kernel - Disable lwp->lwp optimization in thread switcher

* Put #ifdef around the existing lwp->lwp switch optimization and then
  disable it.  This optimizations tries to avoid reloading %cr3 and avoid
  pmap->pm_active atomic ops when switching to a lwp that shares the same
  process.

  This optimization is no longer applicable on multi-core systems as such
  switches are very rare.  LWPs are usually distributed across multiple cores
  so rarely does one switch to another on the same core (and in cpu-bound
  situations, the scheduler will already be in batch mode).  The conditionals
  in the optimization, on the other hand, did measurably (just slightly)
  reduce performance for normal switches.  So turn it off.

* Implement an optimization for interrupt preemptions, but disable it for
  now.  I want to keep the code handy but so far my tests show no improvement
  in performance with huge interrupt rates (from nvme devices), so it is
  #undef'd for now.
Delta File
+111 -21 sys/platform/pc64/x86_64/swtch.s
+111 -21 1 file

DragonFlyBSD — sys/platform/pc64/x86_64 swtch.s

kernel - Disable lwp->lwp optimization in thread switcher

* Put #ifdef around the existing lwp->lwp switch optimization and then
  disable it.  This optimizations tries to avoid reloading %cr3 and avoid
  pmap->pm_active atomic ops when switching to a lwp that shares the same
  process.

  This optimization is no longer applicable on multi-core systems as such
  switches are very rare.  LWPs are usually distributed across multiple cores
  so rarely does one switch to another on the same core (and in cpu-bound
  situations, the scheduler will already be in batch mode).  The conditionals
  in the optimization, on the other hand, did measurably (just slightly)
  reduce performance for normal switches.  So turn it off.

* Implement an optimization for interrupt preemptions, but disable it for
  now.  I want to keep the code handy but so far my tests show no improvement
  in performance with huge interrupt rates (from nvme devices), so it is
  #undef'd for now.
Delta File
+111 -21 sys/platform/pc64/x86_64/swtch.s
+111 -21 1 file

DragonFlyBSD — sys/platform/pc64/x86_64 swtch.s

kernel - Minor cleanup swtch.s

* Minor cleanup
Delta File
+1 -11 sys/platform/pc64/x86_64/swtch.s
+1 -11 1 file

DragonFlyBSD — sys/platform/pc64/x86_64 swtch.s

kernel - Minor cleanup swtch.s

* Minor cleanup
Delta File
+1 -11 sys/platform/pc64/x86_64/swtch.s
+1 -11 1 file

DragonFlyBSD — sys/kern vfs_cache.c vfs_nlookup.c

kernel - Fix namecache race & panic

* Properly lock and re-check the parent association when iterating its
  children, fixing a bug in a code path associated with unmounting
  filesystems.

  The code improperly assumed that there could be no races because there
  are were no accessors left.  In fact, under heavy loads, the namecache
  scan in this routine can race against the negative-name-cache management
  code.

* Generally speaking can only happen when lots of mounts and unmounts are
  done under heavy loads (for example, tmpfs mounts during a poudriere or
  synth run).
Delta File
+66 -14 sys/kern/vfs_cache.c
+5 -2 sys/kern/vfs_nlookup.c
+71 -16 2 files

DragonFlyBSD — sys/kern vfs_cache.c vfs_nlookup.c

kernel - Fix namecache race & panic

* Properly lock and re-check the parent association when iterating its
  children, fixing a bug in a code path associated with unmounting
  filesystems.

  The code improperly assumed that there could be no races because there
  are were no accessors left.  In fact, under heavy loads, the namecache
  scan in this routine can race against the negative-name-cache management
  code.

* Generally speaking can only happen when lots of mounts and unmounts are
  done under heavy loads (for example, tmpfs mounts during a poudriere or
  synth run).
Delta File
+66 -14 sys/kern/vfs_cache.c
+5 -2 sys/kern/vfs_nlookup.c
+71 -16 2 files

DragonFlyBSD — sys/kern init_main.c lwkt_thread.c, sys/platform/pc64/x86_64 swtch.s genassym.c

kernel - Reduce atomic ops in switch code

* Instead of using four atomic 'and' ops and four atomic 'or' ops, use
  one atomic 'and' and one atomic 'or' when adjusting the pmap->pm_active.

* Store the array index and simplified cpu mask in the globaldata structure
  for the above operation.

DragonFlyBSD — sys/kern init_main.c lwkt_thread.c, sys/platform/pc64/x86_64 swtch.s genassym.c

kernel - Reduce atomic ops in switch code

* Instead of using four atomic 'and' ops and four atomic 'or' ops, use
  one atomic 'and' and one atomic 'or' when adjusting the pmap->pm_active.

* Store the array index and simplified cpu mask in the globaldata structure
  for the above operation.

DragonFlyBSD — sys/cpu/x86_64/include cpumask.h

kernel - refactor CPUMASK_ADDR()

* Refactor CPUMASK_ADDR(), removing the conditionals and just indexing the
  array as appropriate.
Delta File
+1 -4 sys/cpu/x86_64/include/cpumask.h
+1 -4 1 file

DragonFlyBSD — sys/cpu/x86_64/include cpumask.h

kernel - refactor CPUMASK_ADDR()

* Refactor CPUMASK_ADDR(), removing the conditionals and just indexing the
  array as appropriate.
Delta File
+1 -4 sys/cpu/x86_64/include/cpumask.h
+1 -4 1 file

DragonFlyBSD — sys/vm vm_object.c

kernel - Fix VM bug introduced earlier this month

* Adding the yields to the VM page teardown and related code was a great
  idea (~Jul 10th commits), but it also introduced a bug where the page
  could get torn-out from under the scan due to the vm_object's token being
  temporarily lost.

* Re-check page object ownership and (when applicable) its pindex before
  acting on the page.
Delta File
+52 -1 sys/vm/vm_object.c
+52 -1 1 file

DragonFlyBSD — sys/vm vm_object.c

kernel - Fix VM bug introduced earlier this month

* Adding the yields to the VM page teardown and related code was a great
  idea (~Jul 10th commits), but it also introduced a bug where the page
  could get torn-out from under the scan due to the vm_object's token being
  temporarily lost.

* Re-check page object ownership and (when applicable) its pindex before
  acting on the page.
Delta File
+52 -1 sys/vm/vm_object.c
+52 -1 1 file

DragonFlyBSD — lib/libdevstat devstat.c, usr.bin/systat vmstat.c swap.c

systat - Refactor memory displays for systat -vm

* Report paging and swap activity in bytes and I/Os instead of pages and
  I/Os (I/Os usually matched pages).

* Report zfod and cow in bytes instead of pages.

* Replace the REAL and VIRTUAL section with something that makes a bit
  more sense.

  Report active memory (this is just active pages), kernel memory
  (currently just wired but we can add more stuff later), Free
  (inactive + cache + free is considered free/freeable memory), and
  total system memory as reported at boot time.

  Report total RSS - basically how many pages the system is mapping to
  user processes.  Due to sharing this can be a large value.

  Do not try to report aggregate VSZ as there's no point in doing so
  any more.

  Reported swap usage on the main -vm display as well as total swap
  allocated.

* Fix display bug in systat -sw display.

    [2 lines not shown]

DragonFlyBSD — lib/libdevstat devstat.c, usr.bin/systat vmstat.c swap.c

systat - Refactor memory displays for systat -vm

* Report paging and swap activity in bytes and I/Os instead of pages and
  I/Os (I/Os usually matched pages).

* Report zfod and cow in bytes instead of pages.

* Replace the REAL and VIRTUAL section with something that makes a bit
  more sense.

  Report active memory (this is just active pages), kernel memory
  (currently just wired but we can add more stuff later), Free
  (inactive + cache + free is considered free/freeable memory), and
  total system memory as reported at boot time.

  Report total RSS - basically how many pages the system is mapping to
  user processes.  Due to sharing this can be a large value.

  Do not try to report aggregate VSZ as there's no point in doing so
  any more.

  Reported swap usage on the main -vm display as well as total swap
  allocated.

* Fix display bug in systat -sw display.

    [2 lines not shown]