I would like to allocate certain number of CPU cores to a specific process for performance improvement.

How can I do this?


There are many programs that allow you to take use of it already - for example compilers.

In your case , you should see whether your program is designed to use multiple cpu or cpu threads in parallel or not.

If your program (e.g. a java process) is single threaded and can't use multiple cores simultaneously, then you may just increase its priority only with nice command.

But you can write java programs that make use of multiple cores.

See this post


I assume the question is about a Linux environment and there's a competing workload in the system.

The easiest way to get some process separation at the CPU level would be to use taskset/sched_setaffinity and assign your process to a set of cores, and possibly exclude these cores from being used by other heavy CPU users on that system.

Another possibility is to use mechanisms like cgroups (manually or via container solutions like docker) to assign a majority of CPU time to the selected process (via shares).

If your workload is performance sensitive you may have to look at CPU used by the OS itself, e.g. handling network packets. You may want to check which core does most of that processing, if any, which normally shows up as si (software interrupt) time in top. Making sure your process lands (or doesn't land) on that core may influence your results - unfortunately both ways. Look at irqbalance if it gets that far.

And finally, in attempts to lower external interference, you can try boosting your sensitive process's CPU scheduling priority by fiddling with its niceness using nice.

  • i think the question is about performance improvement of running a single process on multiple cores. – Ijaz Ahmad Khan Jul 27 '16 at 12:11

I'm not sure if you want to restrict a processes to a certain number of CPU cores or if you want to dedicate CPU cores to this process.

Dedicating CPU time

To my knowledge it is not possible to "give" a process exclusive access to a CPU, or at least it's very hard to do. If other processes are usng CPU time that you would rather have available to another process you should use nice. Nice is essentially a priority system for processes and is a number between -20 and 19 (0 by default). See man nice. Higher "niceness" means that the process gets less CPU time, it's "nicer" to the other processes. Lower the nice value and the process will be less nice and consume more CPU time. You could for examle run ls with the highest priority: nice -20 ls

Restricting CPU cores

On Linux you could use cgroups to restrict a process. I'm not sure about BSD other Unix variants, but I would assume they have similar functionality.

  • i think the question is about performance improvement of running a single process on multiple cores not about process isolation. – Ijaz Ahmad Khan Jul 27 '16 at 12:11

Not the answer you're looking for? Browse other questions tagged or ask your own question.