短期間のファイルはディスクにフラッシュされますか?


9

私のプログラムは、多くの短い短期間のファイルを作成します。通常、作成後1秒以内に削除されます。ファイルは、実際のハードディスクに支えられたext4ファイルシステムにあります。Linuxは定期的にpdflushダーティページをディスクにフラッシュ()することを知っています。私のファイルは存続期間が短いため、おそらくによってキャッシュされませんpdflush。私の質問は、私のプログラムは多くのディスク書き込みを引き起こしますか?私の心配は私のハードディスクの寿命です。

ファイルは小さいので、それらのサイズの合計がdirty_bytesおよびより小さいと仮定しましょうdirty_background_bytes

Ext4ではデフォルトのジャーナルが有効になっています(メタデータジャーナルなど)。また、メタデータとデータのどちらがディスクに書き込まれているかを知りたいです。


>私のプログラムは多くの短い有効期間の短いファイルを作成します。これらのファイルを削除していますか、それともファイルを書き換えていますか?>また、メタデータとデータのどちらがディスクに書き込まれているかを知りたいです。デフォルトのメタデータモードは、データがディスクに書き込まれる前にメタデータがコミットされるという意味で順序付けられていると思います。もちろん、これを変更するために追加できるマウントオプションがあります。>私の質問は、私のプログラムは多くのディスク書き込みを引き起こすのですか?これは、あなたが提供した情報を検討することに対応するのが困難です。iotopsysstatなどのツールを使用してディスクIOを監視することを検討しましたか?
AngryWombat 2013

ReiserFSは、実際にディスクにヒットさせたい場合は小さなファイルに適しています。気にしなくてもtmpfsは問題ありません
xenoterracide

いくつかの明確化:(1)。ext4ファイルシステムはsyncオプションでマウントされていません。デフォルトでインストールされているfedora、debian、ubuntuを検討できます。あなたが選ぶ。(2)。各ファイルは約60KBです。(3)。1秒あたり約1000個のファイルが作成および削除されますが、常に10個を超えるファイルは存在しません。つまり、I / Oスループットは大きくなりますが、占有スペースは小さくなります。
Wu

回答:


5

ext4を使用した簡単な実験:

100MBの画像を作成...

# dd if=/dev/zero of=image bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.0533049 s, 2.0 GB/s

ループデバイスにする...

# losetup -f --show image
/dev/loop0

ファイルシステムを作成してマウント...

# mkfs.ext4 /dev/loop0
# mount /dev/loop0 /mnt/tmp

存続期間の短いファイルで何らかの実行を行います。(これを任意の方法に変更してください。)

for ((x=0; x<1000; x++))
do
    (echo short-lived-content-$x > /mnt/tmp/short-lived-file-$x
     sleep 1
     rm /mnt/tmp/short-lived-file-$x ) &
done

アンマウント、同期、ループ解除。

# umount /mnt/tmp
# sync
# losetup -d /dev/loop0

画像の内容を確認してください。

# strings image | grep short-lived-file | tail -n 3
short-lived-file-266
short-lived-file-895
short-lived-file-909
# strings image | grep short-lived-content | tail -n 3

私の場合は、すべてのファイル名がリストされていますが、ファイルの内容はリストされていません。内容だけは書かれていません。


よい試み。今、私は確信しています。私もext2を試しましたが、あなたと同じ結果が得られました。並列I / Oワークロードをシーケンシャルワークロードに変更し、1つのshort-lived-file-999と8つのshort-lived-content- *を取得しました。誰か説明はありますか?
Wu Yongzheng

@msw:不明な場合に備えて編集。それ以外の場合は詳しく説明してください。
frostschutz 2013

それはばかげています。ファイルは同時に存在し、上書きするものは何もありません。ファイルシステムは削除するとファイルの内容を上書きしないため、パフォーマンスに悪影響を及ぼします。ただし、必ずnbd、トラフィックを使用してログに記録してください(またはすべての書き込みをトレースする同様の方法)。
frostschutz 2013

7

ソリッドステートドライブについて話しているのでない限り、多数のディスク書き込みがドライブの寿命の主要な要因になることはありません。

本当にディスクへの書き込みを避けたい場合は、tmpfsを調べてください。


2
tmpfsは確かにこの場合に適していますが、オペレーティングシステムの一般的な質問として、データがディスクに(不必要に)書き込まれていることを知りたいですか?
Wu

あなたの質問は、決定的な答えを受け取るためにおそらくあなたが考え出すことができるよりもはるかに具体的である必要があるでしょう。バッファキャッシュは、パフォーマンスと永続性の間の複雑なトレードオフを仲介しますが、抽象的には答えられません。リストされている@AngryWombatツールを使用すると、特定のアプリケーションからの実際の書き込みを測定できますが、実行ごとに異なる要因が多数あります。
msw 2013

