2017-02-28 48 views
2

我們正在構建一個python框架,通過cffi接口捕獲framegrabber卡中的數據。經過一些操作後,我們試圖用大約120 MB/s的速率將RAW圖像(使用tofile方法的numpy數組)寫入磁盤。我們很清楚磁盤是否能夠處理這個吞吐量。使python進程寫入計劃立即回寫,而不被標記爲髒

我們遇到的問題是丟幀,經常是從framegrabber輸出中完全丟失的整秒數據。我們發現當我們的Debian系統碰到sysctl中設置的dirty_background_ratio時,這些框架就會出現。該系統正在調用沖洗背景黑幫,將窒息幀抓取器並導致它跳過幀。

毫不奇怪,設置dirty_background_ratio爲0%設法擺脫完全的問題(值得注意的是,即使像1%和2%的小數字仍然導致〜40%的幀丟失)

所以,我的問題是,有沒有辦法讓python進程以這樣的方式寫入,即立即安排寫入操作,完全繞過髒緩衝區?

謝謝

回答

0

所以繼承人的一種方法,我設法做到了。

通過使用numpy memmap對象,可以實例化一個與磁盤的一部分直接對應的數組。調用方法flush()或python的del會導致數組同步到磁盤,完全繞過操作系統的緩衝區。我已經使用這種方法以最大吞吐量成功將〜280GB寫入磁盤。

將繼續研究。

相關問題