2017-03-03 18 views
3

ディスク上にデータをキャッシュする必要があるソフトウェアを書くとき、libcや特定のファイルシステム(ext4など)に固有の方法でファイルを作成し、それを自動的に削除するのに適しているとフラグを立てる方法があるかパーティションがほとんどいっぱいになると(カーネルによって)?libc(全ファイルシステム)またはext4でパーティションがほぼ満杯になったときに自動的に削除されるキャッシュファイルを作成しますか?

メモリページには、類似のものがあります。madvise(…, MADV_FREE)です。

一部のシステムでは、パーティションが満杯になったことを監視し、一定のレベルを超えると特定の事前定義済みパスを手動で削除するデーモンを作成することによって、これを実現します。可能であれば、これを避けたいのですが、スケーラビリティがあまり高くありません。各アプリケーションは、デーモンに新しいキャッシュパスが作成されたことを頻繁に通知する必要があります。これがカーネル内の場合、キャッシュファイルかどうかを示す単一のフラグを各iノードに保持することができます。

このために標準化されたデーモンを使用することもできます。現時点では、主要なシステムインテグレータのすべてが独自のものを発明しているようです。

+1

これは存在しないと思います。しかし、カーネル内のソリューションはユーザー空間デーモンよりも拡張性が良いと思いますか?確かに、おそらく少し速いですが、私はなぜそれが*スケール違うのか分かりません。ファイルシステムがいっぱいになったときに遅すぎることに気づいたら、[fanotify](http://man7.org/linux/man-pages/man7/fanotify.7.html)をチェックしてください。 – Phillip

+0

@ Philips:ほとんどのシステムでは、「fanotify」は、1秒ごとまたは何かをポーリングするだけでなく、CPU負荷が非常に大きくなると思います。たいていはアイドル状態のファイルシステムがたくさんある場合を除きます。私はあなたがイベントの全体のバッファーを実際に歩かずに 'fanotify'を使うことができると思います。活動のない期間に眠る方法と同じように。しかし、私は活動中に、カーネルにfanotifyバッファへの書き込みを強制すると、データを見ていなくても非ゼロのオーバーヘッドがあると思います。 –

+0

私は質問の中で私が「スケーラブル」を意味するものを拡張しました。 –

答えて

-1

crontabジョブを使用して、特定のファイル拡張子を探して削除することができます。時間に基づいてフィルタリングすることもでき、最後のn分間にファイルを作成したままにすることもできます。 これで問題なければ、私に教えてください。私はここに詳細を追加します。

+0

これは、ファイルシステムが満杯かどうか定期的にポーリングすることを含むかなり恐ろしい解決策です。これは、ファイルシステムがカーネルレベルでいっぱいになることによって引き起こされるべき機能です。 –

関連する問題