AWSのベアメタルインスタンス(i3.metal)上でBitVisorは動作するか?

今年の5月からEC2でbare metal instance (i3.metal)の[一般公開が始まりました](https://aws.amazon.com/jp/about-aws/whats-new/2018/05/announcing-general-availability-of-amazon-ec2-bare-metal-instances/).
[VMware](https://aws.amazon.com/jp/vmware/)や[KVM](https://www.twosixlabs.com/running-thousands-of-kvm-guests-on-amazons-new-i3-metal-instances/), [Hyper-v](https://aws.amazon.com/jp/blogs/compute/running-hyper-v-on-amazon-ec2-bare-metal-instances/)の動作報告はありますが，果たしてBitVisorはどうでしょうか．

## 結果
結論を言うと，起動できませんでした:cry:

---

まずそもそもi3.metalのOSはどうやって起動しているのでしょうか．
i3.metalでは最近のAWSのインスタンスで採用されているNitroと呼ばれるシステムが利用されています．
Nitroは独自のHWを利用して，透過的なEBSやENAの利用や，HW的な仮想化(MR-IOV?)を実現しています．

ファームウェアもUEFIなどではなく，独自のものを利用しているようです[^0]．
dmesgや/sys/firmware/を確認する限り，EFIの利用を示すものはなく，またルートディスクにもEFI用のファイルシステムは存在しません．
一方でルートディスクにはBIOS用のパーティションがあるので，どうやら形式的にはBIOSで起動しているみたいです (AMIとしてAmazon Linuxを利用しています)．

```
$ fdisk -l
...
ディスク識別子: 534763C8-FA09-4A6F-9848-957F8DF63F89

デバイス         開始位置 最後から   セクタ サイズ タイプ
/dev/nvme0n1p1       4096 16777182 16773087     8G Linux ファイルシステム
/dev/nvme0n1p128     2048     4095     2048     1M BIOS 起動

パーティション情報の項目がディスクの順序と一致しません。
```

また，/etc/default/grubのブートオプションに適当なパラメータを追加したところ，そのパラメータがちゃんと設定されてOSが起動したので，grubからOSが起動していることは間違いなさそうです．

そこで，grubからBitVisorを起動するような設定で試してみました... が， 残念ながら起動しませんでした．

そういえばEPT用に1コアあたり4MBぐらいメモリを確保していた気がしたので，もしかしたらメモリの確保に失敗しているのかと思いBitVisorが確保するメモリ量を増やして見ましたが，結果は変わらず．
他にもいくつか設定を試しましたが，再起動に時間がかかる(5分~)こと，BitVisorでログをシリアルコンソールに出力するようにしても，"システムログの取得"にBitVisorのログが全く表示されなかったことなどから，今回は断念しました．

基本的にレガシーなサポートは切っているように思えるので，BIOSの機能が利用できないんでしょうか．よく分かりません．

頑張ればできなくもない気もするので時間（とお金）に余裕ある方お試しください．

[^0]: https://www.youtube.com/watch?v=e8DVmwj3OEs&t=28m38s

## ちなみに
i3.metalは[4.992USD/h](https://aws.amazon.com/jp/ec2/pricing/on-demand/)です．それなりにいいお値段ですので不要なインスタンスの放置に注意しましょう．
またまだ東京リージョンにはi3.metalはありません．自分はオレゴンを使いました．

そういえば，[SoftLayer](http://www.softlayer.com/)はIPMIからUEFI BIOSにアクセスできて，BitVisorも普通に動くということを聞いたような気がします．お金がないので試せませんが..

## おまけ
調べたi3.metalの情報をいくつか載せておきます． 


- `lspci | grep Non`

```
17:00.0 Non-Volatile memory controller: Amazon.com, Inc. Device 0061
36:00.0 Non-Volatile memory controller: Amazon.com, Inc. Device cd00
36:00.1 Non-Volatile memory controller: Amazon.com, Inc. Device cd00
37:00.0 Non-Volatile memory controller: Amazon.com, Inc. Device cd00
37:00.1 Non-Volatile memory controller: Amazon.com, Inc. Device cd00
81:00.0 Non-Volatile memory controller: Amazon.com, Inc. Device cd00
81:00.1 Non-Volatile memory controller: Amazon.com, Inc. Device cd00
82:00.0 Non-Volatile memory controller: Amazon.com, Inc. Device cd00
82:00.1 Non-Volatile memory controller: Amazon.com, Inc. Device cd00
```

- `nvme list`

```
Node             SN                   Model                                    Namespace Usage                      Format           FW Rev
---------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- --------
/dev/nvme0n1     AWS13D9ED66A867451AB Amazon EC2 NVMe Instance Storage         1           1.90  TB /   1.90  TB    512   B +  0 B   0
/dev/nvme1n1     AWS1300BEA35EAC32D86 Amazon EC2 NVMe Instance Storage         1           1.90  TB /   1.90  TB    512   B +  0 B   0
/dev/nvme2n1     AWS0F284CE7BFC0BA529 Amazon EC2 NVMe Instance Storage         1           1.90  TB /   1.90  TB    512   B +  0 B   0
/dev/nvme3n1     AWS01A5520632FFCB2ED Amazon EC2 NVMe Instance Storage         1           1.90  TB /   1.90  TB    512   B +  0 B   0
/dev/nvme4n1     vol0237140f542b7f16e Amazon Elastic Block Store               1           0.00   B /   8.59  GB    512   B +  0 B   1.0
/dev/nvme5n1     AWS031C9ED6172B2C80D Amazon EC2 NVMe Instance Storage         1           1.90  TB /   1.90  TB    512   B +  0 B   0
/dev/nvme6n1     AWS13B8756FFC6D9306A Amazon EC2 NVMe Instance Storage         1           1.90  TB /   1.90  TB    512   B +  0 B   0
/dev/nvme7n1     AWS08C26BC91B701F61E Amazon EC2 NVMe Instance Storage         1           1.90  TB /   1.90  TB    512   B +  0 B   0
/dev/nvme8n1     AWS13D3D2753DD21E866 Amazon EC2 NVMe Instance Storage         1           1.90  TB /   1.90  TB    512   B +  0 B   0
```

i3.metalには8本のローカルなNVMeストレージ及び，ルートディスクがついています．
ルートのディスクはNVMe SSDにOSからは見えますが，実体としてはNitroの独自のチップでEBSに接続されているようです．
OSの起動もこのディスクからおこなわれています．


- cpuinfo

```
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 79
model name      : Intel(R) Xeon(R) CPU E5-2686 v4 @ 2.30GHz
stepping        : 1
microcode       : 0xb000022
cpu MHz         : 1202.209
cache size      : 46080 KB
physical id     : 0
siblings        : 36
core id         : 0
cpu cores       : 18
apicid          : 0
initial apicid  : 0
fpu             : yes
fpu_exception   : yes
cpuid level     : 20
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb cat_l3 cdp_l3 invpcid_single pti intel_ppin tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm cqm rdt_a rdseed adx smap intel_pt xsaveopt cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local dtherm ida arat pln pts
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf
bogomips        : 4600.00
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:
```

- lstopo

![lstopo.png](https://qiita-image-store.s3.amazonaws.com/0/153099/59686f19-8758-1696-61b5-4578188fd73b.png)