2012年10月8日月曜日

OpenBSDでvirtioを利用する

OpenBSDにvirtioが入ったようなので、早速使ってみる。
今のところ5.2には無く-currentにのみ入っているようなので、素直に-currentをビルド。 -currentならGENERICにvirtioが入っているので、特別な設定は要らない。 ビルド手順については、 公式のドキュメント通りに行った。

…がしかし、 sys/arch/amd64/amd64/cpu.cのコンパイルが失敗する。

{standard input}: Assembler messages: 
{standard input}:198: Error: no such instruction: `rdrand %rbx'
*** Error code 1

どうやらインラインアセンブラでこけているようだが、rdrandなんて見たこと無いのでググってみた。
http://en.wikipedia.org/wiki/RdRand
どうやら、インなんとかさんのIvy Bridgeで追加された乱数生成命令らしい。 そんなものうちのAMD E-450には無いので、rdrand()の中を全部さくっとコメントアウト。 ついでにrdrandでgrepして引っかかったidentcpu.cのhas_rdrand = 1をhas_rdrand = 0に変更。
rdrand()自体がr1.51で最近追加されたばかりの関数のようなので、 たぶんこれで大丈夫じゃないかなーと思いビルドしなおしたらあっさり通った。 そしてユーザランドも問題なくコンパイルできた。
dmesgは以下の通り。

OpenBSD 5.2-current (HACHUNE.MP) #0: Mon Oct  8 17:23:02 JST 2012
    root@obsd.k.hachune.net:/usr/src/sys/arch/amd64/compile/HACHUNE.MP
real mem = 1072685056 (1022MB)
avail mem = 1024802816 (977MB)
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 2.4 @ 0xfd980 (11 entries)
bios0: vendor Bochs version "Bochs" date 01/01/2007
bios0: Bochs Bochs
acpi0 at bios0: rev 0
acpi0: sleep states S3 S4 S5
acpi0: tables DSDT FACP SSDT APIC HPET SSDT
acpi0: wakeup devices
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
acpihpet0 at acpi0: 100000000 Hz
acpiprt0 at acpi0: bus 0 (PCI0)
mpbios0 at bios0: Intel MP Specification 1.4
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: QEMU Virtual CPU version 1.2.0, 1646.91 MHz
cpu0: FPU,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,SSE3,CX16,POPCNT,NXE,LONG,LAHF,SVM,ABM,SSE4A
cpu0: 64KB 64b/line 2-way I-cache, 64KB 64b/line 2-way D-cache, 512KB 64b/line 16-way L2 cache
cpu0: ITLB 255 4KB entries direct-mapped, 255 4MB entries direct-mapped
cpu0: DTLB 255 4KB entries direct-mapped, 255 4MB entries direct-mapped
cpu0: apic clock running at 1009MHz
cpu1 at mainbus0: apid 1 (application processor)
cpu1: QEMU Virtual CPU version 1.2.0, 1663.20 MHz
cpu1: FPU,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,SSE2,SSE3,CX16,POPCNT,NXE,LONG,LAHF,SVM,ABM,SSE4A
cpu1: 64KB 64b/line 2-way I-cache, 64KB 64b/line 2-way D-cache, 512KB 64b/line 16-way L2 cache
cpu1: ITLB 255 4KB entries direct-mapped, 255 4MB entries direct-mapped
cpu1: DTLB 255 4KB entries direct-mapped, 255 4MB entries direct-mapped
mpbios0: bus 0 is type PCI   
mpbios0: bus 1 is type ISA   
ioapic0 at mainbus0: apid 2 pa 0xfec00000, version 11, 24 pins
ioapic0: misconfigured as apic 0, remapped to apid 2
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "Intel 82441FX" rev 0x02
pcib0 at pci0 dev 1 function 0 "Intel 82371SB ISA" rev 0x00
pciide0 at pci0 dev 1 function 1 "Intel 82371SB IDE" rev 0x00: DMA, channel 0 wired to compatibility, channel 1 wired to compatibility
pciide0: channel 0 disabled (no drives)
atapiscsi0 at pciide0 channel 1 drive 0
scsibus0 at atapiscsi0: 2 targets
cd0 at scsibus0 targ 0 lun 0:  ATAPI 5/cdrom removable
cd0(pciide0:1:0): using PIO mode 4, DMA mode 2
piixpm0 at pci0 dev 1 function 3 "Intel 82371AB Power" rev 0x03: apic 2 int 9
iic0 at piixpm0
iic0: addr 0x4c 48=00 words 00=0000 01=0000 02=0000 03=0000 04=0000 05=0000 06=0000 07=0000
iic0: addr 0x4e 48=00 words 00=0000 01=0000 02=0000 03=0000 04=0000 05=0000 06=0000 07=0000
vga1 at pci0 dev 2 function 0 "Cirrus Logic CL-GD5446" rev 0x00
wsdisplay0 at vga1 mux 1: console (80x25, vt100 emulation)
wsdisplay0: screen 1-5 added (80x25, vt100 emulation)
virtio0 at pci0 dev 3 function 0 "Qumranet Virtio Network" rev 0x00: Virtio Network Device
vio0 at virtio0: address 52:54:00:12:34:56
virtio0: apic 2 int 11
virtio1 at pci0 dev 4 function 0 "Qumranet Virtio Storage" rev 0x00: Virtio Block Device
vioblk0 at virtio1
scsibus1 at vioblk0: 2 targets
sd0 at scsibus1 targ 0 lun 0:  SCSI3 0/direct fixed
sd0: 5000MB, 512 bytes/sector, 10240000 sectors
virtio1: apic 2 int 11
isa0 at pcib0
isadma0 at isa0
com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
com0: console
pckbc0 at isa0 port 0x60/5
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pms0 at pckbc0 (aux slot)
pckbc0: using irq 12 for aux slot
wsmouse0 at pms0 mux 0
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
lpt0 at isa0 port 0x378/4 irq 7
fdc0 at isa0 port 0x3f0/6 irq 6 drq 2
fd0 at fdc0 drive 0: 1.44MB 80 cyl, 2 head, 18 sec
fd1 at fdc0 drive 1: density unknown
nvram: invalid checksum
mtrr: Pentium Pro MTRR support
vscsi0 at root
scsibus2 at vscsi0: 256 targets
softraid0 at root
scsibus3 at softraid0: 256 targets
root on sd0a (cf20ab2e3b470529.a) swap on sd0b dump on sd0b
clock: unknown CMOS layout

肝心のディスク読み書き速度は以下の通り。

  • virtioなし: read 29767487 bytes/sec, write 21957414 bytes/sec
  • virtioあり: read 53455607 bytes/sec, write 46648054 bytes/sec

virtioを有効にするとだいたい2倍ぐらい速くなるようだ。 これでOpenBSDのBHyVe上への導入も捗る…?

追記: 先にユーザランド更新しとけばrdrandで文句言われなくなるんじゃね?と教えていただいたので、やりなおしてみます。
-> 無事できましたヾ(@⌒ー⌒@)ノ

0 件のコメント:

コメントを投稿