G
Gelöschtes Mitglied 9001
Gast
Hallo Forum,
wie man einen Ringpuffer implementiert, ist mir klar, schon gefühlt hundertmal gemacht. Nun sind die Bedingungen aber etwas ungünstig: der Puffer soll bis zu einige Gigabyte umfassen (~5GB), der verfügbare Arbeitsspeicher ist < 1GB, Festplatte ist eine Micro-SD-Karte (ja, es ist ein Raspi).
Bei jedem Schreib- und Lesevorgang werden Datenblöcke von ca 1-2 MB in den Puffer eingefügt/herausgeholt. Mein erster Gedanke war natürlich, FileChannel zu verwenden. Dann erinnerte ich mich, dass SD-Karten es nicht so sehr mögen, häufig beschrieben zu werden. Also müßte man wenigstens teilweise den Puffer im Arbeitsspeicher vorhalten.
Die (Audio-)Eingabedaten kommen von einem Audiointerface in schneller Folge in den Puffer. Die Daten werden von einem Server-Prozess aus dem Puffer herausgeholt und an einen Client ausgeliefert, der per Wlan verbunden ist. Diese Verbindung kann sehr gut sein - in dem Fall würden wohl nur einige MB des Ringpuffers belegt sein. Die Verbindung kann aber auch sehr schlecht sein und gelegentlich unterbrochen werden. Für genau diesen Fall muß der Puffer sehr groß sein, um sicherzugehen, dass keine Daten verloren gehen. (Dass die Audiolatenz dann enorm ist, ist richtig, spielt aber bei meinem Anwendungszweck keine Rolle).
Mich würden eure Gedanken dazu interessieren. Ist das mit den SD-Karten immer noch so? Gibt es bereits vorhandene Ansätze für irgendwie geartete zweistufige Ringpuffer, die teils im Ram, teils auf dem Dateisystem agieren?
wie man einen Ringpuffer implementiert, ist mir klar, schon gefühlt hundertmal gemacht. Nun sind die Bedingungen aber etwas ungünstig: der Puffer soll bis zu einige Gigabyte umfassen (~5GB), der verfügbare Arbeitsspeicher ist < 1GB, Festplatte ist eine Micro-SD-Karte (ja, es ist ein Raspi).
Bei jedem Schreib- und Lesevorgang werden Datenblöcke von ca 1-2 MB in den Puffer eingefügt/herausgeholt. Mein erster Gedanke war natürlich, FileChannel zu verwenden. Dann erinnerte ich mich, dass SD-Karten es nicht so sehr mögen, häufig beschrieben zu werden. Also müßte man wenigstens teilweise den Puffer im Arbeitsspeicher vorhalten.
Die (Audio-)Eingabedaten kommen von einem Audiointerface in schneller Folge in den Puffer. Die Daten werden von einem Server-Prozess aus dem Puffer herausgeholt und an einen Client ausgeliefert, der per Wlan verbunden ist. Diese Verbindung kann sehr gut sein - in dem Fall würden wohl nur einige MB des Ringpuffers belegt sein. Die Verbindung kann aber auch sehr schlecht sein und gelegentlich unterbrochen werden. Für genau diesen Fall muß der Puffer sehr groß sein, um sicherzugehen, dass keine Daten verloren gehen. (Dass die Audiolatenz dann enorm ist, ist richtig, spielt aber bei meinem Anwendungszweck keine Rolle).
Mich würden eure Gedanken dazu interessieren. Ist das mit den SD-Karten immer noch so? Gibt es bereits vorhandene Ansätze für irgendwie geartete zweistufige Ringpuffer, die teils im Ram, teils auf dem Dateisystem agieren?