The xvmstat dtrace script gives me an outrageous value for swap:
w swap free re maj mf
264 17592185983072 2014 5 0 529
the ''top'' command shows it correctly:
Memory: 128G real, 2088M free, 130G swap in use, 23G swap free
It looks like the problem is that my system is returning a higher value for
swapfs_minfree than availrmem, so `availrmem - `swapfs_minfree is a negative
number, and that um, does not compute. Taking code from xvmstat:
# cat ./mem.d
#!/usr/sbin/dtrace -qs
dtrace:::BEGIN
{
printf("k_anoninfo.ani_max : %9d\n", `k_anoninfo.ani_max);
printf("k_anoninfo.ani_phys_resv : %9d\n",
`k_anoninfo.ani_phys_resv);
printf("k_anoninfo.ani_mem_resv : %9d\n",
`k_anoninfo.ani_mem_resv);
printf("availrmem : %9d\n", `availrmem);
printf("swapfs_minfree : %9d\n", `swapfs_minfree);
printf("_pagesize : %9d\n\n", `_pagesize);
this->ani_max = `k_anoninfo.ani_max;
printf("this->ani_max is %9d\n", this->ani_max);
this->ani_resv = `k_anoninfo.ani_phys_resv + `k_anoninfo.ani_mem_resv;
printf("this->ani_resv is %9d\n", this->ani_resv);
this->swap = (this->ani_max - this->ani_resv > 0 ?
this->ani_max - this->ani_resv : 0) + `availrmem - `swapfs_minfree;
printf("this->swap is %9d\n", this->swap);
this->swap *= `_pagesize;
printf("this->swap is %9d\n", this->swap);
this->swap /= 1048576;
printf("this->swap is %9d\n", this->swap);
exit(0);
}
# ./mem.d
k_anoninfo.ani_max : 9995349
k_anoninfo.ani_phys_resv : 7061224
k_anoninfo.ani_mem_resv : 10031698
availrmem : 1277036
swapfs_minfree : 2061000
_pagesize : 8192
this->ani_max is 9995349
this->ani_resv is 17092922
this->swap is 18446744073701670079
this->swap is 18446744009144000512
this->swap is 17592185982841
So, any idea on how to correctly calculate swap?
--
This message posted from opensolaris.org