1

I am now solving the following problem on Ubuntu: Is it possible to specify if one process should run only in the RAM (i.e. is not allowed to swap) or reversely only in the swap part? I mean that the process should be killed by the system rather then use the other type of memory.

It is important for me because I should compare the running time of more algorithms and I must be sure that all processes run either in the RAM or in the swap part.

MadHatter
  • 78,442
  • 20
  • 178
  • 229
stanekr
  • 11
  • 1
  • 2
  • 4
    No process ever runs from swap. If it becomes active, it's pages will be read from the swap back into the memory. – Sven Jan 08 '13 at 13:27

2 Answers2

2

No, unless a process gets memory and binds that memory using mlock there is no guaranteed way to ensure that it will not go to swap.

Swap is used for anonymous dirty pages. It doesn't have a fixed filesystem backing or source, so no program ever can start from swap.

And unless the application on it's call to get memory, binds the memory using mlock(), it can go to swap. You can try to eliminate the entire 'go-to-swap' theory by not using swap file or swap partition but that is not really a recommended way to go.

Soham Chakraborty
  • 3,534
  • 16
  • 24
0

There may not be a comfortable way to kill a process if it swaps at this time. However, it should be rather easy to script a tiny deamon. What you script needs to do:

  1. determine all relevant process ids
  2. for each of these ids, consult /proc/${PROCESS_ID}/smaps for its "Swap:" fields
  3. if the sum of these fields is > 0, kill the process

This may not be a nice solution, but it's probably better than nothing. A related discussion can be found on linuxquestions.org. For manually monitoring processes, you can tell "top" to show you how much swap is used (inside top, hit "f" and display the SWAP field). hth