昨年末、HP ProLiant Microserver N54L に Intel SSD 750 を取り付けて、Debian GNU/Linux 8.2(jessie)で Nested KVM を設定したときのメモです。
はじめに
NAS のディスク交換で余った HDD で ZFS を試そうと、3年ほど前に購入した HP ProLiant MicroServer に Debian GNU/Linux をインストールしました。
FreeBSD をメインで使っていないので結局 ZFS についてはたいして知見を貯められていませんが、最近は docker も試すようになってきて少しディスクの空きが心許なくなってきました。ですが N54L のドライブベイに HDD 4つ、光学ドライブベイに SSD を 1つ搭載しているため SATA の空きも設置スペースも無く、ストレージを増設する場合には eSATA か内蔵 USB くらいしかありません。 OS を入れている SSD をより速いサイズの大きなものに換装しようかとも思いましたが、入れ替えの手間がかかるのでどうしたものかと考えていたところ、PCIe スロットに空きがあることに気づきました。PCIe 接続の SSD(HHHLアダプタ付き)
そういえばコンシューマ向けにも手の届く価格で出始めたとどこかのニュースでみた記憶があったので、どのような製品があるか少し調べたところ、PCIe 接続ができて N54L のハーフハイト、ハーフレングス(HHHL)アダプタが付属しているものは Kingston と Intel の製品が見つかりました。
容量と価格だけを見れば Kingston ですが、#妥協の必要が全くないストレージ というのと、年末にすぐいじりたかったので Amazon プライムで 残1 を見かけた Intel を選びました。フヒヒ pic.twitter.com/0qGc1ifEvV
— Kazuhiro YOSHIKAWA (@yoshikaw) 2015, 12月 28
N54L で NVMe
Amazon でポチった後、N54L は PCIe Gen2 だけど PCIe Gen3 が動くのか不安になりました。Wikipedia 等で互換性はあると把握していたのですが、実際に取り付けて普通に認識されてひと安心です。
NVMe インターフェースの製品は初めてなので見慣れないデバイス名に一瞬戸惑いましたが普通に parted で操作できます。# lspci ... 01:00.0 Non-Volatile memory controller: Intel Corporation Device 0953 (rev 01) (prog-if 02 [NVM Express]) Subsystem: Intel Corporation Device 370d Flags: bus master, fast devsel, latency 0, IRQ 18 Memory at fdffc000 (64-bit, non-prefetchable) [size=16K] Expansion ROM at fdfe0000 [disabled] [size=64K] Capabilities: [40] Power Management version 3 Capabilities: [50] MSI-X: Enable+ Count=32 Masked- Capabilities: [60] Express Endpoint, MSI 00 Capabilities: [100] Advanced Error Reporting Capabilities: [150] Virtual Channel Capabilities: [180] Power Budgeting Capabilities: [190] Alternative Routing-ID Interpretation (ARI) Capabilities: [270] Device Serial Number XX-XX-XX-XX-XX-XX-XX-XX Capabilities: [2a0] #19 Kernel driver in use: nvme ...
# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 1.8T 0 disk sdb 8:16 0 1.8T 0 disk sdc 8:32 0 1.8T 0 disk sdd 8:48 0 1.8T 0 disk sde 8:64 0 223.6G 0 disk ├─sde1 8:65 0 214.5G 0 part / ├─sde2 8:66 0 1K 0 part └─sde5 8:69 0 9.1G 0 part [SWAP] nvme0n1 259:0 0 372.6G 0 disk └─nvme0n1p1 259:1 0 372.6G 0 partところで hwloc-ls なんてコマンドがあるのですね。 以下の図は hwloc-ls -p の出力ですがリンク幅が一目で分かりますね。右上の PCI 8086:0953(Intel SSD 750)が x4(2.0GB/s)でその下にあるリモートアクセスカードとネットワークは x1(0.25GB/s)。
気になる性能(750 vs 335)
現在使っている Intel SSD 335 との性能が気になるところですが、インターフェースが違いますしカタログスペックで IOPS が一桁違います。
比較にすらならないと思いましたがとりあえず fio しました。パラメータは yohei-a さんのページのをそのまま参考にしました(NVMe デバイスの場合、I/O scheduler は none 一択でした)。 750 のランダム書き込みは約 16万 IOPS。335 は実行に 2分かかっていましたが 8 秒で終わりました。とても速いです。PCIe Gen2 でこれですので Gen3 だとこの倍くらいは行くんでしょうか。Intel SSD 335 (SSDSC2CT240A4K5)
# fio -rw=randwrite -bs=4k -size=100m -directory=/tmp -direct=1 -numjobs=50 -name=file1 -ioengine=libaio -group_reporting file1: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=1 ... fio-2.1.11 Starting 50 processes Jobs: 50 (f=50) ... file1: (groupid=0, jobs=50): err= 0: pid=20132: Sat Dec 26 22:54:33 2015 write: io=5000.0MB, bw=41128KB/s, iops=10281, runt=124490msec slat (usec): min=5, max=13649, avg=37.09, stdev=128.60 clat (usec): min=0, max=694498, avg=4708.51, stdev=19062.03 lat (usec): min=102, max=694520, avg=4746.34, stdev=19062.72 clat percentiles (usec): | 1.00th=[ 143], 5.00th=[ 179], 10.00th=[ 197], 20.00th=[ 217], | 30.00th=[ 231], 40.00th=[ 270], 50.00th=[ 274], 60.00th=[ 278], | 70.00th=[ 278], 80.00th=[ 282], 90.00th=[ 564], 95.00th=[27520], | 99.00th=[103936], 99.50th=[115200], 99.90th=[144384], 99.95th=[160768], | 99.99th=[220160] bw (KB /s): min= 45, max= 7078, per=2.04%, avg=837.91, stdev=531.01 lat (usec) : 2=0.01%, 4=0.01%, 10=0.01%, 20=0.01%, 50=0.05% lat (usec) : 100=0.03%, 250=33.63%, 500=55.92%, 750=1.21%, 1000=0.34% lat (msec) : 2=0.29%, 4=0.48%, 10=0.85%, 20=1.33%, 50=2.12% lat (msec) : 100=2.45%, 250=1.28%, 500=0.01%, 750=0.01% cpu : usr=0.51%, sys=1.51%, ctx=1296551, majf=0, minf=460 IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued : total=r=0/w=1280000/d=0, short=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=1 Run status group 0 (all jobs): WRITE: io=5000.0MB, aggrb=41127KB/s, minb=41127KB/s, maxb=41127KB/s, mint=124490msec, maxt=124490msec Disk stats (read/write): sde: ios=0/1279485, merge=0/122, ticks=0/6166560, in_queue=6199424, util=100.00% fio -rw=randwrite -bs=4k -size=100m -directory=/tmp -direct=1 -numjobs=50 31.43s user 94.65s system 100% cpu 2:04.96 total
Intel SSD 750 (SSDPEDMW400G4R5)
# fio -rw=randwrite -bs=4k -size=100m -directory=/mnt/tmp -direct=1 -numjobs=50 -name=file1 -ioengine=libaio -group_reporting file1: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=1 ... fio-2.1.11 Starting 50 processes Jobs: 50 (f=50) ... file1: (groupid=0, jobs=50): err= 0: pid=3370: Mon Dec 28 20:49:56 2015 write: io=5000.0MB, bw=673241KB/s, iops=168310, runt= 7605msec slat (usec): min=3, max=8737, avg= 5.62, stdev=14.49 clat (usec): min=0, max=58925, avg=284.56, stdev=285.21 lat (usec): min=13, max=58929, avg=290.39, stdev=285.85 clat percentiles (usec): | 1.00th=[ 92], 5.00th=[ 169], 10.00th=[ 191], 20.00th=[ 219], | 30.00th=[ 243], 40.00th=[ 262], 50.00th=[ 278], 60.00th=[ 290], | 70.00th=[ 310], 80.00th=[ 330], 90.00th=[ 362], 95.00th=[ 390], | 99.00th=[ 506], 99.50th=[ 700], 99.90th=[ 3312], 99.95th=[ 4448], | 99.99th=[ 8160] bw (KB /s): min= 9008, max=15520, per=2.01%, avg=13498.84, stdev=757.49 lat (usec) : 2=0.03%, 4=0.01%, 10=0.01%, 20=0.10%, 50=0.26% lat (usec) : 100=0.76%, 250=31.96%, 500=65.85%, 750=0.58%, 1000=0.17% lat (msec) : 2=0.15%, 4=0.04%, 10=0.08%, 20=0.01%, 50=0.01% lat (msec) : 100=0.01% cpu : usr=1.49%, sys=2.42%, ctx=1281689, majf=0, minf=364 IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0% submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0% issued : total=r=0/w=1280000/d=0, short=r=0/w=0/d=0 latency : target=0, window=0, percentile=100.00%, depth=1 Run status group 0 (all jobs): WRITE: io=5000.0MB, aggrb=673241KB/s, minb=673241KB/s, maxb=673241KB/s, mint=7605msec, maxt=7605msec Disk stats (read/write): nvme0n1: ios=0/1279975, merge=0/0, ticks=0/29188, in_queue=29748, util=97.26% fio -rw=randwrite -bs=4k -size=100m -directory=/mnt/tmp -direct=1 -numjobs=50 5.72s user 9.28s system 183% cpu 8.153 total(参考)上記結果をつぶやいていた時の @rioriost さんによる妥協の必要が全くないストレージの fio 結果(Device Mapper を通してこの数値というのもスゴイ)
|
|
N54L で Nested KVM
N54L の CPU は型番の通り AMD Turion II NEO N54L なので仮想化は対応していますが、それほど豪勢なスペックではないので Nested KVM しようとは考えていませんでした。しかしストレージがとても速くなりましたので試してみました。
# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 2 On-line CPU(s) list: 0,1 Thread(s) per core: 1 Core(s) per socket: 2 Socket(s): 1 NUMA node(s): 1 Vendor ID: AuthenticAMD CPU family: 16 Model: 6 Model name: AMD Turion(tm) II Neo N54L Dual-Core Processor Stepping: 3 CPU MHz: 1300.000 CPU max MHz: 2200.0000 CPU min MHz: 800.0000 BogoMIPS: 4392.66 Virtualization: AMD-V L1d cache: 64K L1i cache: 64K L2 cache: 1024K NUMA node0 CPU(s): 0,1
# lsb_release -d Description: Debian GNU/Linux 8.2 (jessie) # virsh version Compiled against library: libvirt 1.2.9 Using library: libvirt 1.2.9 Using API: QEMU 1.2.9 Running hypervisor: QEMU 2.1.2virt-manager で新規に仮想マシンを作成しただけでは Nested KVM は出来ませんでした(以下はドメイン定義 XML ファイルの一部)。
<os> <type arch='x86_64' machine='pc-i440fx-2.1'>hvm</type> <boot dev='hd'/> </os> <features> <acpi/> <apic/> <pae/> </features> <cpu mode='custom' match='exact'> <model fallback='allow'>Opteron_G3</model> </cpu>
debian-guest# virt-host-validate QEMU: Checking for hardware virtualization : PASS QEMU: Checking for device /dev/kvm : FAIL (Check that the 'kvm-intel' or 'kvm-amd' modules are loaded & the BIOS has enabled virtualization) QEMU: Checking for device /dev/vhost-net : PASS QEMU: Checking for device /dev/net/tun : PASS LXC: Checking for Linux >= 2.6.26 : PASSいくつか試したところ、CPU のモデルを
Opteron_G3
から phenom
に変更するだけで上手くいきました。
virt-manager で変更する場合は「Processor」で「構成」を開いてモデル変更。virsh edit するなら model 要素を書き換えるだけです。
<cpu mode='custom' match='exact'> <model fallback='allow'>phenom</model> </cpu>
おわりに
新しい種類のハードウェアを入手したので久しぶりにいろいろとメモがてらまとめてみました。2012年末にコンパクトな検証機として購入した N54L ですが、Intel SSD 750 を追加したことでまだまだ活躍してくれそうです。
0 件のコメント:
コメントを投稿