RAIDコントローラーの背後に適度に高速なHDDを搭載したSolarisExpress 11マシンをセットアップし、デバイスを圧縮を有効にしたzpoolとしてセットアップし、ミラーログと2つのキャッシュデバイスを追加しました。データセットはESXで使用するためのFCターゲットとして公開されており、試してみるデータをいくつか入力しました。 L2ARCは部分的にいっぱいになりました(そして何らかの理由でもういっぱいになりませんでした)が、私はそれの使用をほとんど見ていません。 zpool iostat -v
は、過去にキャッシュからあまり読み取られていないことを示しています。
tank 222G 1.96T 189 84 994K 1.95M
c7t0d0s0 222G 1.96T 189 82 994K 1.91M
mirror 49.5M 5.51G 0 2 0 33.2K
c8t2d0p1 - - 0 2 0 33.3K
c8t3d0p1 - - 0 2 0 33.3K
cache - - - - - -
c11d0p2 23.5G 60.4G 2 1 33.7K 113K
c10d0p2 23.4G 60.4G 2 1 34.2K 113K
L2ARC対応のarcstat.pl スクリプトは、現在のワークロードでL2ARCの100%のミスを示しています。
./arcstat.pl -f read,hits,miss,hit%,l2read,l2hits,l2miss,l2hit%,arcsz,l2size 5
read hits miss hit% l2read l2hits l2miss l2hit% arcsz l2size
[...]
243 107 136 44 136 0 136 0 886M 39G
282 144 137 51 137 0 137 0 886M 39G
454 239 214 52 214 0 214 0 889M 39G
[...]
最初に、L2ARCがすべてをストリーミング負荷として認識するように レコードサイズが大きすぎる の影響である可能性があると考えましたが、zpoolにはzfsボリュームしか含まれていません(私はそれらを「スパース」として作成しました) zfs create -V 500G -s <datasetname>
)変更するレコードセットパラメータすらありません。
また、メタデータにレコードごとに200バイトのRAMを必要とするL2ARCに関する多くの概念を見つけましたが、これまでのところ、L2ARCがボリュームデータセット(512バイトの単一セクター)を持つ「レコード」と見なすものを見つけることができませんでした? RAMメタデータの不足に悩まされていて、今のところ二度と読まれないがらくたでいっぱいになっているのではないでしょうか。
編集:インストール済みの2GBの上に8GBのRAMを追加するとうまくいきました-追加のRAMは幸いです32ビットインストールでも使用され、L2ARCは成長し、ヒットしています。
time read hit% l2hit% arcsz l2size
21:43:38 340 97 13 6.4G 95G
21:43:48 185 97 18 6.4G 95G
21:43:58 655 91 2 6.4G 95G
21:44:08 432 98 16 6.4G 95G
21:44:18 778 92 9 6.4G 95G
21:44:28 910 99 19 6.4G 95G
21:44:38 4.6K 99 18 6.4G 95G
おかげで ewwhite 。
システムにはもっとRAMが必要です。L2ARCへのポインタはRAM(ARC)に保持する必要があるので、約4GBまたは6GBのRAMは、利用可能な最大60GBのL2ARCをより有効に活用します。
これは、ZFSリストの最近のスレッドからのものです。
http://opensolaris.org/jive/thread.jspa?threadID=131296
L2ARC is "secondary" ARC. ZFS attempts to cache all reads in the ARC
(Adaptive Read Cache) - should it find that it doesn't have enough space
in the ARC (which is RAM-resident), it will evict some data over to the
L2ARC (which in turn will simply dump the least-recently-used data when
it runs out of space). Remember, however, every time something gets
written to the L2ARC, a little bit of space is taken up in the ARC
itself (a pointer to the L2ARC entry needs to be kept in ARC). So, it's
not possible to have a giant L2ARC and tiny ARC. As a rule of thumb, I
try not to have my L2ARC exceed my main RAM by more than 10-15x (with
really bigMem machines, I'm a bit looser and allow 20-25x or so, but
still...). So, if you are thinking of getting a 160GB SSD, it would be
wise to go for at minimum 8GB of RAM. Once again, the amount of ARC
space reserved for a L2ARC entry is fixed, and independent of the actual
block size stored in L2ARC. The jist of this is that tiny files eat up
a disproportionate amount of systems resources for their size (smaller
size = larger % overhead vis-a-vis large files).