实习的工资和 Relocation 补贴感觉有点不大用的完,最近又下了一张新信用卡,于是就打算把 NAS 买了。一开始打算买群晖,后来看了一眼价格,立即点击关闭网页。然后再看了看 MicroServer Gen10 Plus,发现主要问题是 PCIe 的可扩展性不够,于是选择了同等价位的 ML30 Gen10 。

概况
我家里大概的情况是:
- 因为我毕业之后要搬一次家,所以我目前暂时不购买 Rack mount 的产品
- 我对 SMB Direct (RDMA) 有需求,家里已经有 10GbE 的网
- 我还需要开一些虚拟机(大概 12 个),网卡如果有 SR-IOV 是最好的
- 暂时对噪音有一些要求
- 我家里有 Active Directory 域,所以身份认证集成很方便
硬件
这个机器有很多的 SKU,最便宜的大概 500 多刀样子,默认硬盘不可热插拔,走主板自带的 SATA 控制器。乞丐版的 PCIe 风扇也是默认没装需要另买的,不过一些散热量不高的卡不装也没事(虽然 iLO 会警告你); iLO 5 的独立网口和 License 也是需要加钱的(虽然 iLO Advanced 免费到 2021 )。实际上把硬盘改热插拔是可行的(但是你需要买其他型号的 Backplane + 笼子 + HBA ),如果觉得热插拔是硬需求的话可以加点钱上有热插拔的版本,大概 800 刀。我的硬盘还在陆续到达中,所以目前的硬件配置是这样的:

- 这台机器的 SR-IOV 是全的,默认能用
- 自带网卡是 Intel I350,两个口,有 SR-IOV 支持(默认每个口 6 个 VF )
- 我再加了一块 I350-T4 然后直接把 PF 通进了某个虚拟机里(特殊需要),和上面那个卡一样,也是每个口默认六个 VF
- 加了一块 Mellanox ConnectX-4 Lx,一个 PF 通进存储虚拟机里跑 RDMA,另一个口暂时留空
- 硬盘买的都是 WD/HGST UltraStar (从三个 supplier 买了不同批次的硬盘,还有一些盘在路上),系统盘就用了一块普通的 M2 NVMe SSD
- 内存插满了 64GB UDIMM ECC
噪音情况的话,把它丢在单独的一个房间里,关上门声音就不见了。放在客厅的话它的噪音跟我的空调近似,然后稍微轻那么一点。
SMB Direct
存储机跑的是 Windows Server 2019 Datacenter,然后直接 JBOD 跑 Storage Space Mirror 然后打开了数据去重。由于一些 concern,我在 Storage Space 上使用了 NTFS 而不是 ReFS 。默认情况下 Windows 检测到支持的卡会自动打开 SMB Direct,可以用命令检查一下:
PS C:\Users\redacted> Get-NetAdapterRdma
Name InterfaceDescription Enabled PFC ETS
---- -------------------- ------- --- ---
vEthernet (Internal LO... Hyper-V Virtual Ethernet Adapter False NA NA
PCIe Slot 3 Port 2 Mellanox ConnectX-4 Lx Ethernet Adapt... True ...
PS C:\Users\redacted> Set-NetOffloadGlobalSetting -NetworkDirect Enabled
创建了 SMB 共享,然后创建了一个家庭 NAS RW 访问的 SG,把自己的域用户加了进去,直接不输入凭据访问。然后随便跑了几个 smoke test:

客户端和 NAS 都支持 SMB Direct 的情况下,基本上速度能打满 link (写进 SSD )或者盘(写进 Storage Space 的 HDD )。往 Storage Space 里写的情况下大概稳定 200MB/s 样子,比较符合 UltraStar 这个盘的样子。
然后是 SMB Direct 看番。注意没有什么 TCP/IP 流量( RDMA 网络正常现象):

对于不支持 SMB Direct 的设备,我另外有一块 I350 VF 通给了虚拟机用来承载这些流量。大概 802.11ac 的情况下稳定跑个 500Mbps 问题还是不大的。
Misc
- 记得调整 WU 设置以避免意外重启,我是加入了域然后从组策略分发的
- 在虚拟机里直通磁盘开 Storage Space 的时候,把 Host 上的
Microsoft Storage Spaces SMP和Storage Tiering服务禁用掉,然后再禁用SpacePort驱动 (i.e. Start = 4) 以避免不必要的麻烦