如何優化 Linux 來編碼大量影片或一組相同的 CPU 密集型任務?

如何優化 Linux 來編碼大量影片或一組相同的 CPU 密集型任務?

我有一套 4-5 台機器,幾乎全天都專門編碼視頻,有時甚至整夜。我已經多次搜索以找到為此目的優化它們的方法,但沒有任何成功。

我的前提:我應該能夠使用幾乎所有的 cpu 進行視訊編碼,當且僅當我同時運行多個編碼進程時,我就是這樣。

問題:(來自“頂部”)

任務:總共 382 個,2 個正在運行,380 個正在睡覺,0 個停止,0 個殭屍
%Cpu(s):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 Mem:總計 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                                                                                                                          
12547 根 20 0 473832 23672 5528 S 89.9 0.1 5:40.23                                                                                                                          
 8179 根 20 0 477132 21200 5560 S 89.2 0.1 71:50.15                                                                                                                          
 9059 根 20 0 472776 17960 5540 S 89.2 0.1 48:12.62                                                                                                                          
 9798 根 20 0 477812 16976 5532 S 88.9 0.1 25:23.15                                                                                                                          
 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                                                                                                                          
12915 根 20 0 473732 41888 5516 S 86.6 0.3 5:22.63                                                                                                                          
 8578 根 20 0 476840 24100 5536 S 85.6 0.1 63:17.07                                                                                                                          
 7822 根 20 0 472740 18940 5536 S 85.2 0.1 75:22.04                                                                                                                          
 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                                                                                                                          
 9425 根 20 0 471096 19684 5552 S 82.9 0.1 37:48.28                                                                                                                          
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 的內容,但我沒有清楚地了解我的用例是否更多或更少的交換會更好。這樣可以提高效能嗎?

更多詳細資訊:我包含的頂部機器是運行 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。目的地也是網路攻擊,速度不那麼快,但產生的 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 

相關內容