gjournal を用いて restore を高速化2008年02月06日 20時24分45秒

gjournal を切り離す実験は成功した。つまり、一時的に大量の IO を裁かないといけない状況で gjournal を cache がわりにできるということだ。

その様な状況の一つに、restore があげられる。restore でファイルシステムを戻す時には、大量の IO を発生するが一度終わってしまえば、大したことは起きない。

今回のシステムは、AMD のディアルコア。メモリは 1GB 入っている。そして、dump ファイルは、USB の外付け HDD に gzip されて置いてある。

まずは、旧来の restore のやり方。途中で失敗してもやり直せるので、softupdate よりも高速な async でマウントする。また、gzip がボトルネックにならないように、buffer を挟んで restore がブロックされにくい様にする。


# newfs /dev/ad4s3e
/dev/ad4s3e: 10240.0MB (20971520 sectors) block size 16384, fragment size 2048
        using 56 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.
super-block backups (for fsck -b #) at:
 160, 376512, 752864, 1129216, 1505568, 1881920, 2258272, 2634624, 3010976,
 3387328, 3763680, 4140032, 4516384, 4892736, 5269088, 5645440, 6021792,
 6398144, 6774496, 7150848, 7527200, 7903552, 8279904, 8656256, 9032608,
 9408960, 9785312, 10161664, 10538016, 10914368, 11290720, 11667072, 12043424,
 12419776, 12796128, 13172480, 13548832, 13925184, 14301536, 14677888,
 15054240, 15430592, 15806944, 16183296, 16559648, 16936000, 17312352,
 17688704, 18065056, 18441408, 18817760, 19194112, 19570464, 19946816,
 20323168, 20699520
# mount -oasync /dev/ad4s3e /backup
# gzip -d -c ports.dump0.gz | buffer -m20M | ( cd /backup/ ; time restore -r -f
- )
warning: ./.snap: File exists
4.070u 26.572s 7:07.55 7.1%     117+1469k 19210+21095io 3pf+0w

今度は、gjournal を併用。500MB のスワップ型 md デバイスを作成し、これをジャーナル用デバイスとする。後の行程は大して変わらない。


# mdconfig -a -t swap -s 500M
md1
# gjournal label -f /dev/ad4s3e /dev/md1
/dev/ad4s3d.journal: 5120.0MB (10485756 sectors) block size 16384, fragment size
 2048
        using 28 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.
super-block backups (for fsck -b #) at:
 160, 376512, 752864, 1129216, 1505568, 1881920, 2258272, 2634624, 3010976,
 3387328, 3763680, 4140032, 4516384, 4892736, 5269088, 5645440, 6021792,
 6398144, 6774496, 7150848, 7527200, 7903552, 8279904, 8656256, 9032608,
 9408960, 9785312, 10161664

# gjournal stop /dev/ad4s3d.journal
# mount -oasync /dev/ad4s3e.journal /backup
# gzip -d -c ports.dump0.gz | buffer -m20M | ( cd /backup/ ; time restore -r -f
- )
warning: ./.snap: File exists
4.285u 28.503s 6:22.83 8.5%     110+1377k 19752+21112io 4pf+0w

gjounral を加えることにより、7 分 7 秒が 6 分 22 秒に短縮された。約 10% 程の高速化になっている。もう少し、早くなるかと期待したが、今回はそこまでは無理だったようだ。

もう一度、gjournal を試してみた。buffer をもう一つ付け足した。これにより若干良くなった。


# buffer -m10M < ports.dump0.gz | gzip -d -c  | buffer -m15M | ( cd /backup/ ; t
ime restore -r -f - )
4.525u 27.553s 6:05.51 8.7%     109+1368k 19953+21076io 322pf+0w

gstat -a で様子を見た感じでは、md デバイスを 1GB ぐらい用意できれば、まだまだ早くなる余地はありそうだ。


# df -k -i /cdrom
# find /cdrom -type d | wc -l
# find /cdrom -type f | wc -l

前回