7.0-RELEASE(CPU: AMD-K6)になってから、gkrellm2の Swapメーターが、起動
時の値のままで変更されません。

sysutils/gkrellm2/work/gkrellm-2.3.0/src/sysdeps/freebsd.c
...
 struct vmmeter sum;
...
 if (kvm_read(kvmd, nl_mem[N_CNT].n_value, (char *)&sum,
              sizeof(sum)) != sizeof(sum))
...
 swappgsin = sum.v_swappgsin;
 swappgsout = sum.v_swappgsout;

(gdb) p sum
$3 = {... v_swapin = 0, v_swapout = 0, v_swappgsin = 0, v_swappgsout = 0, 
  ... v_page_count = 61095, ... v_free_count = 22020,
  ... v_wire_count = 12479, v_active_count = 15406, v_inactive_target = 2791,
  ... v_cache_count = 923 ...

変動中でも sum.v_swappgsin と sum.v_swappgsoutの値が "0"のままで替わら
ず、メーターが更新されないようです。
6.3 では正常です。どこかの設定の違いでしょうか?

ただ、topでは Swap値は正常に更新されているので、そこから 2つの読み込み
部分だけを借用(gtk用に少し変更)してみると

--- freebsd.c.orig      2007-07-07 08:53:07.000000000 +0900
+++ freebsd.c   2008-04-24 18:08:08.000000000 +0900
@@ -654,6 +654,9 @@
 #include <sys/sysctl.h>
 #include <vm/vm_param.h>
 
+#define GETSYSCTL(name, var) getsysctl(name, &(var), sizeof(var))
+static void getsysctl(const char *name, void *ptr, size_t len);
+
 static struct nlist nl_mem[] = {
 #define N_CNT          0
        { "_cnt" },
@@ -934,6 +937,23 @@
                swap_total,
                swap_used;
 
+static void
+getsysctl(const char *name, void *ptr, size_t len)
+{
+        size_t nlen = len;
+
+        if (sysctlbyname(name, ptr, &nlen, NULL, 0) == -1) {
+                fprintf(stderr, "top: sysctl(%s...) failed: %s\n", name,
+                    strerror(errno));
+                exit(23);
+        }
+        if (nlen != len) {
+                fprintf(stderr, "top: sysctl(%s...) expected %lu, got %lu\n",
+                    name, (unsigned long)len, (unsigned long)nlen);
+                exit(23);
+        }
+}
+
 void
 gkrellm_sys_mem_read_data(void)
        {
@@ -941,6 +961,7 @@
        static gint     first_time_done = 0;
        static gint     swappgsin = -1;
        static gint     swappgsout = -1;
+       gint            nspgsin, nspgsout;
        gint            dpagein, dpageout;
        struct vmmeter  sum;
        guint64         total, used, x_used, free, shared, buffers, cached;
@@ -1039,6 +1060,9 @@
        cached = sum.v_cache_count << pshift;
        used = x_used - buffers - cached;
        gkrellm_mem_assign_data(total, used, free, shared, buffers, cached);
+
+       GETSYSCTL("vm.stats.vm.v_swappgsin", nspgsin);
+       GETSYSCTL("vm.stats.vm.v_swappgsout", nspgsout);
        if (swappgsin < 0)
                {
                dpagein = 0;
@@ -1046,11 +1070,11 @@
                }
        else
                {
-               dpagein = (sum.v_swappgsin - swappgsin) << (pshift - 10);
-               dpageout = (sum.v_swappgsout - swappgsout) << (pshift - 10);
+               dpagein = (nspgsin - swappgsin) << pshift;
+               dpageout = (nspgsout - swappgsout) << pshift;
                }
-       swappgsin = sum.v_swappgsin;
-       swappgsout = sum.v_swappgsout;
+       swappgsin = nspgsin << pshift;
+       swappgsout = nspgsout << pshift;
 
        if (dpagein > 0 || dpageout > 0 || first_time_done == 0)
                {
----------- ここまで ----------

jdk16での makeで、swap 100%で停止するまでの変化を、ちゃんとメーターで
示すようになります。

/usr/include/sys/vmmeter.hが 6.3から替っていて
...
/*
 * System wide statistics counters.
 * Locking:
 *      a - locked by atomic operations
 *      c - constant after initialization
 *      f - locked by vm_page_queue_free_mtx
 *      p - locked by being in the PCPU and atomicity respect to interrupts
 *      q - locked by vm_page_queue_mtx
 */
...
        u_int v_swapin;         /* (p) swap pager pageins */
        u_int v_swapout;        /* (p) swap pager pageouts */
...

swap 関係が、皆(p)となっているのですが(デュアルCPUへの対応でしょうか?)、
ここまで;
-- 
                        /  Name : Dobashi Mitsuyoshi  /
                       / E-mail : 
[&#x30E1;&#x30FC;&#x30EB;&#x30A2;&#x30C9;&#x30EC;&#x30B9;&#x4FDD;&#x8B77;] /

メールによる返信