
たくさんのトレント ファイルをダウンロードしましたが、シード中に、ブラウザーを起動すると速度が遅くなり、ハード ディスク アクティビティ インジケーターがオンになることがよくあることに気付きました。通常、プログラムを起動すると RAM にキャッシュされ、再起動は非常に高速です。また、3 GB の RAM があるため、通常はキャッシュがほぼ永久に残ります。しかし、トレント クライアントがシードすると、1 時間後には実行したプログラムが RAM にキャッシュされなくなるようです。
おそらく、トレント クライアントが実行するディスク読み取りがキャッシュされ、最終的に RAM がいっぱいになるからだろうと考えていました。しかし、一度だけ読み取られ、すぐに再び読み取られる可能性は低いため、キャッシュする必要はないと思います。
そこで私の質問は、これが私の考えなのか、もしそうなら、原理的にはディスク読み取りがキャッシュされるのを防ぐことは可能か、ということです。プログラムのソース コードを編集してみることはできます。
答え1
正確には、どのトレント プログラムを使用しているかによって異なります。一部のトレント プログラムでは、動作が異なる場合があります。
ただし、これはよくある問題なので、システム キャッシュをバイパスすることは可能です。
ソースの編集に慣れている場合は (おそらくこれは別の StackExchange にあるはずです...)、torrent プログラムがディスクからファイルを開く場所を見つけます。おそらく open() 呼び出しです。fdopen() の場合は stdlib が使用されていますが、stdlib が直接 I/O をサポートしているかどうかはわかりません。
このシステム コールは最大 3 つの引数を取ります。最初の引数はファイル名、2 番目はフラグ、3 番目はオプションのファイル作成マスクです。フラグはO_RDWR
現時点ではおそらく次のようになります。「システム キャッシュを使用しない」というフラグは でO_DIRECT
、フラグは で区切って組み合わせます|
。
したがって、この場合の flags 引数の結果は になりますO_RDWR | O_DIRECT
。新しいフラグを追加するだけです。
詳細については、
man 2 open
答え2
ブラウザを閉じないでください:)
I/O キャッシュ (ファイルへの書き込みではなく読み取り専用) が過剰であっても、プログラムが使用しているページがスワップアウトされることはありません。