外部記憶装置

脳みそ小さすぎるからメモしとく

R86S レビュー(OpenBSD 編)

R86S レビューシリーズ

前回までのあらすじ

小型謎PCである R86S に Ubuntu 22.10 をインストールし、iperf3 を使ってネットワーク性能を計測した。

OpenBSD

OpenBSDNetBSD からフォークされた 4.4 BSD 由来の UNIX ライクなOSである。

The OpenBSD project produces a FREE, multi-platform 4.4BSD-based UNIX-like operating system. Our efforts emphasize portability, standardization, correctness, proactive security and integrated cryptography. As an example of the effect OpenBSD has, the popular OpenSSH software comes from OpenBSD. (OpenBSD より)

私自身、OpenBSD を始めとする FreeBSDNetBSD には触れたことがほとんどなく、適当なことは書けないため OpenBSD の紹介はここまでとする。

OpenBSD on R86S

R86S では、 OpenBSD は標準ではサポートされていない。 しかし、プロセッサ自体は x86_64 であり、基本的な部分は普通の x86_64 サーバーと変わらないため、起動ぐらいは問題なく行うことができると考えられる。 今回は、OpenBSD 7.2 をインストールし、起動から搭載されている 10G NIC(Mellanox Connect-X3) が動作するかまで検証することにする。

インストールメディアの作成

www.openbsd.org

USBメモリからインストールするため、install.imgamd64版をダウンロードする。

USBメモリへの書き込みは、Rufusを利用した。 公式には対応していないように見えるが、正常に書き込むことができた。

インストール

USBメモリとUSBキーボード、HDMIディスプレイを接続した。 ブート順はUbuntu 22.10のインストール時にUSBメモリ→eMMCの順に変更しているため、 特に設定変更なしにUSBメモリからインストーラーを起動することができた。

RJ45ポートにUTPケーブルを指しておくことで、DHCPIPアドレスを自動で割り当ててくれる。 ホスト名やSSHサーバー、インストール先のディスクレイアウト、利用するミラーサーバー等の設定を行うことで、インストールが進む。 インストール完了後に再起動し、USBメモリを抜去した状態で起動すればローカルディスクからOpenBSDが起動する。

初回ログイン

$ ssh root@192.168.13.118
root@192.168.13.118's password:

OpenBSD 7.2 (GENERIC.MP) #758: Tue Sep 27 11:57:54 MDT 2022

Welcome to OpenBSD: The proactively secure Unix-like operating system.

Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code.  With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.

r86s-openbsd# uname -a
OpenBSD r86s-openbsd 7.2 GENERIC.MP#758 amd64

必要なパッケージ類のインストール

lspci を使うために、pciutilsパッケージをインストールしておく。

r86s-openbsd# pkg_add pciutils
quirks-6.42 signed on 2023-02-27T17:27:27Z
pciutils-3.6.4: ok

Mellanox ConnectX-3 の確認

r86s-openbsd# lspci
00:00.0 Host bridge: Intel Corporation Device 4e24
00:02.0 VGA compatible controller: Intel Corporation Device 4e61 (rev 01)
00:14.0 USB controller: Intel Corporation Device 4ded (rev 01)
00:14.2 RAM memory: Intel Corporation Device 4def (rev 01)
00:16.0 Communication controller: Intel Corporation Device 4de0 (rev 01)
00:1a.0 SD Host controller: Intel Corporation Device 4dc4 (rev 01)
00:1c.0 PCI bridge: Intel Corporation Device 4db8 (rev 01)
00:1c.1 PCI bridge: Intel Corporation Device 4db9 (rev 01)
00:1c.2 PCI bridge: Intel Corporation Device 4dba (rev 01)
00:1c.4 PCI bridge: Intel Corporation Device 4dbc (rev 01)
00:1f.0 ISA bridge: Intel Corporation Device 4d87 (rev 01)
00:1f.3 Audio device: Intel Corporation Device 4dc8 (rev 01)
00:1f.4 SMBus: Intel Corporation Device 4da3 (rev 01)
00:1f.5 Serial bus controller [0c80]: Intel Corporation Device 4da4 (rev 01)
01:00.0 Ethernet controller: Intel Corporation Device 15f3 (rev 03)
02:00.0 Ethernet controller: Intel Corporation Device 15f3 (rev 03)
03:00.0 Ethernet controller: Intel Corporation Device 15f3 (rev 03)
04:00.0 Ethernet controller: Mellanox Technologies MT27500 Family [ConnectX-3]

