1

https://blogs.oracle.com/roch/entry/does_zfs_really_use_moreで以下を読みました

ZFS がより多くのメモリを消費する原因となる独特のワークロードが 1 つあります。それは、同じく mmap されているページへの (syscall を使用した) 書き込みです。ZFS は、通常のページング システムを使用して、読み取りおよび書き込みシステムコールを通過するデータを管理しません。ただし、仮想メモリ サブシステムに密接に関連付けられている mmaped I/O は、通常のページング コードを通過します。したがって、mmaped ページへの syscall 書き込みは、データをディスクに取得するまで、少なくとも関連データの 2 つのコピーを保持することを意味します。そのタイプの負荷が一般的に大量の RAM を使用するとは思わない

これは正確にはどういう意味ですか?これは、zfs がメモリ マップされたファイルによってバックアップされているメモリ領域を「無用に」二重にキャッシュすることを意味しますか? または、「システムコールを使用する」とは、私がよく知らない他の書き込み方法を使用して書き込むことを意味しますか。もしそうなら、このように書かれたファイルの作業ディレクトリを ufs パーティションに置いたほうがよいでしょうか?

4

1 に答える 1

2

これは、zfs がメモリ マップされたファイルによってサポートされているメモリ領域を「無用に」二重にキャッシュすることを意味しますか?

うまくいけば、いいえ。

または、「システムコールを使用する」とは、私がよく知らない他の書き込み方法を使用して書き込むことを意味しますか。

そのメソッドは、通常の低レベルのwrite(fd, buf, nbytes)システム コールなどであり、メモリ マップ ファイルがサポートするように設計されているものではありません。ポインタを使用してメモリを読み書きするだけでファイル コンテンツにアクセスしたり、ファイル データをバイト配列などとして使用したりします。

もしそうなら、このように書かれたファイルの作業ディレクトリを ufs パーティションに置いたほうがよいでしょうか?

いいえ、システム コールを使用して書き込まれるメモリ マップ ファイルが RAM ワークロードのかなりの部分を占める場合を除きます。

PS: このブログはほぼ 10 年前のものです。その時点から実装に変更があった可能性があります。

于 2016-01-08T08:53:47.493 に答える