0

私はここに古いマシンで実行される小さなプログラム(python 2.7)を持っています、そしてそれは基本的に外部バイナリを実行することによって(タイムラプスのために)写真を取得し続け、ディスクスペースを節約するためにそれらを効率的なフォーマットに変換します。

ディスク操作はすでにかなり古く、もう少し長持ちさせたいので、最小限に抑えたいと思います。

この時点で、プログラムはカメラからディスクにデータを書き込み、それを変換して元のデータを削除します。ただし、すべてのイメージに対してそれを行います。1-ディスクに大きなファイルを書き込み、2-変換するために読み取り、3-そして削除します...不要でRAMで実行できる一連のディスク操作、元のファイルを保存する必要はなく、別のファイルを作成するための基礎としてのみ使用されるためです。

私はramdiskが解決策であると確信していました、そしてそれを行う方法をグーグルで調べました、そしてグーグルは私にramdiskの使用を思いとどまらせるたくさんのリンクを返しました、理由はたくさんあります:それらは現代のシステムでは役に立たないからです(私はかなり新しいLinuxカーネルを実行している); これらは、ディスクにヒットしてはならないデータを復号化する場合にのみ使用する必要があります。一部のテストでは、ramdiskが実際にはhdよりも遅い可能性があることが示されています。オペレーティングシステムにはキャッシュがあります。

だから私は混乱しています...

この状況では、RAMディスクを使用する必要がありますか?

ありがとうございました。

PS:詳細が必要な場合:独自の高解像度カメラと、単一の画像をキャプチャするために実行する独自のバイナリがあります。巨大なTIFFファイルであるファイルを書き込む場所を指定してから、 pythonプログラムは、imagemagickからの変換プログラムを実行してJPEGに変換し、tar.bz2で圧縮するため、品質はほぼ同じですが、ファイルサイズはTIFFの1/50です。

4

3 に答える 3

2

ramdisksでの私の経験は、あなたがここで述べたことと一致しています。カーネルがインテリジェントにキャッシュを実行するために使用できるメモリが少なく、混乱していたため、それらに移動するとパフォーマンスが低下しました。

ただし、あなたの質問から、速度ではなくディスク操作の数を最適化する必要があることを理解しています。その場合、RAMディスクが理にかなっている可能性があります。これらの種類の問題のほとんどと同様に、監視はそれを行う正しい方法です。

もう1つ印象に残ったのは、元の画像がそれほど大きくない場合は、安価なUSBスティックを購入して、メインドライブではなくその上でI/Oを実行することをお勧めします。それはオプションではありませんか?

于 2011-11-28T16:25:19.380 に答える
0

ああ、特定のオプションのみを提供する独自のバイナリ。わーい。最も簡単な解決策は、ソリッドステートハードドライブを追加することです。引き続きディスクに保存しますが、ディスクIOは読み取りと書き込みではるかに高くなります。

より良い解決策は、おそらく別の形式でtiffをstdoutに出力し、それをPythonプログラムにパイプすることです。ハードドライブにまったくヒットすることはありませんが、より多くの作業が必要になります。もちろん、バイナリでこれができない場合は、意味がありません。

于 2011-11-28T16:38:25.377 に答える
0

Debian(および場合によってはその派生物)の場合は、「/ run/shm」ディレクトリを使用します。

于 2014-06-12T09:34:52.507 に答える