続・ディスクイメージのスループット
ディスクイメージのスループット - しょんぼり技術メモの続き。
ext3パーティションを作ってからマウントして計測していたが、思ったよりもvirtioがふるわずという結果に。twitterで相談したら、デバイスファイルに直接読み書きしてみたら?とアドバイスを受けたので、実際にやってみた。
あんまり時間がないので測定サイズは1GB。
準備
前回と同様の方法で1GiBのRAWイメージを2つ作成。ide-modeとvirtioでvirt-managerを使って登録。
ゲスト上で、readテスト用のランダムデータを作成。
# dd if=/dev/urandom of=/tmp/random.1GiB.dat bs=1M count=1024
ide-modeとvirtioの区別がしやすいように、ハードリンクを作成
# ln /dev/sda /dev/idemode # ln /dev/vdb /dev/virtio
write測定
次のようにして測定。(前回エントリでホスト側のエントリ削除を書き忘れてました。測定時には実施)
# 【ホストOSで】echo 3 > /proc/sys/vm/drop_caches # ホスト側キャッシュ削除 # echo 3 > /proc/sys/vm/drop_caches # ゲスト側キャッシュ削除 # dd if=/dev/zero of=測定対象 bs=1M count=1024 oflag=direct
んで、結果はこちら。virtioが健闘している。なんだやるじゃんvirtio。
ide | virtio |
---|---|
60.8MBps | 62.4MBps |
60.0MBps | 62.7MBps |
59.3MBps | 61.1MBps |
↓平均 | ↓平均 |
60.0MBps | 62.1MBps |
read測定
あらかじめ作っておいた1GiBのランダムデータファイルをcpして、それを読み出す。
# cp /tmp/random.1GiB.dat /dev/idemode # cp /tmp/random.1GiB.dat /dev/virtio
同様に、次のようにして測定。
# 【ホストOSで】echo 3 > /proc/sys/vm/drop_caches # ホスト側キャッシュ削除 # echo 3 > /proc/sys/vm/drop_caches # ゲスト側キャッシュ削除 # dd if=/dev/測定対象 of=/dev/null bs=1M count=1024 iflag=direct
結果はこちら。virtioェ…
ide | virtio |
---|---|
87.7MBps | 34.3MBps |
84.9MBps | 33.5MBps |
86.9MBps | 31.7MBps |
↓平均 | ↓平均 |
86.5MBps | 33.1MBps |
結論
【急募】virtioの良さ
追記
テストデータのサイズ(1GiB, 2GiB)がゲストのメモリサイズ(2GiB)に収まってたのが原因では?と思いつき、ゲストのメモリサイズを512MiBにして試した。変わらなかった。泣いた。
さらに追記
[twitter:@hamano]さんに「本当にIDEとして見えてる?」とご指摘頂いたので早速チェック。
# lspci (コピペできなかったので手打ち。当該部分のみ抜粋) 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] 00:05.0 SCSI storage controller: Qumranet, Inc. Virtio block device 00:06.0 SCSI storage controller: Qumranet, Inc. Virtio block device
システム用にVirtIO Diskを1つ、測定用にIDE DiskとVirtIO Diskを1つずつ割り当てているので、どうやら正しく(?)認識されているようです。
もっと追記
それぞれの詳しい環境です。
ホスト(Fedora 12 x64)
# uname -r 2.6.32.16-141.fc12.x86_64 # rpm -qa | grep kvm qemu-kvm-0.11.0-13.fc12.x86_64
ゲスト(Fedora 13 x64)
# uname -r 2.6.33.3-85.fc13.x86_64 # lsmod Module Size Used by fuse 54749 2 sunrpc 192013 1 ip6t_REJECT 4055 2 nf_conntrack_ipv6 17513 2 ip6table_filter 2743 1 ip6_tables 16558 1 ip6table_filter ipv6 267065 62 ip6t_REJECT,nf_conntrack_ipv6 uinput 7230 0 snd_ens1370 20973 2 gameport 8936 1 snd_ens1370 snd_rawmidi 19917 1 snd_ens1370 snd_seq 50941 0 snd_seq_device 5895 2 snd_rawmidi,snd_seq snd_pcm 76131 1 snd_ens1370 microcode 17930 0 i2c_piix4 11822 0 snd_timer 19234 2 snd_seq,snd_pcm snd 60573 10 snd_ens1370,snd_rawmidi,snd_seq,snd_seq_device,snd_pcm,snd_timer i2c_core 24427 1 i2c_piix4 joydev 9439 0 virtio_balloon 3237 0 virtio_net 13581 0 soundcore 6198 1 snd snd_page_alloc 7221 2 snd_ens1370,snd_pcm virtio_blk 4311 3 virtio_pci 5923 0 virtio_ring 5199 1 virtio_pci virtio 4058 4 virtio_balloon,virtio_net,virtio_blk,virtio_pci # lspci 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] 00:01.2 USB Controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01) 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03) 00:02.0 VGA compatible controller: Cirrus Logic GD 5446 00:03.0 Ethernet controller: Qumranet, Inc. Virtio network device 00:04.0 Multimedia audio controller: Ensoniq ES1370 [AudioPCI] 00:05.0 SCSI storage controller: Qumranet, Inc. Virtio block device 00:06.0 SCSI storage controller: Qumranet, Inc. Virtio block device 00:07.0 RAM memory: Qumranet, Inc. Virtio memory balloon # dmesg の一部 ata_piix 0000:00:01.1: version 2.13 ata_piix 0000:00:01.1: setting latency timer to 64 scsi0 : ata_piix scsi1 : ata_piix ata1: PATA max MWDMA2 cmd 0x1f0 ctl 0x3f6 bmdma 0xc000 irq 14 ata2: PATA max MWDMA2 cmd 0x170 ctl 0x376 bmdma 0xc008 irq 15 ata1.00: ATA-7: QEMU HARDDISK, 0.11.0, max UDMA/100 scsi 0:0:0:0: Direct-Access ATA QEMU HARDDISK 0.11 PQ: 0 ANSI: 5 sd 0:0:0:0: Attached scsi generic sg0 type 0 sd 0:0:0:0: [sda] 2097152 512-byte logical blocks: (1.07 GB/1.00 GiB) sd 0:0:0:0: [sda] Write Protect is off sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA sda: ata2.00: configured for MWDMA2 unknown partition table ACPI: PCI Interrupt Link [LNKC] enabled at IRQ 10 virtio-pci 0000:00:03.0: PCI INT A -> Link[LNKC] -> GSI 10 (level, high) -> IRQ 10 ACPI: PCI Interrupt Link [LNKA] enabled at IRQ 10 virtio-pci 0000:00:05.0: PCI INT A -> Link[LNKA] -> GSI 10 (level, high) -> IRQ 10 ACPI: PCI Interrupt Link [LNKB] enabled at IRQ 11 virtio-pci 0000:00:06.0: PCI INT A -> Link[LNKB] -> GSI 11 (level, high) -> IRQ 11 virtio-pci 0000:00:07.0: PCI INT A -> Link[LNKC] -> GSI 10 (level, high) -> IRQ 10 vda: vda1 vda2 vdb: unknown partition table