2017-02-28 1 views
2

Wir erstellen ein Python-Framework, das Daten von einer Framegrabber-Karte über eine cffi-Schnittstelle erfasst. Nach einiger Manipulation versuchen wir, RAW-Bilder (numpy Arrays mit der Tofile-Methode) mit einer Geschwindigkeit von etwa 120 MB/s auf die Festplatte zu schreiben. Wir sind uns bewusst, dass Festplatten diesen Durchsatz bewältigen können.Machen Sie Python-Prozess-Schreibvorgänge für sofortiges Schreiben geplant, ohne dass sie als fehlerhaft markiert werden.

Das Problem, das wir erlebten, war ausgelassene Frames, oft ganze Sekunden von Daten komplett fehlen von der Framegrabber-Ausgabe. Was wir fanden, war, dass diese Framedrops auftraten, als unser Debian-System das in sysctl gesetzte dirty_background_ratio traf. Das System rief die bündige Hintergrundgruppe an, die den Framegrabber überhäufte und Frames übersprang. So

Nicht überraschend, die dirty_background_ratio auf 0% Einstellung verwalten vollständig aus dem Problem loszuwerden (Feststellung Es ist erwähnenswert, dass selbst kleine Zahlen wie 1% und 2% nach wie vor in Folge ~ 40% Rahmenverlust)

Meine Frage ist, gibt es eine Möglichkeit, diesen Python-Prozess so zu schreiben, dass er sofort für das Ausschreiben geplant wird und den Dirty-Buffer vollständig umgeht?

Dank

Antwort

0

So Heres eine Möglichkeit, die ich es geschafft habe.

Mit dem numpy memmap-Objekt können Sie ein Array instanziieren, das direkt mit einem Teil des Datenträgers übereinstimmt. Der Aufruf der Methode flush() oder pythons del bewirkt, dass das Array mit dem Datenträger synchronisiert wird, wobei der Puffer des Betriebssystems vollständig umgangen wird. Ich habe ~ 280GB mit dieser Methode bei maximalem Durchsatz erfolgreich auf Platte geschrieben.

Wir werden weiter forschen.

Verwandte Themen