SD.
SD.

Reputation: 1500

Allocate memory to a process that other process can not use in linux

To limit memory resource for particular process we can use ulimit as well as cgroup.

I want to understand that if using cgroup, I have allocated say ~700 MB of memory to process A, on system having 1 GB of RAM, and some other process say B, requires ~400 MB of memory. What will happen in this case?

  1. If process A is allocated ~750 MB of memory but using only 200 MB of memory, will process B can use memory that allocated to A?
  2. If no then how to achieve the scenario when "fix amount of memory is assigned to a process that other process can not use"?

EDIT

Is it possible to lock physical memory for process? Or only VM can be locked so that no other process can access it?

There is one multimedia application that must remain alive and can use maximum system resource in terms of memory, I need to achieve this.

Thanks.

Upvotes: 0

Views: 1862

Answers (2)

Peter Cordes
Peter Cordes

Reputation: 364128

What other processes will run on the same system, and what kind of thing do you want to happen if the other multimedia program needs memory that other processes are using?

You could weight the multimedia process so the OOM killer only picks it as a last choice after every other non-essential process. You might see a dropped frame if the kernel takes some time killing something to free up memory.

According to this article, adjust the oom-killer weight of a process by writing to /proc/pid/oom_adj. e.g. with

echo -17 > /proc/2592/oom_adj

Upvotes: 0

Processes are using virtual memory (not RAM) so they have a virtual address space. See also setrlimit(2) (called by ulimit shell builtin). Perhaps RLIMIT_RSS & RLIMIT_MEMLOCK are relevant. Of course, you could limit some other process e.g. using RLIMIT_AS or RLIMIT_DATA, perhaps thru pam_limits(8) & limits.conf(5)

You could lock some virtual memory into RAM using mlock(2), this ensures that the RAM is kept for the calling process.

If you want to improve performance, you might also use madvise(2) & posix_fadvise(2).

See also ionice(1) & renice(1)

BTW, you might consider using hypervisors like Xen, they are able to reserve RAM.

At last, you might be wrong in believing that your manual tuning could do better than a carefully configured kernel scheduler.

Upvotes: 1

Related Questions