Wie kann ich Linux für das Kodieren vieler Videos oder mehrerer CPU-intensiver Aufgaben optimieren?

417
markjwill

Ich habe ein Set von 4-5 Geräten, die fast ausschließlich den ganzen Tag und manchmal auch die ganze Nacht Videos verschlüsseln. Ich habe oft nach Möglichkeiten gesucht, um sie für diesen Zweck zu optimieren, hatte aber keinen Erfolg.

Meine Prämisse: Ich sollte in der Lage sein, beinahe die gesamte CPU für die Videocodierung zu verwenden, wenn und nur dann, wenn ich mehrere Codierungsvorgänge gleichzeitig ausführte, was ich bin.

Das Problem: (von 'oben')

Aufgaben: 382 insgesamt, 2 Laufen, 380 Schlafen, 0 gestoppt, 0 Zombie % 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 insgesamt, 16171664 verwendet, 254016 frei, 30492 Puffer KiB Swap: 16769020 insgesamt, 406056 verwendet, 16362964 kostenlos. 15198692 zwischengespeichertes Mem  PID USER PR NI VIRT RES SHR% CPU% MEM TIME + COMMAND  31308 root 20 0 486568 26000 5560 S 92,2 0,2 ​​188: 10,72 avconv  10340 Wurzel 20 475832 19920 5532 S 91,2 0,1 13: 40,42 avconv  12547 Wurzel 20 473832 23672 5528 S 89,9 0,1 5: 40,23 avconv  8179 root 20 477132 21200 5560 S 89,2 0,1 71: 50,15 avconv  9059 root 20 0 472776 17960 5540 S 89,2 0,1 48: 12,62 avconv  9798 root 20 477812 16976 5532 S 88,9 0,1 25: 23,15 avconv  8725 wurzel 20 476068 21696 5560 S 87,2 0,1 62: 12,02 avconv  12657 root 20 472332 22012 5524 S 86,9 0,1 6: 21,28 avconv  12915 Wurzel 20 473732 41888 5516 S 86,6 0,3 5: 22,63 avconv  8578 root 20 0 476840 24100 5536 S 85,6 0,1 63: 17,07 avconv  7822 root 20 0 472740 18940 5536 S 85,2 0,1 75: 22,04 avconv  9948 wurzel 20 0 485420 18116 5560 S 84,9 0,1 22: 18,23 avconv  7356 root 20 476744 20084 5560 S 84,6 0,1 92: 31,91 avconv  9425 wurzel 20 471096 19684 5552 S 82,9 0,1 37: 48,28 avconv  12464 root 20 0 475004 24304 5532 R 81.6 0,1 6: 30.16 avconv  

Trotz der Codierung von 14 verschiedenen Videodateien liegt die CPU-Auslastung bei nur 50-55%. Wenn ich weniger Streams auf einmal laufe, werden die einzelnen Streams zu ca. 400% CPU ausgeführt, wobei sie, wie oben abgebildet, nur ca. 80-90% CPU benötigen.

Dies ist das einzige, was ich mit dieser Box erreichen möchte. Ist es möglich, die CPU-Leistung stärker zu nutzen, oder ist meine Prämisse fehlerhaft?

Ich habe bisher mit Renice experimentiert, völlig wirkungslos. Ich habe NI auf -20 und 19 gesetzt, da es weder insgesamt noch für einzelne Codierungen mehr oder weniger CPU-Auslastung gab.

Ich habe etwas über vm.swappiness gelesen, aber ich habe kein klares Verständnis für meinen Anwendungsfall, wenn mehr oder weniger Swappiness besser wäre. Könnte dies die Leistung steigern?

Weitere Details: Die Maschine, von der ich die Top-Software habe, ist ein Dell R900 mit Ubuntu 14.04. cat /proc/cpuinfolistet 16 Intel (R) Xeon (R) -Prozessor E7330 mit 2,40 GHz-Prozessoren und cat /proc/meminfo16 GB RAM auf. Die anderen Maschinen in der Gruppe sind ähnlich und zeigen dasselbe Verhalten. Alle diese Kodierungen sind DV-Videos in MPEG2-Videos. Manchmal kodieren wir auch andere Arten von Videos. Die Quelle für diese Kodierungen befindet sich in einem Netzwerk-Raid, der nichts wie in dem oberen Beitrag oben schreibt und Lesegeschwindigkeiten von 300 + Mb / s erhält. Das Ziel sind auch vernetzte Raids, nicht ganz so schnell, aber die resultierenden MPEG-Daten sind viel kleiner als die Eingabedaten.

0
Ihr System verwendet in Ihrem obigen Beispiel mehr als 90% CPU. `9.6 id` = 9.6% Leerlauf. yoonix vor 8 Jahren 0
@yoonix wow, ich fühle mich ein bisschen dumm, nachdem ich so viel des Tages angestarrt habe ... Ich denke, meine eigentliche Frage sollte vielleicht sein, warum meine "sy" (System) -Benutzung bei 36% liegt ... Ich muss darüber nachdenken das und vielleicht eine neue Frage stellen. Vielen Dank markjwill vor 8 Jahren 0
Ich vermute, es liegt wahrscheinlich daran, dass es so viele Kopien gibt (oder noch schlimmer gemacht). Ich habe avconv noch nie verwendet, aber ein kurzer Blick in die Dokumentation lässt mich vermuten, dass die Option -threads Ihrer ursprünglichen Ausgabe helfen wird. Wenn Sie wirklich herausfinden möchten, was die System-CPU ist [dieser Blogbeitrag] (https://newspaint.wordpress.com/2013/07/24/how-to-diagnose-high-sys-cpu-on-linux/ ) kann Sie wahrscheinlich anfangen. yoonix vor 8 Jahren 0
Ich vermute, dass Ihre kombinierte Festplatten- und Netzwerknutzung * irgendwann der Engpass sein wird. Entfernen Sie einige Aufgaben und prüfen Sie, ob die CPU-Auslastung drastisch abnimmt. jcoppens vor 8 Jahren 0

1 Antwort auf die Frage

0
cybernard

Zunächst wird eine High-End-GPU die Codierung um Größenordnungen steigern. Normalerweise reduziert eine High-End-Grafikkarte das Rendern von Stunden auf Minuten. Möglicherweise benötigen Sie eine 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.  

Außerdem benötigen Sie diese für die CPU

‘-threads[:stream_specifier] integer (input/output,video)’  Possible values:  ‘auto’  autodetect a suitable number of threads to use