PCIバス上のデバイスとしては正しく認識されている。

r86s-openbsd# ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 32768
        index 5 priority 0 llprio 3
        groups: lo
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x5
        inet 127.0.0.1 netmask 0xff000000
igc0: flags=808843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,AUTOCONF4> mtu 1500
        lladdr 00:f0:cb:ef:d9:45
        index 1 priority 0 llprio 3
        groups: egress
        media: Ethernet autoselect (1000baseT full-duplex)
        status: active
        inet 192.168.13.118 netmask 0xffffff00 broadcast 192.168.13.255
igc1: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:f0:cb:ef:d9:46
        index 2 priority 0 llprio 3
        media: Ethernet autoselect (none)
        status: no carrier
igc2: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
        lladdr 00:f0:cb:ef:d9:47
        index 3 priority 0 llprio 3
        media: Ethernet autoselect (none)
        status: no carrier
enc0: flags=0<>
        index 4 priority 0 llprio 3
        groups: enc
        status: active
pflog0: flags=141<UP,RUNNING,PROMISC> mtu 33136
        index 6 priority 0 llprio 3
        groups: pflog

しかし、NICとしては認識できていないようである。

カーネルのログを確認すると、

r86s-openbsd# dmesg
OpenBSD 7.2 (GENERIC.MP) #758: Tue Sep 27 11:57:54 MDT 2022
    deraadt@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP
