以非常低的优先级运行linux进程?


12

我有一个常规过程,它并不那么重要,但是会消耗大量的CPU能力,还有一个非常重要的过程,但是它花费了大部分时间空闲,但是当找到工作时,它确实需要很高的计算能力

我试图与运行nice -20 ./low_priority_processnice --20 ./high_priority_process,但仍然较低优先级占用CPU的显著量时高优先级的进程是需要的人,我怎么可以运行一个过程,真的会产生或使用时CPU供电另一个进程甚至自动挂起


您如何确定实际上需要高优先级流程?
muru

它将产生大量线程,或者该进程消耗cpu超过cpu容量的50%
uray 2014年

RR调度用于高优先级过程。
拉梅什(Ramesh)2014年

@Ramesh这可能带来什么不同?
肯·夏普

Answers:


10

看一下cgroups,它应该确切地提供您所需要的-CPU预留(以及更多)。我建议阅读使用cgroups控制应用程序的优先级

就是说,将重要但经常空闲的进程归为一组,分配95%的CPU,将其他应用程序归为另一个5%的CPU-在需要时,您将获得(几乎)所有工作所需的功能,而不断那些时候,耗电最多只能达到5%。当计算浪潮消失时,所有CPU性能都将投向其余进程。好处是,如果您为类似的进程创建一个特殊的cgroup(对性能的最低要求),则sshd无论尝试获取所有可能的CPU,您都可以登录-保留一些CPU时间sshd


1
有没有类似cpulimitnice修改进程的cgroup的命令?因为我如果cgroup是API调用,则我无法重新编译其中的任何应用程序以使用cgroup
uray 2014年

不,您只需将cgroup层次结构安装在某个位置,创建每个组的目录,并将进程的PID写入某些文件。所有这些都必须以root用户身份完成(或更确切地说,要具有适当的特权)。某些init系统(即systemd,至少在某些情况下)从必须使用init系统界面(通常是特殊命令)的用户那里“窃取” cgroups接口。阅读链接的答案和维基百科文章。真。:)
彼得

哦,还有libcgroup软件包,该软件包带有用于处理cgroup的实用程序,其中包括一个守护程序(cgrulesengd),该守护程序实际上可以根据某些条件将进程分为几组。
彼得2014年

7

如果进程优先级(好的值)较低,则不会中断更高优先级的进程。您看到运行高优先级进程时低优先级进程仍在消耗大量CPU的原因是,高优先级进程并不那么忙。可能正在等待IO。用于chrt -p -i 0 $PID以比更低的优先级运行该进程nice 19 -p $PID(假定我们在这里谈论Linux)。

chrt -p -i 0 $PID 将进程放入“ true”空闲调度程序中。

http://linux.die.net/man/1/chrt


2
chrt -p -i 0 $ PID
Robert Foss

chrt还不够。我要做的是在观看视频的同时在后台对其他视频进行重新编码。使用chrt可以帮助处理youtube视频,但是高质量的mkv仍然会跳过。我希望能正常播放视频,但要使用剩余的CPU余量进行重新编码,因为我需要做大量工作。
凌晨

0

尝试使用此示例将进程作为低级进程运行。

如果您的工作很不错,请使用tar xvf asets.zip

好的tar xvf asset.zip

之后,发出

顶部以监视解压缩过程

ps aux | grep“ tar”

尝试使用cpulimit特定的东西

wget -O cpulimit.zip https://github.com/opsengine/cpulimit/archive/master.zip
unzip cpulimit.zip
cd cpulimit-master
make
sudo cp src/cpulimit /usr/bin

cpulimit -l 50 python 0 9999999999> / dev / null和


是的-20,“低优先级” --20是“高优先级”,请看双破折号作为nice命令。是的,我完全了解漂亮的价值,但是我的问题是,除了使用漂亮的价值之外,还有什么办法可以告诉调度程序
uray 2014年

2
您确定@ user77710吗?Ubuntu手册页POSIX手册页均未指定此语法。两者都使用-n -20-n 20等等
大师

是的,无论如何,语法并不重要,我的观点是两个进程的设置的非常低和非常高的值不会给出我想要的结果
uray 2014年

2
@ user77710什么?“语法不重要”?那么如何确定自己设置的值呢?
muru 2014年

因为我可以在htoptopps或其他任何东西上看到该过程具有很好的价值
uray 2014年

-1

对于未来的后起之秀,这里是一个完整的例子nice压力

  1. 测试机有2个CPU
$ lscpu
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
CPU(s):              2 
On-line CPU(s) list: 0,1
Thread(s) per core:  2
...
  1. 安装stressapt-get install stress
  2. 通过低优先级调用使2个CPU繁忙,以增强压力: nice -20 stress --cpu 2
  3. 使用以下命令检查CPU使用率top
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15894 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.43 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  99.7  0.0   0:06.42 stress                                                                                    

这表明两个CPU都已满。

  1. 优先启动单CPU压力过程: nice --20 stress --cpu 1
  2. 再次检查CPU使用情况 top
                                                 v
                                                 v
                                                 v
                                                 v
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                   
15928 ubuntu    20   0    8240    100      0 R  99.7  0.0   0:24.02 stress                                                                                    
15894 ubuntu    39  19    8240     96      0 R  51.2  0.0   1:12.46 stress                                                                                    
15895 ubuntu    39  19    8240     96      0 R  48.8  0.0   1:12.35 stress                                                                                    

这表明单核压力进程获得了完整的CPU,而低优先级进程都共享剩余的1 cpu

  1. 另一方面,杀死所有上述stress调用并仅触发一个3进程stress --cpu 3将为每个进程分配66%的CPU
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.