下記の続き
スナップショットを取得している間、元のファイルシステムに対する書き込み性能がガタ落ちするか?
【お題5~6】 LVMスナップショットの静止点でレガシースナップショット取得中、ソースボリュームへのcpコマンドやddコマンドによる書き込み時間がかなり劣化した(6倍とか)。
シンスナップショットの場合でもレガシースナップショットの場合と同様、ソースボリュームへの書き込み時間が劣化するか確認する。
【お題5~6】 LVMスナップショットの静止点で行ったことと同じように下記を行った場合のソースボリュームの書き込み時間を計測する。
0.シンソースボリュームにddコマンドで10GBのファイルの書き込み時間を計測する。
1.シンソースボリュームにddコマンドで10GBのファイルを書き込み始めてから3秒後にシンソースボリュームに対するシンスナップショットを取得した際の上記ddコマンドの書き込み時間を計測する。
※ついでにレガシースナップショット同様シンスナップショット取得の瞬間に書き込み中
だったファイルが破損することを確認する
2.シンソースボリューム上でcpコマンドによる10GBのファイルコピーを始めてから10秒後にシンソースボリュームに対するスナップショットを取得した際の上記cpコマンドの書き込み時間を計測する。
※ついでにレガシースナップショット同様シンスナップショット取得の瞬間に書き込み中
だったファイルが破損することを確認する
※ついでにレガシースナップショット同様シンスナップショット取得の瞬間はsyncが発行
されてDirtyキャッシュがディスクに反映されてからスナップショットが取得されること
を確認する
【準備】
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home cl -wi-ao---- 173.87g
root cl -wi-ao---- 50.00g
swap cl -wi-ao---- 7.81g
1TBthin_snap1dst Vwi---tz-k 2.00t big_thinpool dst_thinlv
big_thinpool dst twi-aotz-- 2.44t 40.30 20.04
dst_thinlv dst Vwi-a-tz-- 2.00t big_thinpool 49.20
testlv_bk dst -wi-a----- 200.00g
legacy_snap src swi-aos--- 20.00g testlv 38.86
src_2TB_linerlv src -wi-a----- 2.00t
test_thinpool src twi-aotz-- 200.00g 26.83 19.05
testlv src owi-aos--- 200.00g
thinlv_1 src Vwi-aotz-- 200.00g test_thinpool 26.04 ←これをソースボリュームにしてシンスナップショットをつくる
# df -h | grep thinlv_1
/dev/mapper/src-thinlv_1 200G 43G 158G 22% /thinlv_1
・試し打ち
# time dd if=/dev/zero of=/thinlv_1/hoge count=10000 bs=1024k
10000+0 レコード入力
10000+0 レコード出力
10485760000 バイト (10 GB) コピーされました、 74.958 秒、 140 MB/秒
real 1m15.037s ←レガシーボリュームより約1.5倍くらい書き込みに時間がかかった
user 0m0.003s
sys 0m4.603s
# dd if=/dev/zero of=/thinlv_1/hoge count=10000 bs=1024k & \
{ sleep 3;time lvcreate -s -n thin_snap1 src/thinlv_1; }
[1] 2636
Using default stripesize 64.00 KiB.
WARNING: Sum of all thin volume sizes (400.00 GiB) exceeds the size of thin pool src/test_thinpool and the amount of free space in volume group (326.37 GiB)!
For thin pool auto extension activation/thin_pool_autoextend_threshold should be below 100.
Logical volume "thin_snap1" created.
real 0m19.614s ←ddで流し込み始めてから3秒スリープしてそのあと19秒後にスナップショットの作成が完了
user 0m0.018s
sys 0m0.075s
# 10000+0 レコード入力
10000+0 レコード出力
10485760000 バイト (10 GB) コピーされました、 76.9588 秒、 136 MB/秒 ←シンスナップショットがないときととあまりかわらない!
[1]+ 終了 dd if=/dev/zero of=/thinlv_1/hoge count=10000 bs=1024k
# ls -l /thinlv_1/
合計 10240004
drwxr-xr-x. 25 root root 4096 9月 14 20:41 1
-rw-r--r--. 1 root root 10485760000 9月 16 05:23 hoge
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home cl -wi-ao---- 173.87g
root cl -wi-ao---- 50.00g
swap cl -wi-ao---- 7.81g
1TBthin_snap1 dst Vwi---tz-k 2.00t big_thinpool dst_thinlv
big_thinpool dst twi-aotz-- 2.44t 40.30 20.04
dst_thinlv dst Vwi-a-tz-- 2.00t big_thinpool 49.20
testlv_bk dst -wi-a----- 200.00g
legacy_snap src swi-a-s--- 20.00g testlv 38.86
src_2TB_linerlv src -wi-a----- 2.00t
test_thinpool src twi-aotz-- 200.00g 35.55 25.47
testlv src owi-aos--- 200.00g
thin_snap1 src Vwi---tz-k 200.00g test_thinpool thinlv_1
thinlv_1 src Vwi-aotz-- 200.00g test_thinpool 31.18
・dd書き込み中に取得したスナップショットをマウントして中身を見る
# mkdir /thin_snap1
# lvchange -ay -K src/thin_snap1
# lvs src/thin_snap1
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
thin_snap1 src Vwi-a-tz-k 200.00g test_thinpool thinlv_1 31.18
# mount -o nouuid /dev/src/thin_snap1 /thin_snap1
# ls -lh /thin_snap1
合計 3.1G
drwxr-xr-x. 25 root root 4.0K 9月 14 20:41 1
-rw-r--r--. 1 root root 2.7G 9月 16 05:22 hoge
# wc -c /thin_snap1/hoge
2800746496 /thin_snap1/hoge
→レガシースナップショットと同様、ファイル書き込み中に作成したシンスナップショットは、書き込み途中のファイルを断面としたスナップショットを取得する。
■LVMシンスナップショットは直前にdirtyキャッシュをsyncはしてくれるのか?
# ll /thinlv_1/
合計 10240004
drwxr-xr-x. 25 root root 4096 9月 14 20:41 1
-rw-r--r--. 1 root root 10485760000 9月 16 05:23 hoge
・試し打ち
10GBのファイルをコピーした場合、Dirtyキャッシュは何秒でディスクに全部書き込まれるか?
※7200回転キャッシュ256MBのSATAディスク
# umount /thin_snap1
# lvremove src/thin_snap1
Do you really want to remove active logical volume src/thin_snap1? [y/n]: y
Logical volume "thin_snap1" successfully removed
# { time cp /thinlv_1/hoge /thinlv_1/hoge2; };for ((i=1;i<=40;i++));do printf "${i}秒 ";grep Dirty /proc/meminfo;sleep 1;done
real 2m44.273s ←リニアボリュームより約1.7倍遅かった
user 0m0.063s
sys 0m13.173s
1秒 Dirty: 220752 kB
2秒 Dirty: 220928 kB
3秒 Dirty: 220928 kB
4秒 Dirty: 220928 kB
5秒 Dirty: 220928 kB
6秒 Dirty: 220928 kB
7秒 Dirty: 220928 kB
8秒 Dirty: 220928 kB
9秒 Dirty: 220928 kB
10秒 Dirty: 220928 kB
11秒 Dirty: 220928 kB
12秒 Dirty: 220928 kB
13秒 Dirty: 220928 kB
14秒 Dirty: 220928 kB
15秒 Dirty: 220928 kB
16秒 Dirty: 220928 kB
17秒 Dirty: 8 kB
18秒 Dirty: 0 kB
19秒 Dirty: 0 kB
^C
→約16秒前後
※リニアボリュームのときよりIOが遅いのでキャッシュ書き込みがそれだけ進行してるからと思われる。
# ll /thinlv_1/
合計 10240008
drwxr-xr-x. 25 root root 4096 9月 14 20:41 1
-rw-r--r--. 1 root root 10485760000 9月 16 05:57 hoge
# { time cp /thinlv_1/hoge /thinlv_1/hoge2; } & { for ((i=1;i<=600;i++));do printf "${i}秒 ";grep Dirty /proc/meminfo;sleep 1;done; } & { sleep 10;lvcreate -s -n thin_snap1 src/thinlv_1; }
[1] 2906
[2] 2907
1秒 Dirty: 0 kB
2秒 Dirty: 89136 kB
3秒 Dirty: 191948 kB
4秒 Dirty: 290948 kB
5秒 Dirty: 389864 kB
6秒 Dirty: 489720 kB
7秒 Dirty: 587836 kB
8秒 Dirty: 685164 kB
9秒 Dirty: 779164 kB
10秒 Dirty: 867908 kB
Using default stripesize 64.00 KiB. ←レガシースナップショット取得開始
WARNING: Sum of all thin volume sizes (400.00 GiB) exceeds the size of thin pool src/test_thinpool and the amount of free space in volume group (326.37 GiB)!
For thin pool auto extension activation/thin_pool_autoextend_threshold should be below 100.
11秒 Dirty: 970760 kB
12秒 Dirty: 0 kB ←syncは発行された臭い
13秒 Dirty: 12 kB
14秒 Dirty: 12 kB
15秒 Dirty: 12 kB
16秒 Dirty: 12 kB
17秒 Dirty: 12 kB
18秒 Dirty: 12 kB
Logical volume "thin_snap1" created. ←レガシースナップショット取得完了
# 19秒 Dirty: 26896 kB
20秒 Dirty: 109448 kB
21秒 Dirty: 213480 kB
22秒 Dirty: 319012 kB
23秒 Dirty: 413420 kB
24秒 Dirty: 515892 kB
25秒 Dirty: 613304 kB
26秒 Dirty: 713884 kB
27秒 Dirty: 815200 kB
28秒 Dirty: 917592 kB
29秒 Dirty: 1019376 kB
30秒 Dirty: 1119464 kB
31秒 Dirty: 1224972 kB
32秒 Dirty: 1331304 kB
33秒 Dirty: 1430540 kB
34秒 Dirty: 1530160 kB
35秒 Dirty: 1538804 kB
36秒 Dirty: 1537452 kB
37秒 Dirty: 1534072 kB
38秒 Dirty: 1536752 kB
39秒 Dirty: 964788 kB
40秒 Dirty: 964748 kB
41秒 Dirty: 964748 kB
42秒 Dirty: 964740 kB
43秒 Dirty: 964740 kB
44秒 Dirty: 964740 kB
45秒 Dirty: 1012808 kB
46秒 Dirty: 1097648 kB
47秒 Dirty: 1204200 kB
48秒 Dirty: 1306904 kB
49秒 Dirty: 1404232 kB
50秒 Dirty: 788672 kB
51秒 Dirty: 788672 kB
52秒 Dirty: 788668 kB
53秒 Dirty: 788668 kB
54秒 Dirty: 788668 kB
55秒 Dirty: 788668 kB
56秒 Dirty: 788668 kB
57秒 Dirty: 425588 kB
58秒 Dirty: 425588 kB
59秒 Dirty: 425588 kB
60秒 Dirty: 425588 kB
61秒 Dirty: 464532 kB
62秒 Dirty: 503176 kB
63秒 Dirty: 568980 kB
64秒 Dirty: 680684 kB
65秒 Dirty: 778708 kB
66秒 Dirty: 0 kB
67秒 Dirty: 0 kB
68秒 Dirty: 0 kB
69秒 Dirty: 0 kB
70秒 Dirty: 0 kB
71秒 Dirty: 512 kB
72秒 Dirty: 512 kB
73秒 Dirty: 512 kB
74秒 Dirty: 91436 kB
75秒 Dirty: 198848 kB
76秒 Dirty: 303724 kB
77秒 Dirty: 404544 kB
78秒 Dirty: 504848 kB
79秒 Dirty: 586776 kB
80秒 Dirty: 677616 kB
81秒 Dirty: 782340 kB
82秒 Dirty: 898328 kB
83秒 Dirty: 1007292 kB
84秒 Dirty: 1111632 kB
85秒 Dirty: 1214144 kB
86秒 Dirty: 1319056 kB
87秒 Dirty: 1419036 kB
88秒 Dirty: 1524700 kB
89秒 Dirty: 1514080 kB
90秒 Dirty: 1495548 kB
91秒 Dirty: 1523028 kB
92秒 Dirty: 1493608 kB
93秒 Dirty: 1476120 kB
94秒 Dirty: 1526068 kB
95秒 Dirty: 1510896 kB
96秒 Dirty: 1520716 kB
97秒 Dirty: 1480424 kB
98秒 Dirty: 1216276 kB
99秒 Dirty: 1216452 kB
100秒 Dirty: 1216452 kB
101秒 Dirty: 1192924 kB
102秒 Dirty: 728932 kB
103秒 Dirty: 728932 kB
104秒 Dirty: 728932 kB
105秒 Dirty: 728932 kB
106秒 Dirty: 423144 kB
107秒 Dirty: 394240 kB
108秒 Dirty: 394752 kB
109秒 Dirty: 394752 kB
110秒 Dirty: 453148 kB
111秒 Dirty: 539044 kB
112秒 Dirty: 70908 kB
113秒 Dirty: 70908 kB
114秒 Dirty: 70908 kB
115秒 Dirty: 70908 kB
116秒 Dirty: 55096 kB
117秒 Dirty: 86368 kB
118秒 Dirty: 179868 kB
119秒 Dirty: 288472 kB
120秒 Dirty: 388376 kB
121秒 Dirty: 475428 kB
122秒 Dirty: 576608 kB
123秒 Dirty: 683904 kB
124秒 Dirty: 792164 kB
125秒 Dirty: 898216 kB
126秒 Dirty: 995564 kB
127秒 Dirty: 1097088 kB
128秒 Dirty: 1192552 kB
129秒 Dirty: 1299360 kB
130秒 Dirty: 1406584 kB
131秒 Dirty: 1509636 kB
132秒 Dirty: 1524896 kB
133秒 Dirty: 1507836 kB
134秒 Dirty: 1504428 kB
135秒 Dirty: 1522984 kB
136秒 Dirty: 1533636 kB
137秒 Dirty: 1022332 kB
138秒 Dirty: 1022332 kB
139秒 Dirty: 1022332 kB
140秒 Dirty: 1022332 kB
141秒 Dirty: 1022332 kB
142秒 Dirty: 1076568 kB
143秒 Dirty: 1164348 kB
144秒 Dirty: 1269120 kB
145秒 Dirty: 1377404 kB
146秒 Dirty: 1479716 kB
147秒 Dirty: 866684 kB
148秒 Dirty: 866684 kB
149秒 Dirty: 866684 kB
150秒 Dirty: 866684 kB
151秒 Dirty: 866684 kB
152秒 Dirty: 866684 kB
153秒 Dirty: 866684 kB
154秒 Dirty: 555060 kB
155秒 Dirty: 555060 kB
156秒 Dirty: 555060 kB
157秒 Dirty: 554784 kB
158秒 Dirty: 561032 kB
159秒 Dirty: 664164 kB
160秒 Dirty: 765824 kB
161秒 Dirty: 872884 kB
162秒 Dirty: 68628 kB
163秒 Dirty: 512 kB
164秒 Dirty: 512 kB
165秒 Dirty: 512 kB
166秒 Dirty: 512 kB
167秒 Dirty: 512 kB
168秒 Dirty: 512 kB
169秒 Dirty: 1024 kB
170秒 Dirty: 1024 kB
171秒 Dirty: 1024 kB
172秒 Dirty: 1024 kB
173秒 Dirty: 26204 kB
174秒 Dirty: 113056 kB
175秒 Dirty: 224912 kB
176秒 Dirty: 326892 kB
177秒 Dirty: 427164 kB
178秒 Dirty: 537120 kB
179秒 Dirty: 648792 kB
180秒 Dirty: 749784 kB
181秒 Dirty: 830616 kB
182秒 Dirty: 929560 kB
183秒 Dirty: 1034288 kB
184秒 Dirty: 1142732 kB
185秒 Dirty: 1246524 kB
186秒 Dirty: 1352532 kB
187秒 Dirty: 1454024 kB
188秒 Dirty: 1534388 kB
189秒 Dirty: 1537108 kB
190秒 Dirty: 1534560 kB
191秒 Dirty: 1534380 kB
192秒 Dirty: 1532464 kB
193秒 Dirty: 1039688 kB
194秒 Dirty: 1039688 kB
195秒 Dirty: 1039688 kB
196秒 Dirty: 1039688 kB
197秒 Dirty: 1039688 kB
198秒 Dirty: 757692 kB
199秒 Dirty: 757852 kB
200秒 Dirty: 757852 kB
201秒 Dirty: 757852 kB
202秒 Dirty: 473300 kB
203秒 Dirty: 473196 kB
204秒 Dirty: 493288 kB
205秒 Dirty: 516460 kB
206秒 Dirty: 581548 kB
207秒 Dirty: 333596 kB
208秒 Dirty: 512 kB
209秒 Dirty: 512 kB
210秒 Dirty: 512 kB
211秒 Dirty: 512 kB
212秒 Dirty: 512 kB
213秒 Dirty: 7672 kB
214秒 Dirty: 29592 kB
real 3m33.887s ←レガシースナップショットのときより約半分の時間でコピーが完了した!
user 0m0.106s
sys 0m15.413s
215秒 Dirty: 58496 kB
216秒 Dirty: 58496 kB
217秒 Dirty: 58496 kB
218秒 Dirty: 58496 kB
219秒 Dirty: 58496 kB
220秒 Dirty: 58496 kB
221秒 Dirty: 58496 kB
222秒 Dirty: 58496 kB
223秒 Dirty: 58496 kB
224秒 Dirty: 58496 kB
225秒 Dirty: 58496 kB
226秒 Dirty: 58496 kB
227秒 Dirty: 58496 kB
228秒 Dirty: 58496 kB
229秒 Dirty: 58496 kB
230秒 Dirty: 58496 kB
231秒 Dirty: 58496 kB
232秒 Dirty: 58496 kB
233秒 Dirty: 58496 kB
234秒 Dirty: 58496 kB
235秒 Dirty: 58496 kB
236秒 Dirty: 58496 kB
237秒 Dirty: 58496 kB
238秒 Dirty: 48 kB
239秒 Dirty: 0 kB
240秒 Dirty: 0 kB
241秒 Dirty: 0 kB
242秒 Dirty: 0 kB
----(略)----
597秒 Dirty: 0 kB
598秒 Dirty: 0 kB
599秒 Dirty: 0 kB
600秒 Dirty: 0 kB
[1]- 終了 { time cp -i /thinlv_1/hoge /thinlv_1/hoge2; }
[2]+ 終了 { for ((i=1; i<=600; i++))
do
printf "${i}秒 "; grep --color=auto Dirty /proc/meminfo; sleep 1;
done; }
# lvchange -ay -K src/thin_snap1
# mount -o nouuid /dev/src/thin_snap1 /thin_snap1
# ls -l /thinlv_1/
合計 20480012
drwxr-xr-x. 25 root root 4096 9月 14 20:41 1
-rw-r--r--. 1 root root 10485760000 9月 16 05:57 hoge
-rw-r--r--. 1 root root 10485760000 9月 16 06:10 hoge2
# ls -l /thin_snap1
合計 11288520
drwxr-xr-x. 25 root root 4096 9月 14 20:41 1
-rw-r--r--. 1 root root 10485760000 9月 16 05:57 hoge
-rw-r--r--. 1 root root 996802560 9月 16 06:07 hoge2
【結果】
■ddコマンドでソースボリュームに10GBの書き込む速度
・スナップショットが無いときのソースボリュームへの書き込み速度は、リニアボリュームの方がシンボリュームより約1.5倍速かった
・レガシースナップショットが有る場合のリニアソースボリュームへの書き込みは大幅に遅くなった(約6倍)
一方、シンスナップショットがある場合のシンソースボリュームへの書き込みは無いときとほとんど変わらなかった。
■cpコマンドでソースボリューム上の10GBを同じソースボリューム上にコピーする速度
・スナップショットが無いときのソースボリュームへの書き込み速度は、リニアボリュームの方がシンボリュームより約1.7倍速かった
・レガシースナップショットが有る場合のリニアソースボリュームへの書き込みは無いときより約7倍遅かった。
一方、シンスナップショットがある場合のシンソースボリュームへの書き込みは無いときより約1.3倍遅かった。
【わかったこと】
■スナップショットの有無とソースボリューム書き込み速度劣化の関係
・リニアボリュームの方がシンボリュームより書き込み速度は速い(2倍まではいかない)
・リニアボリュームはスナップショットがあるときの書き込み速度は無いときよりもかなり遅くなる(6倍とか7倍とか)
・シンボリュームはスナップショットがあっても書き込み速度はリニアボリュームほど遅くならない(2倍までいかない)
■スナップショット取得時間
・リニアソースボリュームもシンソースボリュームも連続でデータ書き込み中のスナップショット取得は数秒~数十秒かかる場合がある。(連続データ書き込み中でなければ1秒未満)
■スナップショット取得時の静止点
・リニアソースボリュームもシンボリュームも連続でデータ書き込み中にスナップショット取得すると書き込み中データはDirtyキャッシュ反映はされるが書き込み途中のファイルの断面が取得されるので壊れる。