SNSで見つけた、Linux on RISC-Vが現状のRISC-Vを非常に端的に説明していて勉強になると思ったので、読んでみることにした。 以下は読書メモ。といってもほぼ一対一に翻訳してしまっている。
前回の続き。今回は例外処理とOpenSBIとか。
mobile.twitter.comSlides from my Linux on @RISC_V talk at @KernelRecipes https://t.co/6Jw5Lyv6eN #kr2022 #riscv pic.twitter.com/xT8MO457ug
— Drew Fustini 🐧📣 pdp7@mastodon.social 🐘 (@pdp7) June 3, 2022
RISC-Vの例外処理
- 例外は同期的に発生する
- 割り込みは非同期的に発生する
<x>cause
CSRはどの例外・割り込みが発生したかを記録する- m-modeではmcause, s-modeではscause
<x>E/IP
CSRレジスタの適切なビットが設定される。
Hartとは何か?
- Hardware Threadを意味する
- RISC-Vの各コアは命令フェッチユニットにおいて独立である。
- RISC-Vコアはマルチスレッドにより複数のHartをコア内に持つことができる
- 各Hartは、Linuxにおいては各プロセッサに相当する
RISC-Vの割り込み
- ローカルのHart毎の割り込み
- CLINT (Core Local Interruptor)
- CLIC (Core Local Interrupt Controller)
- グローバルな割り込み
- PLIC (Platform Level Interrupt Controller)
Advanced Interrupt Architecture (AIA)
- AIA SIGメーリングリストにより開発されている。
- APLIC (Advanced Platform-Level Interrupt Controller)がPLICに置き換えられる
- IMSIC (Incoming Message-Signaled Interrupt Controller) によるPCIeがサポートされている。
- AIAはACLINT (Advanced Core Local Interruptor)を含む
RISC-V Boot Flow
Supervisor Binary Interface (SBI)
- ISAではないRISC-Vの仕様
- これによりRISC-V命令に修正が入ることはない
- S-modeとM-modeにおける関数呼び出し規約
- UNIX-Class Platform Specificationで議論が行われている。
- RISC-V Platform Specificationで置き換えが行われる予定。
- いくつかのオプションとなる拡張が定義される予定
- Base拡張: マシンモードでの基本的な情報
- Timer拡張: 次のイベントのためのクロックを用いるプログラム向け
- IPI拡張: プロセッサ間割り込みを送信するための機能
- RFENCE拡張: リモートのHartに対するFENCE.I命令の実装
SBIの拡張
- Hart State Management (HSM)
- S-modeはHartのstop/start/suspend をリクエストすることができる
- システムリセット
- スーパーバイザモードのソフトウェアはシステムレベルのリブートもしくはシャットダウンをリクエストできる。
- パフォーマンスモニタユニット
ハイパーバイザー拡張
OpenSBI
- SBIのオープンソースな実装
- Core Library
- Platform Specific Libraries
- Full refence firmware for some platforms
- S-modeソフトウェアのためのランタイムサービスを提供
- SBI拡張により、プラットフォームが使用可能なランタイム拡張を定義する
- 未実装な命令については、OpenSBIがトラップを行いエミュレートする
OpenSBI汎用プラットフォーム
- 新しいプラットフォームに対して新しいOpenSBIのコードを追加する必要はない。
- First-stage Bootloader, U-Boot SPLはOpenSBIのデバイスツリーを通して、プラットフォーム特有の機能を認識する。
- 異なるプラットフォーム間でOpenSBIバイナリを共通化できる
- 多くのRISC-Vボードとエミュレータが汎用プラットフォームを使っている。
- Linuxディストリビューションは、新しいボードに対して異なるOpenSBIをリリースする必要はない。
OpenSBIドメインサポート
- OpenSBIドメインは、ハードウェアで異なるメモリ空間とHARTを分離するためにシステムレベルでの分割をするための機能
- Anup Patelにより説明がある。
UEFIサポート
- UEFIはファームウェアとオペレーティングシステム委のケル標準インタフェース。ほとんどのx86とArm64プラットフォームで使用されている。
- U-BootとTianoCore EDK2は両方ともRISC-VにおけるUEFIの実装を持っている。
- Grub2はRISC-VにおいてUEFIのぺいろーと度して使用できる。
- RISC-VにおけるUEFIのサポートはLinux 5.10で加えられた。
- ブート時のHartIDはブート時およびACPIテーブルもしくはDTの機能を読み取る前に識別されている。
- UEFI以外のシステムでは、HartIDはa0に渡される。しかしUEFIアプリ―ケーションではこれを許さない
- RISC-V EFIブートプロトコルでは、OSがブート時のHartIDを探すことが許されている。
- パブリックレビューは終了し、Sunil V LはLinuxカーネルにおけるEFIブートプロトコルのサポートを挿入した。
RISC-Vプラットフォーム仕様
- 目的は、「既存のソフトウェア」のハードウェアプラットフォームとオペレーティングシステムのインタフェースを統一すること。
- Platform Horizontal Subcommitteにより議論がなされている。
- RISC-V Summit 2021にてプラットフォームのトークがある。
- OS-Aプラットフォーム
- “A”: アプリケーション向け、LinuxのようなフルOSが動作するプラットフォームをサポートする
- OS-A共通仕様
- OS-A組み込みプラットフォーム
- OS_Aサーバプラットフォーム
- RVM-CSIプラットフォーム
- OS-A共通仕様
- OS-A組み込み仕様
- OS-Aサーバプラットフォーム
- RHELなどのエンタープライズ向けのLinuxディストリビューションがサーバクラスハードウェアにおいて動作すること
- システムの周辺機器、PCIe, Watchdog timer, システム日時、時刻などの機能をサポート
- RAS (Reliability, Availability, Serviceability)が必要となり、ECC RAMなどがサポートされる
- ACPIによりハードウェアの復帰やコンフィグレーションがサポートされる
- RISC-V ACPI Platform Requirementsを準拠することが必要である。
- RISC-V ACPI Platform仕様