まあ、ファイルが削除された後に pdflushが来る場合。それを書く必要はないでしょう。
Wu Yongzheng

1

原則として、いいえ、書かれません。これは、次の2つの条件のいずれかが満たされたときにキャッシュがダーティページをフラッシュするためです。

  1. データはの後/proc/sys/vm/dirty_writeback_centisecsに期限切れになり、デフォルトは5秒です。

  2. キャッシュがデータを保持するにはメモリが少なすぎdirty_ratioます。キャッシュ内のダーティページよりも多くなります(デフォルトは20%)。

したがって、十分な空きメモリがあり、5秒未満で削除される小さなファイルを除いて、書き込みトラフィックがほとんどないシステムでは、データはフラッシュされません。


0

存続期間の短いファイルがディスクに書き込まれるかどうかは、カーネルファイルキャッシュのデフォルトの動作だけでなく、ファイルシステムドライバーの実装の詳細と、そのファイルシステムのマウントオプションにも依存します。すべてを常にすぐにディスクに書き込むようにシステムを構成することができます(本質的には、DOSのような動作です)。

XFSは、関心のある動作(いわゆる「遅延割り当て」)を際立たせた1つのファイルシステムです。これにより、中間のディスクアクセスなしで、削除されたファイルに属するブロックがメモリ内で再利用されることが、多かれ少なかれ確実になります(他に面白い設定オプションがない場合)。XFSは、メタデータジャーナル(ディスクに頻繁に書き込まれます)を更新する必要がある場合があります。ただし、XFSのジャーナルはメタデータのみであるため、他の高速デバイス(バッテリーバックアップされたRAMなど)で設定できるほど小さい多くのRAIDコントローラ上で)。

この動作が原因で、完全にゼロになっていることは珍しくありませんが、突然電源が切れた後、XFSファイルシステムで合法的に見えるファイル(サイズやその他のメタデータはそのまま)が表示されます。これは、高速の「半一時的な」ファイル操作をサポートするためのコストです。

いくつかの理論

一般に、ファイルシステムにアクセスするシステムコールは、ファイルシステムドライバーで定義されたメソッド(VFSドライバーの登録時に「struct inode_operations」および「struct file_operations」に添付)でかなり早く終了します。その後の処理は、ファイルシステムの実装の裁量にのみ委ねられます。通常、次のアプローチに似たものが使用されます(この簡単な例はLinux FATドライバーからのものです)。

if (IS_DIRSYNC(dir))
    (void)fat_sync_inode(dir);
else
    mark_inode_dirty(dir);

ファイルシステムが「同期」モードでマウントされている場合、すべての変更は直ちに(この場合はfat_sync_inode()を介して)ディスクに反映されます。そうでない場合、ブロックは「ダーティ」としてマークされ、妥当な機会でフラッシュされるまでメモリキャッシュに残ります。

したがって、ファイルシステムのマウントオプションを考慮せず、その実装のソースコードを検査せずに、一時ファイルに関するシステムの動作を予測することは不可能です(もちろん、これは主に埋め込みスペースにあるすべての種類のエキゾチックファイルシステムに当てはまります)。 。


ご回答有難うございます。ext4も割り当てが遅れているようです。それは私の答えがノーであることを意味しますか?(他の場所ではおかしな設定オプションはありません)。それは、ext2が使用されている場合、私の答えがYESであることも意味しますか?
Wu

現代のカーネルのex​​t2でも、答えはノーだと思います。この特定の問題については多くの議論があり、カーネルソースをざっと見ると、ext2ドライバーは主に「デフォルト」のカーネル操作に依存して処理を行っていることがわかります(したがって、すべてがブロックキャッシュによって遅延されます)。情報を追加して、回答を更新する必要があると思います。
2013

私のext4は明らかにsyncオプションでマウントされていません。私は決してそれをしないだろう。
Wu

iノードをダーティとマークするとき、対応するページをダーティとマークするのはファイルシステムの責任であると思います。後でiノードが削除されると、ファイルシステムはダーティページをクリーンアップしますか?そうでない場合、データは不必要にディスクにフラッシュされます。
Wu Yongzheng

2
未使用のデータブロックは「解放」されるため、ダーティでなくなる。ファイルに何かを書き込んだ後、フラッシュする前にそれを切り捨てた場合、EOFを過ぎたジャンクは消えるだけです。メタデータでは、ファイルシステムのデータ構造の整合性に関してさまざまなトレードオフが存在する可能性があるため、それほど単純ではない場合があります。ところで、常にプラットフォームを完全に制御できることを期待していることは、質問から明らかではありません。ほとんどのアプリケーションは、通常、開発者から離れた、不明な構成のマシンで実行されることになります。
oakad 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.