VLCvideo编码产生高“好”的负载

有一个用于实时video编码的vlc进程服务器。

这里是输出top 1 (显示处理器)和H (显示线程)

 top - 15:50:26 up 42 min, 1 user, load average: 2.64, 2.60, 2.45 Tasks: 130 total, 7 running, 123 sleeping, 0 stopped, 0 zombie Cpu0 : 0.0%us, 0.3%sy, 72.2%ni, 26.8%id, 0.0%wa, 0.0%hi, 0.7%si, 0.0%st Cpu1 : 0.0%us, 0.0%sy, 56.0%ni, 44.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu2 : 2.6%us, 0.0%sy, 9.4%ni, 87.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.3%st Cpu3 : 0.0%us, 0.0%sy, 35.9%ni, 64.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu4 : 0.0%us, 0.0%sy, 35.0%ni, 65.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu5 : 2.6%us, 0.0%sy, 0.0%ni, 97.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu6 : 0.0%us, 0.6%sy, 18.0%ni, 81.4%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu7 : 4.9%us, 0.0%sy, 0.0%ni, 95.1%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 533064k total, 233000k used, 300064k free, 4832k buffers Swap: 2097144k total, 0k used, 2097144k free, 40516k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5841 videoenc 20 0 674m 119m 8228 R 8.0 22.9 2:32.50 vlc 5840 videoenc 20 0 674m 119m 8228 S 4.7 22.9 1:49.53 vlc 5843 videoenc 20 0 674m 119m 8228 R 4.7 22.9 1:45.36 vlc 22787 videoenc 30 10 674m 119m 8228 R 4.7 22.9 0:00.14 vlc 22788 videoenc 30 10 674m 119m 8228 S 2.0 22.9 0:00.06 vlc 22789 videoenc 30 10 674m 119m 8228 R 1.3 22.9 0:00.04 vlc 5838 videoenc 20 0 674m 119m 8228 S 0.7 22.9 0:08.14 vlc 22790 videoenc 30 10 674m 119m 8228 S 0.7 22.9 0:00.02 vlc 22791 videoenc 30 10 674m 119m 8228 S 0.7 22.9 0:00.02 vlc 

这里是top合并输出(不含1H

 top - 16:01:09 up 52 min, 1 user, load average: 3.88, 3.74, 3.10 Tasks: 110 total, 1 running, 109 sleeping, 0 stopped, 0 zombie Cpu(s): 1.2%us, 0.1%sy, 35.2%ni, 63.2%id, 0.1%wa, 0.0%hi, 0.0%si, 0.1%st Mem: 533064k total, 234136k used, 298928k free, 5208k buffers Swap: 2097144k total, 0k used, 2097144k free, 40992k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 5825 videoenc 20 0 674m 119m 8228 S 305 22.9 98:59.58 vlc 1 root 20 0 10328 736 616 S 0 0.1 0:00.08 init 2 root 15 -5 0 0 0 S 0 0.0 0:00.00 kthreadd 3 root RT -5 0 0 0 S 0 0.0 0:00.00 migration/0 4 root 15 -5 0 0 0 S 0 0.0 0:00.00 ksoftirqd/0 5 root 15 -5 0 0 0 S 0 0.0 0:00.04 events/0 6 root 15 -5 0 0 0 S 0 0.0 0:00.00 khelper 8 root 15 -5 0 0 0 S 0 0.0 0:00.00 xenbus 10 root RT -5 0 0 0 S 0 0.0 0:00.00 migration/1 11 root 15 -5 0 0 0 S 0 0.0 0:00.00 ksoftirqd/1 12 root 15 -5 0 0 0 S 0 0.0 0:00.02 events/1 13 root RT -5 0 0 0 S 0 0.0 0:00.00 migration/2 14 root 15 -5 0 0 0 S 0 0.0 0:00.00 ksoftirqd/2 15 root 15 -5 0 0 0 S 0 0.0 0:00.02 events/2 16 root RT -5 0 0 0 S 0 0.0 0:00.00 migration/3 17 root 15 -5 0 0 0 S 0 0.0 0:00.00 ksoftirqd/3 

这是一个问题:
为什么所有%CPU的总和不等于%ni的总和。 为什么VLC在没有renice的情况下运行会产生“好”的负载

VLC中的一个线程或者用于编码的一个库可能使用setpriority()来改变它创build的线程的优先级

您在Irix模式下运行TOP,将CPU%显示为单个CPU的百分比。 按“I”切换到显示CPU%为所有CPU百分比的Solaris模式。

从手册页:

CPU状态CPU状态显示在摘要区域中。 它们总是以百分比显示,并且是从现在到最后一次刷新之间的时间。
我们 – 用户CPU时间
CPU花费在非用户进程上的时间。
ni – 尼斯CPU时间
CPU运行用户进程所花费的时间。

%CPU就是一切,ni只是最后一刻。