real mem = 8341798912 (7955MB)
avail mem = 8071569408 (7697MB)
random: good seed from bootblocks
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 3.3 @ 0x74c7a000 (116 entries)
bios0: vendor American Megatrends International, LLC. version "JSP18418" date 09/27/2022
bios0: GoWin Solution R86S
acpi0 at bios0: ACPI 6.2
acpi0: sleep states S0 S3 S4 S5
acpi0: tables DSDT FACP MCFG FIDT SSDT SSDT SSDT HPET APIC PRAM SSDT SSDT NHLT LPIT SSDT SSDT DBGP DBG2 SSDT DMAR SSDT TPM2 WSMT FPDT
acpi0: wakeup devices PEGP(S4) PEGP(S4) PEGP(S4) PEGP(S4) RP01(S4) PXSX(S4) RP02(S4) PXSX(S4) RP03(S4) PXSX(S4) RP04(S4) PXSX(S4) RP05(S4) PXSX(S4) RP06(S4) PXSX(S4) [...]
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpimcfg0 at acpi0
acpimcfg0: addr 0xc0000000, bus 0-255
acpihpet0 at acpi0: 19200000 Hz
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Celeron(R) N5105 @ 2.00GHz, 2793.96 MHz, 06-9c-00
cpu0: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,CX16,xTPR,PDCM,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,RDRAND,NXE,RDTSCP,LONG,LAHF,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,SMEP,ERMS,RDSEED,SMAP,CLFLUSHOPT,CLWB,PT,SHA,UMIP,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu0: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 1MB 64b/line 12-way L2 cache, 4MB 64b/line 16-way L3 cache
cpu0: smt 0, core 0, package 0
mtrr: Pentium Pro MTRR support, 10 var ranges, 88 fixed ranges
cpu0: apic clock running at 38MHz
cpu0: mwait min=64, max=64, C-substates=0.2.0.2.2.1.1.1, IBE
cpu1 at mainbus0: apid 2 (application processor)
cpu1: Intel(R) Celeron(R) N5105 @ 2.00GHz, 2793.96 MHz, 06-9c-00
cpu1: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,CX16,xTPR,PDCM,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,RDRAND,NXE,RDTSCP,LONG,LAHF,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,SMEP,ERMS,RDSEED,SMAP,CLFLUSHOPT,CLWB,PT,SHA,UMIP,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu1: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 1MB 64b/line 12-way L2 cache, 4MB 64b/line 16-way L3 cache
cpu1: smt 0, core 1, package 0
cpu2 at mainbus0: apid 4 (application processor)
cpu2: Intel(R) Celeron(R) N5105 @ 2.00GHz, 2793.95 MHz, 06-9c-00
cpu2: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,CX16,xTPR,PDCM,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,RDRAND,NXE,RDTSCP,LONG,LAHF,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,SMEP,ERMS,RDSEED,SMAP,CLFLUSHOPT,CLWB,PT,SHA,UMIP,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu2: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 1MB 64b/line 12-way L2 cache, 4MB 64b/line 16-way L3 cache
cpu2: smt 0, core 2, package 0
cpu3 at mainbus0: apid 6 (application processor)
cpu3: Intel(R) Celeron(R) N5105 @ 2.00GHz, 2793.96 MHz, 06-9c-00
cpu3: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,EST,TM2,SSSE3,SDBG,CX16,xTPR,PDCM,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,RDRAND,NXE,RDTSCP,LONG,LAHF,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,SMEP,ERMS,RDSEED,SMAP,CLFLUSHOPT,CLWB,PT,SHA,UMIP,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
cpu3: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 1MB 64b/line 12-way L2 cache, 4MB 64b/line 16-way L3 cache
cpu3: smt 0, core 3, package 0
ioapic0 at mainbus0: apid 2 pa 0xfec00000, version 20, 120 pins
acpiprt0 at acpi0: bus 0 (PC00)
acpiprt1 at acpi0: bus 1 (RP01)
acpiprt2 at acpi0: bus 2 (RP02)
acpiprt3 at acpi0: bus 3 (RP03)
acpiprt4 at acpi0: bus -1 (RP04)
acpiprt5 at acpi0: bus 4 (RP05)
acpiprt6 at acpi0: bus -1 (RP06)
acpiprt7 at acpi0: bus -1 (RP07)
acpiprt8 at acpi0: bus -1 (RP08)
acpiprt9 at acpi0: bus -1 (RP09)
acpiprt10 at acpi0: bus -1 (RP10)
acpiprt11 at acpi0: bus -1 (RP11)
acpiprt12 at acpi0: bus -1 (RP12)
acpiprt13 at acpi0: bus -1 (RP13)
acpiprt14 at acpi0: bus -1 (RP14)
acpiprt15 at acpi0: bus -1 (RP15)
acpiprt16 at acpi0: bus -1 (RP16)
acpiprt17 at acpi0: bus -1 (RP17)
acpiprt18 at acpi0: bus -1 (RP18)
acpiprt19 at acpi0: bus -1 (RP19)
acpiprt20 at acpi0: bus -1 (RP20)
acpiprt21 at acpi0: bus -1 (RP21)
acpiprt22 at acpi0: bus -1 (RP22)
acpiprt23 at acpi0: bus -1 (RP23)
acpiprt24 at acpi0: bus -1 (RP24)
acpiec0 at acpi0: not present
acpipci0 at acpi0 PC00: 0x00000000 0x00000011 0x00000001
"ACPI000E" at acpi0 not configured
"INT34C8" at acpi0 not configured
com4 at acpi0 UAH2 addr 0xfe036000/0x8 irq 34: ns16550a, 16 byte fifo
acpibtn0 at acpi0: SLPB
"PNP0C14" at acpi0 not configured
"PNP0C14" at acpi0 not configured
"INT33A1" at acpi0 not configured
acpibtn1 at acpi0: PWRB
tpm0 at acpi0 TPM_ 2.0 (CRB) addr 0xfed40000/0x5000, device 0x00000000 rev 0x0
"PNP0C0B" at acpi0 not configured
"PNP0C0B" at acpi0 not configured
"PNP0C0B" at acpi0 not configured
"PNP0C0B" at acpi0 not configured
"PNP0C0B" at acpi0 not configured
acpipwrres0 at acpi0: WRST
acpicpu0 at acpi0: C1(@1 halt!), PSS
acpicpu1 at acpi0: C1(@1 halt!), PSS
acpicpu2 at acpi0: C1(@1 halt!), PSS
acpicpu3 at acpi0: C1(@1 halt!), PSS
acpipwrres1 at acpi0: FN00, resource for FAN0
acpipwrres2 at acpi0: FN01, resource for FAN1
acpipwrres3 at acpi0: FN02, resource for FAN2
acpipwrres4 at acpi0: FN03, resource for FAN3
acpipwrres5 at acpi0: FN04, resource for FAN4
acpitz0 at acpi0: critical temperature is 119 degC
acpipwrres6 at acpi0: PIN_
acpivideo0 at acpi0: GFX0
acpivout0 at acpivideo0: DD1F
acpivout1 at acpivideo0: DD2F
cpu0: Enhanced SpeedStep 2793 MHz: speeds: 2001, 2000, 1900, 1800, 1700, 1600, 1500, 1400, 1300, 1200, 1100, 1000, 900, 800 MHz
pci0 at mainbus0 bus 0
0:31:5: mem address conflict 0xfe010000/0x1000
pchb0 at pci0 dev 0 function 0 "Intel Jasper Lake Host" rev 0x00
inteldrm0 at pci0 dev 2 function 0 "Intel UHD Graphics" rev 0x01
drm0 at inteldrm0
inteldrm0: msi, JASPERLAKE, gen 11
xhci0 at pci0 dev 20 function 0 "Intel Jasper Lake xHCI" rev 0x01: msi, xHCI 1.10
usb0 at xhci0: USB revision 3.0
uhub0 at usb0 configuration 1 interface 0 "Intel xHCI root hub" rev 3.00/1.00 addr 1
"Intel Jasper Lake Shared SRAM" rev 0x01 at pci0 dev 20 function 2 not configured
"Intel Jasper Lake HECI" rev 0x01 at pci0 dev 22 function 0 not configured
sdhc0 at pci0 dev 26 function 0 "Intel Jasper Lake eMMC" rev 0x01: apic 2 int 16
sdhc0: SDHC 3.0, 200 MHz base clock
sdmmc0 at sdhc0: 8-bit, sd high-speed, mmc high-speed, ddr52, dma
ppb0 at pci0 dev 28 function 0 "Intel Jasper Lake PCIE" rev 0x01: msi
pci1 at ppb0 bus 1
igc0 at pci1 dev 0 function 0 "Intel I225-V" rev 0x03, msix, 4 queues, address 00:f0:cb:ef:d9:45
ppb1 at pci0 dev 28 function 1 "Intel Jasper Lake PCIE" rev 0x01: msi
pci2 at ppb1 bus 2
igc1 at pci2 dev 0 function 0 "Intel I225-V" rev 0x03, msix, 4 queues, address 00:f0:cb:ef:d9:46
ppb2 at pci0 dev 28 function 2 "Intel Jasper Lake PCIE" rev 0x01: msi
pci3 at ppb2 bus 3
igc2 at pci3 dev 0 function 0 "Intel I225-V" rev 0x03, msix, 4 queues, address 00:f0:cb:ef:d9:47
ppb3 at pci0 dev 28 function 4 "Intel Jasper Lake PCIE" rev 0x01: msi
pci4 at ppb3 bus 4
vendor "Mellanox", unknown product 0x1003 (class network subclass ethernet, rev 0x00) at pci4 dev 0 function 0 not configured
pcib0 at pci0 dev 31 function 0 "Intel Jasper Lake eSPI" rev 0x01
azalia0 at pci0 dev 31 function 3 "Intel Jasper Lake HD Audio" rev 0x01: msi
azalia0: no supported codecs
ichiic0 at pci0 dev 31 function 4 "Intel Jasper Lake SMBus" rev 0x01: apic 2 int 16
iic0 at ichiic0
"Intel Jasper Lake SPI" rev 0x01 at pci0 dev 31 function 5 not configured
isa0 at pcib0
isadma0 at isa0
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
vmm0 at mainbus0: VMX/EPT
efifb at mainbus0 not configured
scsibus1 at sdmmc0: 2 targets, initiator 0
sd0 at scsibus1 targ 1 lun 0: <SD/MMC, SCA128, 0000> removable
sd0: 119296MB, 512 bytes/sector, 244318208 sectors
vscsi0 at root
scsibus2 at vscsi0: 256 targets
softraid0 at root
scsibus3 at softraid0: 256 targets
root on sd0a (5fca080fa3ba5689.a) swap on sd0b dump on sd0b
inteldrm0: 1024x768, 32bpp
wsdisplay0 at inteldrm0 mux 1
wsdisplay0: screen 0-5 added (std, vt100 emulation)
vendor "Mellanox", unknown product 0x1003 (class network subclass ethernet, rev 0x00) at pci4 dev 0 function 0 not configured

