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 をガンガン使っているので、もっと勉強せねば。