Varnishは、mlock()を介してメモリに書き込まれる〜80 MBのファイルベースのSHMログを使用するHTTPアクセラレータです。これ光沢文書不要なディスクアクセスを避けるために、tmpfsにファイルを保存することをお勧めします。しかし、ファイル全体がメモリにロックされている場合、Linuxカーネルはまだバックアップファイルに書き込むことができますか?
私はこれを監視するためにinotifyとfatraceを使ってみましたが、この相互作用はおそらくカーネル内で起こるので、これらのツールにはファイルアクティビティはまったく表示されません。 lsを使用してバックアップファイルを監視すると、ファイルの時間の変更が表示され、sha1sumは内容の変更が表示されるため、ファイルやファイルシステムに何らかの更新があったようです。しかし、実際にはディスクアクセスが含まれていますか、それともこのすべてがメモリで発生しますか?
デフォルトでは、SHMを使用してSHMをサポートすることは、存在しない可能性がある問題に対する醜い回避策のように見えるため、tmpfs回避策を実行しないようにします。
答え1
Varnishは、共有メモリに(POSIXではなくshm_open
)通常のメモリマッピングファイルを使用しているようです。 ~から源泉:
loghead = mmap(NULL, heritage.vsl_size,
PROT_READ|PROT_WRITE,
MAP_HASSEMAPHORE | MAP_NOSYNC | MAP_SHARED,
heritage.vsl_fd, 0);
BSDは、MAP_NOSYNC
強制的に(メモリを解放した場合など)、共有データをディスクに書き込まないようにカーネルに要求します。ロックされている場合、これはほとんど起こりません。残念ながら、LinuxではサポートされていませんMAP_NOSYNC
。
したがって、Linuxはキャッシュからディスクへダーティ(変更された)ページを定期的に記録します。 tmpfsにキャッシュを配置すると、これを防ぐことができます。 POSIXまたはSysV共有メモリを使用するVarnishの場合も同様です(実際には、POSIX共有メモリはLinuxで実装され、そこにtmpfsがインストールされているので、/dev/shm
tmpfsを使用することをお勧めします)。