EC2 m3.xlarge で FreeBSD が動く

EC2 に新しいインスタンスが追加された。
http://aws.amazon.com/jp/about-aws/whats-new/2012/10/31/announcing-amazon-ec2-m3-instances-and-m1-price-drop-1/
そして、こいつらは cc2.8xlarge などと同様に Virtualization: HVM なインスタンスが動く。
つまり、 FreeBSD on EC2 が動作するインスタンスが増えたということであり、今までは t1.micro か Cluster Compute インスタンスか High I/O インスタンスという極端な選択肢しかなかったところに常識的な選択肢がやってきたということである。と言うわけで早速試してみる。
先人の知恵が us-east にあるので、サクッと探して起動する。名前に Cluster Compute って入ってる奴です。

ウィザードを進めると、ちゃんと m3.xlarge が出てくる。ちなみに、まだ us-east (virginia) でしか使えないようですが、 Cluster Compute インスタンスと違って需要の多いインスタンスなのでそのうち日本とかにもやってくると思います。

でポチポチ進めるとログイン可能。

halfrack@halfrack> ssh -i ./work/hoge.pem root@ec2-23-20-19-47.compute-1.amazonaws.com
Last login: Sun Nov  4 15:17:59 2012 from hoge
FreeBSD 9.0-RELEASE (XENHVM) #0: Sat Jan  7 20:02:13 UTC 2012

Welcome to FreeBSD/EC2!
(snip)
ip-10-159-8-131# 

そこで FreeBSD が動いている限り、我々は dmesg を採取し公開しなければならない。

ip-10-159-8-131# dmesg 
Copyright (c) 1992-2012 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 9.0-RELEASE #0: Sat Jan  7 20:02:13 UTC 2012
    root@ip-10-17-24-118:/usr/obj/usr/src/sys/XENHVM amd64
CPU: Intel(R) Xeon(R) CPU E5-2670 0 @ 2.60GHz (2600.07-MHz K8-class CPU)
  Origin = "GenuineIntel"  Id = 0x206d7  Family = 6  Model = 2d  Stepping = 7
  Features=0x1781fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,MMX,FXSR,SSE,SSE2,HTT>
  Features2=0x80982201<SSE3,SSSE3,CX16,SSE4.1,SSE4.2,POPCNT,HV>
  AMD Features=0x20100800<SYSCALL,NX,LM>
  AMD Features2=0x1<LAHF>
real memory  = 16106127360 (15360 MB)
avail memory = 15482839040 (14765 MB)
Event timer "LAPIC" quality 400
ACPI APIC Table: <Xen HVM>
FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs
FreeBSD/SMP: 1 package(s) x 4 core(s)
 cpu0 (BSP): APIC ID:  0
 cpu1 (AP): APIC ID:  2
 cpu2 (AP): APIC ID:  4
 cpu3 (AP): APIC ID:  6
