我如何才能优化 Linux 来编码大量视频或一组相同的 CPU 密集型任务?

我如何才能优化 Linux 来编码大量视频或一组相同的 CPU 密集型任务?

我有一组 4-5 台机器,它们几乎整天都在编码视频,有时甚至整晚都在编码。我曾多次寻找优化它们的方法,但都没有成功。

我的前提:我应该能够使用几乎所有的 CPU 进行视频编码,当且仅当我同时运行多个编码过程时,我就是这样的。

问题:(从“顶部”开始)

任务:总计 382 个,其中 2 个正在运行,380 个正在休眠,0 个已停止,0 个僵尸
%Cpu:51.6 us、36.8 sy、0.0 ni、9.6 id、0.0 wa、2.0 hi、0.0 si、0.0 st
KiB 内存:总计 16425680,已使用 16171664,可用 254016,缓冲区 30492
KiB 交换:总计 16769020,已使用 406056,可用 16362964。15198692 缓存内存

  PID 用户 PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令                                                                                                                         
31308 根 20 0 486568 26000 5560 S 92.2 0.2 188:10.72 avconv                                                                                                                          
10340 根 20 0 475832 19920 5532 S 91.2 0.1 13:40.42 avconv                                                                                                                          
12547 根 20 0 473832 23672 5528 S 89.9 0.1 5:40.23 avconv                                                                                                                          
 8179 根 20 0 477132 21200 5560 S 89.2 0.1 71:50.15 avconv                                                                                                                          
 9059 根 20 0 472776 17960 5540 S 89.2 0.1 48:12.62 avconv                                                                                                                          
 9798 根 20 0 477812 16976 5532 S 88.9 0.1 25:23.15 avconv                                                                                                                          
 8725 根 20 0 476068 21696 5560 S 87.2 0.1 62:12.02 avconv                                                                                                                          
12657 根 20 0 472332 22012 5524 S 86.9 0.1 6:21.28 avconv                                                                                                                          
12915 根 20 0 473732 41888 5516 S 86.6 0.3 5:22.63 avconv                                                                                                                          
 8578 根 20 0 476840 24100 5536 S 85.6 0.1 63:17.07 avconv                                                                                                                          
 7822 根 20 0 472740 18940 5536 S 85.2 0.1 75:22.04 avconv                                                                                                                          
 9948 根 20 0 485420 18116 5560 S 84.9 0.1 22:18.23 avconv                                                                                                                          
 7356 根 20 0 476744 20084 5560 S 84.6 0.1 92:31.91 avconv                                                                                                                          
 9425 根 20 0 471096 19684 5552 S 82.9 0.1 37:48.28 avconv                                                                                                                          
12464 根 20 0 475004 24304 5532 R 81.6 0.1 6:30.16 avconv

尽管一次编码 14 个不同的视频文件,但 CPU 使用率仅徘徊在 50-55% 左右。如果我一次运行较少的流,则单个流将运行高达约 400% 的 CPU,而如上图所示,它们仅使用约 80-90% 的 CPU。

这是我唯一想让这个盒子做的事情,是否可以更多地利用 CPU 能力,或者我的前提有缺陷?

到目前为止,我已经尝试过 renice,但完全没有效果。我将 NI 设置为 -20 和 19,总体或单个编码的 CPU 使用率没有增加或减少。

我阅读了一些关于 vm.swappiness 的内容,但我并不清楚在我的用例中,swappiness 越多越好还是越少越好。这能提高性能吗?

更多详细信息:我包括的顶部机器是运行 Ubuntu 14.04 的 Dell R900。cat /proc/cpuinfo列出了 16 个 Intel(R) Xeon(R) CPU E7330 @ 2.40GHz 处理器和cat /proc/meminfo16 Gb Ram。该组中的其他机器类似并显示相同的行为。所有这些编码都是 DV 视频到 Mpeg2 视频,有时我们也会编码其他类型的视频。这些编码的源位于联网 raid 上,截至上面的顶部帖子,该 raid 未写入任何内容,读取速度为 300+Mb/s。目标也是联网 raid,速度不是那么快,但生成的 mpeg 数据比输入数据小得多。

答案1

首先,高端 GPU 会将编码速度提高几个数量级。通常,高端显卡会将渲染时间从几小时缩短到几分钟。您可能需要 NVIDIA GPU。

‘-hwaccel_device[:stream_specifier] hwaccel_device (input,per-stream)’

    Select a device to use for hardware acceleration.

    This option only makes sense when the ‘-hwaccel’ option is also specified. Its exact meaning depends on the specific hardware acceleration method chosen.
    ‘vdpau’

        For VDPAU, this option specifies the X11 display/screen to use. If this option is not specified, the value of the DISPLAY environment variable is used
    ‘dxva2’

        For DXVA2, this option should contain the number of the display adapter to use. If this option is not specified, the default adapter is used. 

此外,你还需要这个 CPU

‘-threads[:stream_specifier] integer (input/output,video)’

    Possible values:

    ‘auto’

        autodetect a suitable number of threads to use 

相关内容