It seems (from looking at the Linux kernel source) that the Swap:
metric in /proc/pid/smaps
is the total swap accessible by the given pid.
In the case where there is shared memory involved, this seems to be an over-approximation of actual swap usage. For example when summing swap usage of a parent pid with its forked children, and if they have common shared memory in the swap, then it appears that this portion (swapped shared memory) is counted multiple times (once per pid).
My question is whether there is a way to figure out a fair swap usage metric based on the number of processes sharing it (similar to Pss:
).
You just have to divide
Swap
value by number of process that are sharing this Virtual Memory Area.Actually, I didn't find how to get number of process sharing a VMA. However, it is sometime possible to calculate it by dividing
RSS
withPSS
. Sure, it only work ifPSS != 0
.Finaly, you can use this perl code (pass
smap
file as argument):