ioapic0: Changing APIC ID to 1
MADT: Forcing active-low polarity and level trigger for SCI
ioapic0 <Version 1.1> irqs 0-47 on motherboard
kbd1 at kbdmux0
acpi0: <Xen> on motherboard
acpi0: Power Button (fixed)
acpi0: reservation of 0, a0000 (3) failed
Timecounter "ACPI-fast" frequency 3579545 Hz quality 900
acpi_timer0: <32-bit timer at 3.579545MHz> port 0x1f48-0x1f4b on acpi0
cpu0: <ACPI CPU> on acpi0
cpu1: <ACPI CPU> on acpi0
cpu2: <ACPI CPU> on acpi0
cpu3: <ACPI CPU> on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
isab0: <PCI-ISA bridge> at device 1.0 on pci0
isa0: <ISA bus> on isab0
atapci0: <Intel PIIX3 WDMA2 controller> port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xc100-0xc10f at device 1.1 on pci0
ata0: <ATA channel 0> on atapci0
ata1: <ATA channel 1> on atapci0
pci0: <bridge> at device 1.3 (no driver attached)
vgapci0: <VGA-compatible display> mem 0xc0000000-0xc1ffffff,0xc3000000-0xc3000fff at device 2.0 on pci0
xenpci0: <Xen Platform Device> port 0xc000-0xc0ff mem 0xc2000000-0xc2ffffff irq 28 at device 3.0 on pci0
xenstore0: <XenStore> on xenpci0
hpet0: <High Precision Event Timer> iomem 0xfed00000-0xfed003ff on acpi0
Timecounter "HPET" frequency 62500000 Hz quality 950
attimer0: <AT timer> port 0x40-0x43 irq 0 on acpi0
Timecounter "i8254" frequency 1193182 Hz quality 0
Event timer "i8254" frequency 1193182 Hz quality 100
atrtc0: <AT realtime clock> port 0x70-0x71 irq 8 on acpi0
Event timer "RTC" frequency 32768 Hz quality 0
atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
atkbd0: <AT Keyboard> irq 1 on atkbdc0
kbd0 at atkbd0
atkbd0: [GIANT-LOCKED]
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: model IntelliMouse Explorer, device ID 4
fdc0: <floppy drive controller> port 0x3f0-0x3f5,0x3f7 irq 6 drq 2 on acpi0
fdc0: does not respond
device_attach: fdc0 attach returned 6
uart0: <Non-standard ns8250 class UART with FIFOs> port 0x3f8-0x3ff irq 4 flags 0x10 on acpi0
uart0: console (9600,n,8,1)
sc0: <System console> at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x100>
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
ppc0: cannot reserve I/O port range
Timecounters tick every 10.000 msec
xenbusb_front0: <Xen Frontend Devices> on xenstore0
xn0: <Virtual Network Interface> at device/vif/0 on xenbusb_front0
xn0: Ethernet address: 22:00:0a:9f:08:83
xenbusb_back0: <Xen Backend Devices> on xenstore0
xctrl0: <Xen Control Device> on xenstore0
xn0: backend features: feature-sg feature-gso-tcp4
xbd0: 10240MB <Virtual Block Device> at device/vbd/768 on xenbusb_front0
xbd0: attaching as ad0
SMP: AP CPU #1 Launched!
SMP: AP CPU #2 Launched!
SMP: AP CPU #3 Launched!
Trying to mount root from ufs:/dev/ad0a [rw]...
xn0: 2 link states coalesced
ip-10-159-8-131# 

見どころは xn0 とか xbd0 でしょうか。 HVM ですがドライバは paravirtualized なので、ちゃんと速い。
EC2 は TCP/UDP/ICMP ぐらいしか通らないので FreeBSD の強力なネットワークスタックの威力は制限されるが、それでも 1時間単位でサーバ借りれるのは便利。ちょいと FreeBSD ホストが数十台欲しい、みたいなときに活用していこう。
m3.xlarge でも上げっぱなしにすると月数千円単位でかかるので、上げっぱなしは各種 VPS を使い、短時間使うのは EC2 という使い分けが便利そうである。

背景

FreeBSD/amd64 はメモリ周りの Xen 対応が進んでいない?ので、 Virtualization: paravirtual な Xen 環境では DomU としても動かない。なので、 Windows インスタンスとしてマイクロソフトに税を納めながら使ったり、あえて i386 で動かすなど微妙なことをする必要があった。そこに Xen HVM (PV on HVM) で動作する Cluster Compute インスタンス*1が登場し、割とちゃんと FreeBSD を使えるようになった。
要するに以下のような状況で、 FreeBSD を EC2 で動かすとちょっと微妙な気分になるのであった。

  • 我慢ならんぐらい CPU が遅い t1.micro
  • 使ってもいない Windows に金を払う
  • ちょっとオーバスペック過ぎる Cluster Compute or High I/O

が、今回の m3.xlarge, m3.2xlarge の追加によりリーズナブルな選択肢が追加され、状況が一気に変化したと言える。わーい。
とまあ勢いで説明しましたが、背景については私の話より下記ページ見た方が正確かと。
FreeBSD on EC2 status
この記事を書き始めた時は上記ページでの言及は無かったが、今見たら FreeBSD 9.1-RC2 に "m3" の言及が追加されていた。この件について更新されそうな雰囲気。

PV on HVM または PVHVM とは

また、「お前の PV とか HVM の理解はまぜこぜじゃないか?」という向きには、下の記事を推奨しておきます。最近混ざってる…。
Linux PV on HVM
PV on HVM - Xen
新しい Xen を触る機会がなかったので、 Xen がこんなに進化してるとは予想外だった。個人的にも仕事上も Xen をガンガン使っているので、もっと勉強せねば。

*1:特に cc2.8xlarge は HVM のみのサポートとなるが、これは数値計算で多用されるメモリアクセスにおいて paravirtual な環境だとオーバーヘッドが無視できないためと推測している。