- systat: Stop displaying total if there is one swap devise.
- systat: Implemented per-process swap display on -swap.
- Avoid double counting and address review comments.
- systat.1 updates
- D31163 - Add sysctl vm.objects_swap.
- Use new vm.objects_swap instead of vm.objects.
Tue, Oct 12
Jul 24 2021
I started looking into https://reviews.freebsd.org/D31163.
I've been releng/13.0 based system (with cherrypick).
This time, the patch doesn't apply to 13 and I need to prepare main branch based environment.
I will need a bit time to build the latest.
May 31 2021
I tested the 2 kernel changes both applied. In short, it helps since the 2nd refresh.
Update systat.1 based on suggestions.
May 18 2021
Ok. Could you add the following to the kernel, please, and see if it makes any difference?diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index dbb09f67b4c1..cf8b3fcb8f9c 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -2478,7 +2478,7 @@ sysctl_vm_object_list(SYSCTL_HANDLER_ARGS) struct vnode *vp; struct vattr va; vm_object_t obj; - vm_page_t m; +// vm_page_t m; u_long sp; int count, error; @@ -2524,6 +2524,7 @@ sysctl_vm_object_list(SYSCTL_HANDLER_ARGS) kvo->kvo_memattr = obj->memattr; kvo->kvo_active = 0; kvo->kvo_inactive = 0; +#if 0
May 15 2021
I mean, when asking whether my one-line patch helped, did interactivity of the system during vm.objects retrieval improved? Of course it cannot optimize the running time of the sysctl, but it should allow for other threads to run some more while sysctl is gathering data and copying it out.
May 11 2021
Fix once more.
May 9 2021
Adjust systat.1 from the other review.
Most likely it was sysctl vm.objects and not per-proc vmmap sysctl that caused the intermediate hang and CPU usage. As I and Mark discussed it earlier, some more fine-grained API to retrieve e.g. just the shadow chain for given object handle probably would help there.
But before I implement this sysctl, can you recheck, please, that the following patch solves the transient hang issue?commit fd2da9e1515bb50fb1c8fb747d9987ee9b8a314d Author: Konstantin Belousov <kib@FreeBSD.org> Date: Sat May 8 01:13:29 2021 +0300 sysctl vm.objects: yield if hog diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c index 1c4e879d82ea..b1fa3ebdf9ab 100644 --- a/sys/vm/vm_object.c +++ b/sys/vm/vm_object.c @@ -2614,6 +2614,7 @@ sysctl_vm_object_list(SYSCTL_HANDLER_ARGS) kvo->kvo_structsize = roundup(kvo->kvo_structsize, sizeof(uint64_t)); error = SYSCTL_OUT(req, kvo, kvo->kvo_structsize); + maybe_yield(); mtx_lock(&vm_object_list_mtx); if (error) break;
May 7 2021
Thank you for reviews.
Remove extra comments.
another style fix.
May 6 2021
Remove #include <devstat.h>
Style fixes based on review comments and recstored Kirk's systat.1 updates.
May 5 2021
Thanks for the program. Indeed, I saw lots of duplicates from the java program.
- Avoid double counting and address review comments.
May 4 2021
The algorithm has been adjusted proposed approach as below by Konstantin:
Kirk and I have been looking into this together.
Given the history of comments, this is a better one for tracking objective of this change.
Apr 23 2021
I had mixed with another changeset and caused failures.
systat: Update to SPDX BSD-2-Clause - I've written zarc.c and sysput.c and University of California hasn't been involved
Apr 15 2021
I saw this patch on a list, and I decided to avoid it.
It does not do what is advertised, i.e. the numbers displayed has nothing related to the 'process swap usage'. First, the swap usage per process is quite hard to define: due to the shadow chaining and sharing of the shadowing objects between siblings, a lot of swap objects is commonly used but simply not visible to the view from the process map level. Second, (and to be fair, it is mentioned in the man page update of this patch), swap object type itself does not imply that a swap is used, at all. Third, even if the top-level object is default, below it, the objects might have swap types.
Apr 10 2021
Mar 20 2021
Mar 19 2021
Mar 17 2021
Dec 16 2020
Fix when the number of swap devise is 1.
Dec 7 2020
Fix off-by-one error over 60% and stop extra +1 for percentage.
Add a , to .Xr ls
Update getbsize man page.
Oct 19 2020
Remove extra spaces around a function argument.
Use bitmask to indicate which protocol versions to try.
Also remove duplicate check.
Oct 18 2020
I make multiple read-only connection for installworld/installkernel from different machines.
Otherwise, I use ggate to export some ufs file systems.
I could use nfs for these as well.
Address some of problems pointed by code review.
Sep 28 2020
The slowness issue existed back in a decade ago around 6.1-RELEASE and some years/releases thereafter.
Sep 24 2020
Sep 20 2020
Sep 9 2020
Thank you for checking this again.
It was also my bad that the problem wasn't described well enough.
Sep 7 2020
Stop using PR* formatter.
Tested on i386 and amd64.
Sep 6 2020
ggate defines its offset in unsigned int 64 as below.
So, printing negative numbers from printf indicates using a wrong formatter.
Aug 29 2020
Thank you for your support, Mark.
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=132845 is the corresponding bugzilla entry.
Aug 28 2020
Verify paths are the same between handshakes for a single session.
Aug 27 2020
Moved close() to connection_remove() and aligned with send/recv fds.
Aug 26 2020
First of all, thank you for your quick response.
Aug 25 2020
Aug 24 2020
Aug 2 2020
Jun 12 2020
Added static to implementatoin; follow style of other existing static functions.
Drop unnecessary NULL check. This is a field on a struct and won't be NULL.
Jun 11 2020
May 29 2020
I think I addressed all of feed backs so far.
I'm wondering if someone can take a look.
May 14 2020
Address other review comments.
Mar 20 2020
Fixed style, moved 0 assignment to *before and *after when SWWAPBLK_NONE,
and adjusted if/else statement for *after case.
Mar 15 2020
Split backward and forward search into separate functions for ease of reading.
Mar 5 2020
Thank you for quick response, Mark.
Feb 25 2020
Jan 20 2020
Updated function name in comment.
Changed its prefix to swdevt.
Jan 18 2020
Jan 17 2020
Nov 22 2019
Check NULL pointers explicitly.
Nov 21 2019
Nov 20 2019
Update and merge D22437.
Nov 18 2019
It looks we better drop swp_pager_meta_ctl() changes from this, D22324, and let D22409 take over the lookup implementation while dropping SWM_POP for simpler diff.
D22409 change is to optimize swap_pager_haspage() with additional searches after successful pindex lookup.
Nov 16 2019
Nov 15 2019
D22280 has been committed.
Nov 11 2019
Nov 9 2019
Correct swblk index and exclude swp_pager_swblk_free_empty() changes.