kvm-clock に時間を尋ねるのは間違っているだろうか
TRANSCRIPT
![Page 1: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/1.jpg)
kvm-clock に時間を尋ねるのは間違っているだろうか
@deep_tkkn
2015/06/06
Kernel/VM 探検隊 #11
![Page 2: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/2.jpg)
自己紹介
• Twitter: @deep_tkkn
•本名: 深井貴明
• BitVisor でライブマイグレーションするおじさん
![Page 3: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/3.jpg)
これからお話するのは
![Page 4: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/4.jpg)
kvm-clockに翻弄された
![Page 5: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/5.jpg)
一人の男の愚痴お話…(まぁ僕のことなんですが)
![Page 6: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/6.jpg)
ある日のこと…
•男は論文執筆のためにSysbenchを走らせていた
•評価対象は物理マシン、BitVisor、KVM
• KVM よりもBitVisor が速い、という結果を期待して
![Page 7: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/7.jpg)
![Page 8: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/8.jpg)
小さいブロックサイズではKVMが遅くなる
![Page 9: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/9.jpg)
,.へ___ ム i「 ヒ_i〉 ゝ 〈ト ノ iニ(()i { ____ | ヽi i /__, , ‐-\ i }| i /(●) ( ● )\ {、 λト-┤. / (__人__) \ ,ノ  ̄ ,!i ゝ、_ | ´ ̄` | ,. '´ハ ,!
. ヽ、 `` 、,__\ /" \ ヽ/\ノ ノ ハ ̄r/:::r―--―/::7 ノ /ヽ. ヽ::〈; . '::. :' |::/ / ,. "
`ー 、 \ヽ::. ;:::|/ r'"
![Page 10: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/10.jpg)
,.へ___ ム i「 ヒ_i〉 ゝ 〈ト ノ iニ(()i { ____ | ヽi i /__, , ‐-\ i }| i /(●) ( ● )\ {、 λト-┤. / (__人__) \ ,ノ  ̄ ,!i ゝ、_ | ´ ̄` | ,. '´ハ ,!
. ヽ、 `` 、,__\ /" \ ヽ/\ノ ノ ハ ̄r/:::r―--―/::7 ノ /ヽ. ヽ::〈; . '::. :' |::/ / ,. "
`ー 、 \ヽ::. ;:::|/ r'"
男役: やる夫
![Page 11: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/11.jpg)
数日後…____
/ \/ ─ ─\
/ (●) (●)\| (__人__) |/ ∩ノ⊃ /( \ /_ノ | | .\ “ /__| | \/___/
KVMが遅くなる理由を考察せねばならん
![Page 12: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/12.jpg)
考える男____
/ \/ ─ ─\
/ (●) (●)\| (__人__) |/ ∩ノ⊃ /( \ /_ノ | | .\ “ /__| | \/___/
EPT?BitVisorでも使ってるお
![Page 13: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/13.jpg)
考える男____
/ \/ ─ ─\
/ (●) (●)\| (__人__) |/ ∩ノ⊃ /( \ /_ノ | | .\ “ /__| | \/___/
キャッシュミス?なんか違う気がするお
![Page 14: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/14.jpg)
考える男____
/ \/ ─ ─\
/ (●) (●)\| (__人__) |/ ∩ノ⊃ /( \ /_ノ | | .\ “ /__| | \/___/
わからんからperfやstrace使うお
![Page 15: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/15.jpg)
考える男____
/ \/ ─ ─\
/ (●) (●)\| (__人__) |/ ∩ノ⊃ /( \ /_ノ | | .\ “ /__| | \/___/
きっとブロックサイズに依存するイベントが
あるお
![Page 16: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/16.jpg)
perfやstraceで調べた結果
• VMExit回数… ブロックサイズによらずほぼ同じ
![Page 17: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/17.jpg)
____/ \
/ ─ ─\/ (●) (●)\| (__人__) |/ ∩ノ⊃ /( \ /_ノ | | .\ “ /__| | \/___/
?????
![Page 18: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/18.jpg)
perfやstraceで調べた結果
• VMExit回数… ブロックサイズによらずほぼ同じ
• ブロックサイズを小さくするとclock_gettime()システムコールの呼び出し回数が増える
![Page 19: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/19.jpg)
なぜclock_gettime()が多くなる?
• Sysbenchは1イベント毎の時間を測定している
• メモリテストの1イベント== 1block のread or write
• —memory-block-size を小さくするイベントの数が増える時間を測定する回数が増えるclock_gettime()を呼ぶ回数が増える
![Page 20: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/20.jpg)
____/ \
/ ─ ─\/ (●) (●)\| (__人__) |/ ∩ノ⊃ /( \ /_ノ | | .\ “ /__| | \/___/
時間取得の処理が遅いわけないお
![Page 21: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/21.jpg)
____/ \
/ ─ ─\/ (●) (●)\| (__人__) |/ ∩ノ⊃ /( \ /_ノ | | .\ “ /__| | \/___/
システムコールが遅いんじゃなイカ?
![Page 22: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/22.jpg)
Syscallの実行時間を調べたら…
getpid()
物理マシン、KVMの間に大きな差なし
clock_gettime()
KVM だけ遅い
![Page 23: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/23.jpg)
#include <unistd.h>#include <time.h>#include <stdio.h>#define NUM 400000000
int main(){int i;struct timespec dummy;for ( i = 0; i < NUM; i++){
clock_gettime(CLOCK_MONOTONIC, &dummy);}return 0;
}
![Page 24: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/24.jpg)
root@mgrt-trgt:~# time ./a.out
real 0m31.867suser 0m6.384ssys 0m25.482sroot@mgrt-trgt:~# echo tsc > /sys/devices/system/clocksource/clocksource0/current_clocksource[ 1570.562530] Switching to clocksource tscroot@mgrt-trgt:~# time ./a.out
real 0m5.852suser 0m5.848ssys 0m0.000sroot@mgrt-trgt:~#
![Page 25: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/25.jpg)
____/ \
/ ─ ─\/ (●) (●)\| (__人__) |/ ∩ノ⊃ /( \ /_ノ | | .\ “ /__| | \/___/
…..
![Page 26: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/26.jpg)
KVMだけ時間取得の処理が遅いおwww
____ /_ノ ヽ、_\
ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒)| / / / |r┬-| | (⌒)/ / / //| :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) /ヽ / `ー'´ ヽ / /
| | l||l 从人 l||l l||l 从人 l||lヽ -一''''''"~~``'ー--、 -一'''''''ー-、ヽ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
![Page 27: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/27.jpg)
____/ \
/ ─ ─\/ (●) (●)\| (__人__) |/ ∩ノ⊃ /( \ /_ノ | | .\ “ /__| | \/___/
なんでKVMだけclock_gettime()が遅いんだお?
![Page 28: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/28.jpg)
____/ \
/ ─ ─\/ (●) (●)\| (__人__) |/ ∩ノ⊃ /( \ /_ノ | | .\ “ /__| | \/___/
ググってみるお
![Page 29: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/29.jpg)
http://blog.siphos.be/2013/04/comparing-performance-with-sysbench-part-3/
![Page 30: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/30.jpg)
____ /_ノ ヽ、_\
ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒)| / / / |r┬-| | (⌒)/ / / //| :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) /ヽ / `ー'´ ヽ / /
| | l||l 从人 l||l l||l 从人 l||lヽ -一''''''"~~``'ー--、 -一'''''''ー-、ヽ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
今までおれが調べたこと全部書いてあるお
![Page 31: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/31.jpg)
____/ \
/ ─ ─\/ (●) (●)\| (__人__) |/ ∩ノ⊃ /( \ /_ノ | | .\ “ /__| | \/___/
ふむ、current_clockをtscに変えるとまともな結果がでるらしいぞ
![Page 32: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/32.jpg)
![Page 33: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/33.jpg)
ぺったんこ…
![Page 34: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/34.jpg)
____ /_ノ ヽ、_\
ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒)| / / / |r┬-| | (⌒)/ / / //| :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) /ヽ / `ー'´ ヽ / /
| | l||l 从人 l||l l||l 从人 l||lヽ -一''''''"~~``'ー--、 -一'''''''ー-、ヽ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
メモリ処理なんか全然関係なかったおwww
![Page 35: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/35.jpg)
____ /_ノ ヽ、_\
ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒)| / / / |r┬-| | (⌒)/ / / //| :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) /ヽ / `ー'´ ヽ / /
| | l||l 从人 l||l l||l 从人 l||lヽ -一''''''"~~``'ー--、 -一'''''''ー-、ヽ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
別にBitVisor がとりわけ速いわけでもなかったおww
![Page 36: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/36.jpg)
____ /_ノ ヽ、_\
ミ ミ ミ o゚((●)) ((●))゚o ミ ミ ミ/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\ /⌒)⌒)⌒)| / / / |r┬-| | (⌒)/ / / //| :::::::::::(⌒) | | | / ゝ :::::::::::/ | ノ | | | \ / ) /ヽ / `ー'´ ヽ / /
| | l||l 从人 l||l l||l 从人 l||lヽ -一''''''"~~``'ー--、 -一'''''''ー-、ヽ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
じゃあこの結果を論文に載せても意味ないお
![Page 37: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/37.jpg)
____ /:::::::::: u\
/:::::::::⌒三. ⌒\/:::::::::: (○)三(○)\|::::::::::::::::⌒(__人__)⌒ | ________ \:::::::::: `⌒´ ,/ .| | ...| ノ::::::::::u \ | | .|
/::::::::::::::::: u | | | |::::::::::::: l u | | | ヽ:::::::::::: -一ー_~、⌒)^),-、 | |_________.| ヽ::::::::___,ノγ⌒ヽ)ニニ- ̄ | | |
…1節まるまる消えるお…
![Page 38: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/38.jpg)
なぜkvm-clockは遅いのか?
![Page 39: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/39.jpg)
そもそもkvm-clockの仕組みは?
Current Time共有メモリ
Host OS
Guest OS
Write
Read
共有メモリでやりとりVMExitとかしない
![Page 40: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/40.jpg)
ではなぜ遅いのか?
Current Time共有メモリ
Host OS
Guest OS
Write
Host がWrite 時にメモリをロックする
![Page 41: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/41.jpg)
Read
ではなぜ遅いのか?
Current Time共有メモリ
Host OS
Guest OS
Write
Host がWrite 時にメモリをロックする
GeustからのRead がブロックされる
http://lxr.free-electrons.com/source/arch/x86/kvm/x86.c#L1558
![Page 42: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/42.jpg)
と思ったんですが…
•全力でclock_gettime()を回してそれぞれにかかった時間のばらつきを見てみる
• kvm-clock とtscのばらつき方が似ている• ロックが原因ならkvm-clock のほうだけ極端に遅い読み出しがあるはず
• うーん…
![Page 43: kvm-clock に時間を尋ねるのは間違っているだろうか](https://reader031.vdocuments.mx/reader031/viewer/2022013122/55c4184cbb61eb26058b4783/html5/thumbnails/43.jpg)
まとめ
• Kvm-clock に時間を尋ねるのは間違っているだろうか?頻繁に尋ねるのは間違っている
•頻繁にclocksourceを読むときはtscに変えよう
•遅い原因は共有メモリのロック…だけじゃない?