how to forbid a process to use swap?

Anton Shterenlikht mexas at bristol.ac.uk
Sun Mar 10 00:30:56 UTC 2013


	From m.e.sanliturk at gmail.com Sun Mar 10 00:25:27 2013

	On Sat, Mar 9, 2013 at 3:55 PM, Anton Shterenlikht <mexas at bristol.ac.uk>wrote:

	> I run a program that uses large arrays.
	> I don't want it to use swap, because it's
	> too slow. I want the program to fail when
	> there's not enough RAM, rather than using
	> swap. How to do this?
	>
	> Is it something to do with these kernel
	> variables:
	>
	> kern.dfldsiz: 34359738368
	> kern.dflssiz: 8388608
	>
	> kern.maxdsiz: 34359738368
	> kern.maxssiz: 536870912
	> kern.maxtsiz: 134217728
	>
	> Many thanks
	>
	> Anton
	>



	If you have program source , you may do the following :



	Define a constant :  Maximum_Allocatable_Memory = ?


	Define a variable : Total_Allocated_Memory = 0



	Before allocating a memory of size M ,
	check whether  Total_Allocated_Memory + M < Maximum_Allocatable_Memory

	If yes : Allocate memory ;
	          Add M to Total_Allocated_Memory .

	If no :

	Return an error and gracefully stop your program instead of a crash which
	will loose data .

It's a fortran program. I'm not very stong in C.
Ideally I'd just use the OS (shell) means,
but I need to understand better which resourse
limit controls what.

For example, with sh limits(1), I see:

$ limits
Resource limits (current):
  cputime              infinity secs
  filesize             infinity kB
  datasize               524168 kB
  stacksize              524168 kB
  coredumpsize         infinity kB
  memoryuse            infinity kB
  memorylocked               64 kB
  maxprocesses            12200
  openfiles              117594
  sbsize               infinity bytes
  vmemoryuse           infinity kB
  pseudo-terminals     infinity
  swapuse              infinity kB
$ 

Which of these are relevant to my case?

Finally, the actual problem is on linux,
but I hope if I'm able to understand how
things work on FreeBSD, then I could do
it on linux too, especially if it's just
a sh command.

Thanks

Anton


More information about the freebsd-questions mailing list