とあり、カーネルが対応するデバイスドライバを持っていないのか、残念ながら認識できていないようである。 Mellanox のNICドライバは、mcx(4) として実装されている。

man.openbsd.org

The mcx driver supports Mellanox 5th generation Ethernet devices. Chipsets and cards in this group include:
- ConnectX-4 Lx EN
- ConnectX-4 EN
- ConnectX-5 EN
- ConnectX-6 EN

ConnectX-4, 5, 6 についてはサポートしているが、ConnextX-3 についてはサポートされていない。 実際に、デバイスドライバソースコードを確認すると、

github.com

static const struct pci_matchid mcx_devices[] = {
    { PCI_VENDOR_MELLANOX,  PCI_PRODUCT_MELLANOX_MT27700 },
    { PCI_VENDOR_MELLANOX,  PCI_PRODUCT_MELLANOX_MT27700VF },
    { PCI_VENDOR_MELLANOX,  PCI_PRODUCT_MELLANOX_MT27710 },
    { PCI_VENDOR_MELLANOX,  PCI_PRODUCT_MELLANOX_MT27710VF },
    { PCI_VENDOR_MELLANOX,  PCI_PRODUCT_MELLANOX_MT27800 },
    { PCI_VENDOR_MELLANOX,  PCI_PRODUCT_MELLANOX_MT27800VF },
    { PCI_VENDOR_MELLANOX,  PCI_PRODUCT_MELLANOX_MT28800 },
    { PCI_VENDOR_MELLANOX,  PCI_PRODUCT_MELLANOX_MT28800VF },
    { PCI_VENDOR_MELLANOX,  PCI_PRODUCT_MELLANOX_MT28908 },
    { PCI_VENDOR_MELLANOX,  PCI_PRODUCT_MELLANOX_MT2892  },
};

とあり、ConnectX-3 MT27500 は含まれない。 そのため、標準の OpenBSD では R86S に搭載されている ConnectX-3 は利用できない。 ドライバにパッチを当てることで利用できるかもしれない。

まとめ

R86S に OpenBSD 7.2 をインストールし、起動までは確認することができた。 しかし、ConnectX-3 に対応するドライバが存在しないことから、R86S に搭載されている 10G NIC は利用できないことが分かった。 どうしても利用したい場合は、別途ドライバにパッチを当てる必要があり、NIC 独自のオフロード機能の利用等は容易ではないと考えられる。