Wie kann ich Linux für das Kodieren vieler Videos oder mehrerer CPU-intensiver Aufgaben optimieren?
451
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.
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.
Ihr System verwendet in Ihrem obigen Beispiel mehr als 90% CPU. `9.6 id` = 9.6% Leerlauf.
yoonix vor 9 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 9 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 9 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 9 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