Module Name: src Committed By: mrg Date: Tue Feb 1 09:18:07 UTC 2022
Modified Files: src/usr.bin/vmstat: vmstat.c Log Message: when picking which 2 disks to show in the 'vmstat' default output and they haven't been specified on the command line, pick the two devices that have had the largest read+write IO bytes count. To generate a diff of this commit: cvs rdiff -u -r1.248 -r1.249 src/usr.bin/vmstat/vmstat.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/vmstat/vmstat.c diff -u src/usr.bin/vmstat/vmstat.c:1.248 src/usr.bin/vmstat/vmstat.c:1.249 --- src/usr.bin/vmstat/vmstat.c:1.248 Sat Nov 27 22:16:42 2021 +++ src/usr.bin/vmstat/vmstat.c Tue Feb 1 09:18:07 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: vmstat.c,v 1.248 2021/11/27 22:16:42 rillig Exp $ */ +/* $NetBSD: vmstat.c,v 1.249 2022/02/01 09:18:07 mrg Exp $ */ /*- * Copyright (c) 1998, 2000, 2001, 2007, 2019, 2020 @@ -71,7 +71,7 @@ __COPYRIGHT("@(#) Copyright (c) 1980, 19 #if 0 static char sccsid[] = "@(#)vmstat.c 8.2 (Berkeley) 3/1/95"; #else -__RCSID("$NetBSD: vmstat.c,v 1.248 2021/11/27 22:16:42 rillig Exp $"); +__RCSID("$NetBSD: vmstat.c,v 1.249 2022/02/01 09:18:07 mrg Exp $"); #endif #endif /* not lint */ @@ -569,7 +569,7 @@ getnlist(int todo) char ** choosedrives(char **argv) { - size_t i; + size_t i, j, k; /* * Choose drives to be displayed. Priority goes to (in order) drives @@ -591,11 +591,30 @@ choosedrives(char **argv) break; } } + + /* + * Pick the most active drives. Must read the stats once before + * sorting so that there is current IO data, before selecting + * just the first two drives. + */ + drvreadstats(); for (i = 0; i < ndrive && ndrives < 2; i++) { - if (drv_select[i]) - continue; - drv_select[i] = 1; - ++ndrives; + uint64_t high_bytes = 0, bytes; + + k = ndrive; + for (j = 0; j < ndrive; j++) { + if (drv_select[j]) + continue; + bytes = cur.rbytes[j] + cur.wbytes[j]; + if (bytes > high_bytes) { + high_bytes = bytes; + k = j; + } + } + if (k != ndrive) { + drv_select[k] = 1; + ++ndrives; + } } return (argv);