目的
HDD などアクセス速度の遅い記憶媒体へのデータの読み書きを行う際に,メモリ上でのデータのキャッシュ量を調整することで,パフォーマンスチューニングを行う.
現状把握
# バックグラウンドでライトバックを行うキャッシュサイズの閾値 (物理メモリに占める割合[%])
$ sudo cat /proc/sys/vm/dirty_background_ratio
5
# フォアグラウンドでライトバックを行うキャッシュサイズの閾値 (物理メモリに占める割合[%])
$ sudo cat /proc/sys/vm/dirty_ratio
10
# ライトバックされるまでのキャッシュの保持時間
$ sudo cat /proc/sys/vm/dirty_expire_centisecs
3000
# キャッシュの経過時間を監視する間隔
$ sudo cat /proc/sys/vm/dirty_writeback_centisecs
500
チューニング
/etc/sysctl.conf
を変更する.
$ sudo vi /etc/sysctl.conf
/etc/sysctl.conf
...
# 最後の行に追加
vm.dirty_background_ratio=10
vm.dirty_ratio=20
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000
設定を反映する.
$ sudo sysctl -p
結果
Before
$ nmon
┌nmon─14g─────────────────────Hostname=cl5──────────Refresh= 1secs ───00:32.56─────────────────────────┐
│ Memory Stats ────────────────────────────────────────────────────────────────────────────────────────│
│ RAM High Low Swap Page Size=4 KB │
│ Total MB 24102.3 -0.0 -0.0 24564.0 │
│ Free MB 193.3 -0.0 -0.0 24564.0 │
│ Free Percent 0.8% 100.0% 100.0% 100.0% │
│ MB MB MB │
│ Cached= 22254.3 Active= 1246.8 │
│ Buffers= 463.8 Swapcached= 0.0 Inactive = 21661.2 │
│ Dirty = 0.2 Writeback = 0.0 Mapped = 68.1 │
│ Slab = 789.0 Commit_AS = 1180.6 PageTables= 12.9 │
│ Network I/O ─────────────────────────────────────────────────────────────────────────────────────────│
│I/F Name Recv=KB/s Trans=KB/s packin packout insize outsize Peak->Recv Trans │
│ eth0 92.0 11.2 88.9 82.9 1059.6 137.9 12012.7 320.7 │
│ lo 0.4 0.4 4.0 4.0 102.8 102.8 10.6 10.6 │
│ Disk I/O ──/proc/diskstats────mostly in KB/s─────Warning:contains duplicates─────────────────────────│
│DiskName Busy Read WriteKB|0 |25 |50 |75 100| │
│sdb 0% 0.0 0.0|> | │
│sda 99% 0.0 623.4|WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW> │
│sdc 0% 0.0 0.0|> | │
│sdd 0% 0.0 0.0| > | │
│sdd1 0% 0.0 0.0| > | │
│sdd2 0% 0.0 0.0|> | │
│sdd3 0% 0.0 0.0|> | │
│sdd5 0% 0.0 0.0|> | │
│Totals Read-MB/s=0.0 Writes-MB/s=0.6 Transfers/sec=68.9 │
│──────────────────────────────────────────────────────────────────────────────────────────────────────│
└──────────────────────────────────────────────────────────────────────────────────────────────────────┘
After
$ nmon
┌nmon─14g─────────────────────Hostname=cl5──────────Refresh= 1secs ───00:57.57──────────────────────────┐
│ Memory Stats ─────────────────────────────────────────────────────────────────────────────────────────│
│ RAM High Low Swap Page Size=4 KB │
│ Total MB 24102.3 -0.0 -0.0 24564.0 │
│ Free MB 210.4 -0.0 -0.0 24564.0 │
│ Free Percent 0.9% 100.0% 100.0% 100.0% │
│ MB MB MB │
│ Cached= 22126.7 Active= 1584.6 │
│ Buffers= 469.5 Swapcached= 0.0 Inactive = 21312.9 │
│ Dirty = 0.1 Writeback = 0.0 Mapped = 66.6 │
│ Slab = 782.6 Commit_AS = 1163.0 PageTables= 12.9 │
│ Network I/O ──────────────────────────────────────────────────────────────────────────────────────────│
│I/F Name Recv=KB/s Trans=KB/s packin packout insize outsize Peak->Recv Trans │
│ eth0 73.5 11.5 79.9 83.9 941.5 139.8 12012.7 465.3 │
│ lo 0.4 0.4 4.0 4.0 102.8 102.8 10.6 10.6 │
│ Disk I/O ──/proc/diskstats────mostly in KB/s─────Warning:contains duplicates──────────────────────────│
│DiskName Busy Read WriteKB|0 |25 |50 |75 100| │
│sdb 0% 0.0 0.0|> | │
│sda 101% 0.0 683.4|WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW> │
│sdc 0% 0.0 0.0|> | │
│sdd 0% 0.0 0.0| > │
│sdd1 0% 0.0 0.0| > │
│sdd2 0% 0.0 0.0|> | │
│sdd3 0% 0.0 0.0|> | │
│sdd5 0% 0.0 0.0|> | │
│Totals Read-MB/s=0.0 Writes-MB/s=0.7 Transfers/sec=82.9 │
│───────────────────────────────────────────────────────────────────────────────────────────────────────│
└───────────────────────────────────────────────────────────────────────────────────────────────────────┘
変わった...?