Sunday, April 18, 2010

Show real swap usage for each individual process

Update: the kernel patch is already in 2.6.34-rcN.

Currently, in top, the SWAP column only shows the difference between VIRT and RES:
    case P_SWP:
MKCOL(scale_num(PAGES_TO_KB(p->size - p->resident), w, s));
So currently the value is of no use.

As a matter of fact, a recent enough kernel has provided the information which is needed to calculate the swap usage for each process. It is in /proc/$PID/smaps. But using smaps may affect top's performance because you have to calculate the sum yourself.

But with this patch https://patchwork.kernel.org/patch/56929/, the kernel will keep track of each process's swap usage for you. This patch (maybe not exactly in the same shape) is already in mmotm tree (http://userweb.kernel.org/~akpm/mmotm/) 2.6.34-rcN.

However, checking the /proc/$PID/status file directly may not be a thing which people would like to do. So I decided to make a patch for ps and top. Now it seems to be working.

This is the vanilla ps:
$ ps -o m_swap,comm -e | grep firefox
- firefox

This is modified ps:
$ ./ps/ps -o m_swap,comm -e | grep firefox
2984 firefox

This is a picture showing a modified top:


The patch can be found here:
http://dev.gentoo.org/~r0bertz/per-process-swap-usage.patch

Saturday, April 03, 2010

Generate coredumps automatically in specified directory

If you are into investigating coredumps, or you are just curious about how many processes have coredumped, then this is for you:

1. add the following line to /etc/security/limits.conf
* - core unlimited
2. add the following line to /etc/sysctl.conf
kernel.core_pattern = /corefiles/core.%e.%p
%e is the executable filename, %p is pid.
Please check the "Naming of core dump files" section of man 5 core for more information on this.

3. run "sysctl -p", then logout and login. Or just reboot.

This is what I have on my Yeeloong:
$ ls /corefiles/
core.genstrings.11832 core.nscd.10278 core.nscd.12821 core.nscd.13617 core.nscd.23172 core.nscd.29367 core.nscd.6428
core.genstrings.18210 core.nscd.10281 core.nscd.13061 core.nscd.13620 core.nscd.23175 core.nscd.29368 core.nscd.6431
core.main.19478 core.nscd.10284 core.nscd.13064 core.nscd.19028 core.nscd.24042 core.nscd.29369
core.main.19702 core.nscd.10293 core.nscd.13067 core.nscd.19031 core.nscd.29353 core.nscd.29371
core.main.19825 core.nscd.10294 core.nscd.13219 core.nscd.22710 core.nscd.29360 core.nscd.29372
core.main.19894 core.nscd.12815 core.nscd.13222 core.nscd.22713 core.nscd.29363 core.nscd.29373
core.mkhomedir_helpe.31721 core.nscd.12818 core.nscd.13614 core.nscd.22716 core.nscd.29366 core.nscd.6425