HN 日本語サマリー

← 一覧へ戻る
インフラ・DevOps

Virtual Oxide Labs: 完全なOxideラックのエミュレーション

Virtual Oxide Labs: Emulating a Full Oxide Rack (oxide.computer)

53 pointsby tosh4 コメント

要約

Oxide ComputerのProduct Assuranceチームは、顧客データセンターに配置されるラック規模のハードウェアのテストと開発に課題を抱えています。この課題に対処するため、同社は「Voxel」と呼ばれる新しい仮想ラボ環境を開発しました。Voxelは、実際のOxideラックのハードウェアとソフトウェアを忠実に再現し、開発者が手元で多様な構成をテストできるようにします。

全文翻訳

14 Oct 2026 Virtual Oxide Labs: 完全なOxideラックのエミュレーション Steve Karam Product Assurance ラック規模のハードウェアのテストと開発における問題は、ラック規模のものがそれほど容易に入手できないことです。DDR5を通貨のように扱うことはさておき、部品が豊富にあったとしても、完成したラックはすぐに最前線(つまり、お客様のデータセンター)に送られてしまいます。 OxideのProduct Assuranceチームのメンバーとして、私はそれは全く不公平でありながら、完全に理にかなっていると感じています。そのため、私たちは少し創造的になる必要があります。私たちは以下のことができる必要があります。 多様なお客様のネットワーキングトポロジーを再現する 実際のコントロールプレーンを実行する 最新バージョンのソフトウェアをテストする ハードウェアコンポーネント(私たちは結局ラックを作っているのですから)を、スイッチやマイクロコントローラーを含めて表現する そして、一番の難関は、特別な「テストバージョン」のリリースをカットすることなく、それを実行する必要があることです。CIを洗練させたいということもありますが、それはフェアではないからです。 誤解しないでください。私たちは何もトリックがないわけではありません。私が昨年Oxideに入社したとき、最初に紹介されたものの一つが、私たちのラックレットでした。つまり、平均よりも小さいラックで、それぞれ4つのスレッドと2つのスイッチを備えています。これらのラックレットは、実際のラックと同じように初期化して実行できます。なぜなら、それらは実際のラックだからです。ただ、経済的に販売できるフォームファクタではないだけです。しかし、テストには最適です。現在4つあり、すぐに8つになります。これにより、ハードウェア/ソフトウェア要件のあらゆる組み合わせをテストできます。 また、Omicronを実行するための様々なシミュレーション方法もあります。それらについては、「How to Run Simulated」や、より詳細な「How to Run Guide」で読むことができます。ここではあまり詳しく説明しませんが、コントロールプレーンのほとんどの部分(およびそれ以上)を、独立して、同時に、様々な程度のシミュレーションで実行できると言えば十分でしょう。 ボクセル(Voxel)とは何か? ゲームQ*bertを覚えていますか?それは、最初に広く人気を博したアイソメトリックゲームの一つで、少しこのようでした。 なぜ私はこのとてつもなく小さなゲームのスクリーンショットを見せているのでしょうか?さて、その画像の中の各立方体は「ボクセル」、つまり3D空間の点(ポイント)を表しています。実際にはピクセルの3Dバージョンです。Volume Element + Pixel = Voxel。面白いでしょう? さて、Oxideにとって、Virtual OXidE Labs(またはVoxel)は、単一のハードウェアに詰め込まれた信じられないほどの忠実度を意味します。それは、VMで動作するまともなラックをハックすることを可能にした、以前の仮想ラボ(a4x2として知られていた)の精神的な後継者です。 ところで、「忠実度」という言葉に注意してください。なぜなら、Bryan Cantrillが言うように、それはプライムディレクティブだからです。ラボは、ハックや変更なしに、標準のOxideソフトウェアを使用すべきです。 これがVoxelが私たちに提供してくれるものです。Rustで構築された、完全なソフトウェアエミュレーションスタックで、様々な現実的な構成を構築およびテストできます。 Propolisによって提供されるスレッド仮想化 DebianとFRRP4を搭載したOxide独自のSoftNPU(P4スイッチ)によるBGP(番号付きおよび番号なし)または静的ネットワーキング Service Processor(SP)およびRoot of Trust(RoT)用のマイクロコントローラーシミュレーションおよびエミュレーション さらに、これらのすべての機能を比較的コンパクトなフットプリントで提供します。自宅では、私はVoxelラボを、32スレッドのAMD Ryzen 9 9955HXと96GB RAMを搭載したMinisforum MS-A2ミニPCで実行しています。そのコンピューターでは、6つのスレッドを簡単に起動できます。1つのラックの形式でも、マルチラック構成(2つの別々のラック、1つの管理プレーン)でも可能です。必要なのは、Oxide Heliosと十分に高速なNVMeドライブだけです。起動すると、約10分で、各「スレッド」が独自のPropolis VM内にあり、スイッチ(これもPropolis内)やその他のインフラストラクチャとともに、完全なOxideラックが完成します。 イメージ作成 実際のOxideソフトウェアを使用しなければならないと言ったことを覚えていますか?それは実際には物事を容易にします。私たちが最初に行うこと(ハイパーバイザーツールの一般的な慣習に従って)は、再利用可能なスナップショットを作成することです。 Oxideのスレッドは、常に2つのうちの1つです。通常の(第一世代では「gimlet」、現在の世代では「cosmo」)または「scrimlet」(サイドカーと配線され、スイッチゾーンを実行するスレッド)です。その複雑さは驚くほどエレガントです。ネットワークドキュメントでさらに詳しく読むべきです。 Voxelのスナップショットを作成するために、私たちがしなければならないのは、「スレッド」(仮想マシン)を作成し、その上にコントロールプレーン(Omicron)をインストールし、設定ポイントの前にスナップショットを取るだけです。これで、すぐに起動できるスレッドが完成します。コントロールプレーンは2つの方法のいずれかでインストールできます。 ソースから VoxelはGitHubのOmicronリポジトリをクローンし(または迅速な開発のためにローカルで定義されたソースを使用し)、cargoを使用してコンパイルします。 TUFリポジトリから Tufaceousを使用して、The Update Framework(TUF)と当社のCIツールBuildomatを使用してOmicronリリースをパッケージ化します。 2番目のオプションを例として、voxel image createがスレッド構成を構成する主要な部分をプルアウトするプロセスの開始部分を次に示します。 $ pfexec ./target/debug/voxel image create --from-tuf ../5d176e0be7e5cc0d3288c1bef10005ec31f2cd7c.zip 5d176e0be7e5cc0d3288c1bef10005ec31f2cd7c [voxel] TUF source ../5d176e0be7e5cc0d3288c1bef10005ec31f2cd7c.zip: system version 23.0.0-0.ci+git5d176e0be7e, omicron 5d176e0be7e [voxel] extracted 12 zones from ../5d176e0be7e5cc0d3288c1bef10005ec31f2cd7c.zip [voxel] extracted 3 measurement corpus artifacts [voxel] extracting host artifacts -> /export/home/helios/voxel-rawfix/target/debug/../../voxel-image/.tuf-host [voxel] host boot image 1258295296 bytes, phase 1 rom 33554432 bytes [voxel] extracted SP/RoT firmware -> /export/home/helios/voxel-rawfix/target/debug/../../voxel-image/.tuf-fw/ca9184058bd7 かなりの量の展開とステージングの後、すべてが書き込まれ/インストールされるVMが起動します。そして最後に: [voxel] ready: voxel-cp version=unknown unpacked_artifacts=18 built=2026-09-06T21:37:58 [voxel] clearing device-instance map, halting [voxel] flushing, up to 25s [voxel] stopping hypervisor [voxel] writing voxel image voxel-cp-5d176e0be7e-tuf そのイメージはzfsスナップショットであり、ラックを作成するために使用および再利用できます。 起動準備完了 ラックの起動は同様のプロセスを使用しますが、コントロールプレーンはすでにインストールされています。この時点で必要なのは以下の通りです。 「frr」イメージ(ネットワーキング用のDebian VM) コントロールプレーンイメージ(作成したものなど) 各仮想スレッドに割り当てを与えるvoxel-initエージェント ログ出力はかなり長いですが、必要であればスクロールして確認できます。後で要約します。 $ pfexec ./target/debug/voxel launch --emu [voxel] sled-agent config schema (image properties): data_links=Tagged disks=Hardcoded Writing key pair to "./cargo-bay/sprockets/test-root-a.key.pem" Writing key pair to "./cargo-bay/sprockets/test-signer-a1.key.pem"... Writing certificate to "./cargo-bay/sprockets/test-root-a.cert.pem" Writing certificate to "./cargo-bay/sprockets/test-signer-a1.cert.pem"... Writing pki path to "./cargo-bay/sprockets/test-sprockets-auth-0.certlist.pem" Writing pki path to "./cargo-bay/sprockets/test-alias-0.certlist.pem"... add net fdb0:a840:2500:1::/64: gateway fdb0:a840:25ff:0::2 add net fdb0:a840:2500:5::/64: gateway fdb0:a840:25ff:0::4 [sp-emu] instance state dir: /export/home/helios/voxel-unzip/sp-fleet/r0/sp-emu/state/33300 [identity] seed = 0x2aac7ae3f8cfbb1e (3074967765137734430) [identity] SP UID 13120858064df80da1642f2b, RoT UUID 00a94a8e206f3f138a790fba1b12db36 [flash] Hubris archive /export/home/helios/voxel-unzip/sp-fleet/r0/sp-emu/sidecar.archive -> /export/home/helios/voxel-unzip/sp-fleet/r0/sp-emu/state/33300/archives/sp.zip flashed 786688 bytes into slot A (base 0x08000000, reset PC 0x080002e8) of /export/home/helios/voxel-unzip/sp-fleet/r0/sp-emu/state/33300/sp-flash.bin [sp-emu] instance state dir: /export/home/helios/voxel-unzip/sp-fleet/r0/sp-emu/state/33310 [identity] seed = 0xa65abed0e20d08d1 (11987103162554976465) [identity] SP UID 72a3c3327682e0df38de478a, RoT UUID fcb600f7322f3393899f72036aa2b4fd [flash] Hubris archive /export/home/helios/voxel-unzip/sp-fleet/r0/sp-emu/gimlet.archive -> /export/home/helios/voxel-unzip/sp-fleet/r0/sp-emu/state/33310/archives/sp.zip flashed 728320 bytes into slot A (base 0x0800