ZFSテクニカルコラム:第十二回:ARCが公開されました
皆さま、こんにちは。吉政創成の吉政でございます。弊社のお客様であるコアマイクロシステムズ様がメールマガジンを発行されました。そこで連載されている人気の初心者向けZFSコラムがありますので、ここでもご紹介します。
なお、メルマガでは、NexentaStor搭載アプライアンスの「Prime STOR」や30万IOPSの「Super SSD」、「Super CACHE」、高信頼高速ファイル共有NAS「NetCluSTOR」のマイナーチェンジをお伝えしています。メルマガの全文は以下をご覧ください。
◆◆>[ テクニカルコラム:かんたん♪ ZFS ]<◆◆◆◆◆◆◆◆◆◆◆◆
第十二回:ARC
◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇◇
こんにちは。今年もいよいよ終わりが近づきました。あたらしい年がみな
さんにとって良い年であるようお祈りいたします。
このコラムでは実際に ZFS を使う上で役に立つ Tips を紹介します。
今までのファイルシステムとは一味違う ZFS を活用して面倒なファイル
管理の苦労を減らしましょう!
-------------------------------------------------------------------
パフォーマンス改善を行う時、負荷に対して処理能力を持て余している部
分を補強してもほとんど改善は望めません。一方、処理能力を目一杯使っ
ている部分を補強すると、大きな改善を期待することができます。
今回は ARC (Adaptive Replacement Cache) について説明します。ZFS は
IBM が考案したARC を元にしたキャッシュアルゴリズムを採用しています。
以下のウェブページの図は ZFS の階層構造を説明したもので、ARC は
Pooled Storage Layer 上のモジュールとして実装されています。
http://hub.opensolaris.org/bin/view/Community+Group+zfs/source
キャッシュ領域はメインメモリ上に確保されます。 ARC は物理メモリの
3/4 を上限に、可能な限りデータをキャッシュします。もし、OS 全体の
メモリが不足した場合は、キャッシュデータを捨てメモリを解放します。
パフォーマンスに大きな影響を与える機構ですので、 ARC の動作状況を
調べることは大変重要です。
ARC の動作状況をモニタするスクリプトを二つ紹介しましょう。
(1) arc_summary.pl (http://www.cuddletech.com/arc_summary.pl)
このスクリプトは ARC の統計情報を印字します。上の URL からダウ
ンロードし実行権を与えてください。以下のウェブページに実行例が
あります。
http://cuddletech.com/arc_summary/
[System Memory]
Physical RAM : 物理メモリ容量
Free Memory : 未使用メモリ容量
LotsFree : lotsfree カーネルパラメータ
[ARC Size]
Current Size : ARC で使用しているメモリ容量
Target Size : ターゲットサイズ
Min Size : zfs_arc_min で指定された ARC の最小サイズ
Max Size : zfs_arc_max で指定された ARC の最小サイズ
[ARC Size Breakdown]
Most Recently Used Cache Size :
Most Frequently Used Cache Size :
ARC は MRU と MFU の二つのキャッシュ領域を持ち、キャッシュエ
ントリのヒットに応じて、それぞれのキャッシュ領域の大きさを変
えます。ここでは MRU と MFU の割合がパーセンテージで印字され
ています。
[ARC Efficency]
Cache Access Total : キャッシュへのアクセス回数
Cache Hit Ratio : キャッシュヒット率
Cache Miss Ratio : キャッシュミス率
REAL Hit Ratio : MRU と MFU のキャッシュヒット率
最初の Cache Hit Ratio には MRU と MFU へのヒット以外に、
MRU Ghost、MFU Ghost へのヒットも含まれています。REAL Hit
Ratio は MRU と MFU のみのキャッシュヒット率です。
Data Demand Efficiency :
Data Prefetch Efficiency :
ZFS にはファイルレベルでのプリフェッチ機構 zfetch が実装され
ています。実際に要求されたデータのキャッシュヒット・ミス比が
Data Demand Efficiency です。 プリフェッチしたデータのキャッ
シュヒット・ミス比が Data Prefetch Efficiency です。
CACHE HITS BY CACHE LIST:
Anon : 新しいキャッシュエントリ
Most Recently Used : MRU ヒット回数
Most Frequently Used : MFU ヒット回数
Most Recently Used Ghost : MRU ゴーストヒット回数
Most Frequently Used Ghost : MFU ゴーストヒット回数
ARC はキャッシュデータを削除した後も MRU、MFU それぞれに、
ゴーストリストを用意し、削除済みデータへのヒットが無いかを
確認します (MRU ゴースト、MFU ゴーストヒット回数)
CACHE HITS BY DATA TYPE:
Demand Data : デマンドデータにヒットした割合
Prefetch Data : プリフェッチデータにヒットした割合
Demand Metadata : デマンドメタデータにヒットした割合
Prefetch Metadat : プリフェッチメタデータにヒットした割合
CACHE MISSES BY DATA TYPE:
Demand Data : デマンドデータでミスした割合
Prefetch Data : プリフェッチデータでミスした割合
Demand Metadata : デマンドメタデータでミスした割合
Prefetch Metadat : プリフェッチメタデータでミスした割合
(2) arcstats.pl (http://blogs.sun.com/realneel/resource/arcstat.pl)
arc_summary.pl と同じデータを扱いますが、 指定された秒数毎の統
計を印字します。以下のように実行すると 5 秒おきに印字されます。
------------------------------------------------------------------
# ./arcstat.pl 5
Time read miss miss% dmis dm% pmis pm% mmis mm% arcsz c
21:16:27 151K 5K 3 4K 2 1K 32 2K 5 209M 1G
21:16:28 1 0 0 0 0 0 0 0 0 209M 1G
21:16:29 0 0 0 0 0 0 0 0 0 209M 1G
21:16:30 0 0 0 0 0 0 0 0 0 209M 1G
21:16:31 0 0 0 0 0 0 0 0 0 209M 1G
21:16:32 0 0 0 0 0 0 0 0 0 209M 1G
21:16:33 0 0 0 0 0 0 0 0 0 209M 1G
21:16:34 0 0 0 0 0 0 0 0 0 209M 1G
21:16:35 14 0 0 0 0 0 0 0 0 209M 1G
21:16:36 38 0 0 0 0 0 0 0 0 209M 1G
21:16:37 22 0 0 0 0 0 0 0 0 209M 1G
# ./arcstat.pl -v
Arcstat version 0.1
Usage: arcstat.pl [-hvx] [-f fields] [-o file] [interval [count]]
Field definitions are as follows
dread : Demand data accesses per second
Time : Time
pmis : Prefetch misses per second
pm% : Prefetch miss percentage
mtxmis : mutex_miss per second
arcsz : Arc Size
mm% : Metadata miss percentage
mrug : MRU Ghost List hits per second
hits : Arc reads per second
mfu : MFU List hits per second
mh% : Metadata hit percentage
read : Total Arc accesses per second
Hit% : Arc Hit percentage
rmis : recycle_miss per second
mmis : Metadata misses per second
mhit : Metadata hits per second
dmis : Demand Data misses per second
mru : MRU List hits per second
ph% : Prefetch hits percentage
eskip : evict_skip per second
c : Arc Target Size
mfug : MFU Ghost List hits per second
miss% : Arc miss percentage
miss : Arc misses per second
dm% : Demand Data miss percentage
dh% : Demand Data hit percentage
dhit : Demand Data hits per second
phit : Prefetch hits per second
mread : Metadata accesses per second
pread : Prefetch accesses per second
------------------------------------------------------------------
これらの情報を見て注意しなければいけないのは MRU と MFU へのヒット
数と、ゴースト MRU と ゴースト MFU へのヒット数です。 もし、ゴース
トのヒット数が多い時は、一度はキャッシュから追い出されたものの、再
びヒットしたということです。このような場合はメモリを増やすことで、
より一層 ARC が効果的に働く可能性があります。
一方で、メモリを増やすと、CPU 負荷が大きくなります。メモリを増やす
場合は CPU リソースが逼迫していないことを確認してください。
今回のコラムでは、ARC の統計情報の収集方法を紹介させていただきまし
た。次回は圧縮と重複排除について紹介します。