FPGA開発日記

カテゴリ別記事インデックス https://msyksphinz.github.io/github_pages , English Version https://fpgadevdiary.hatenadiary.com/

Linux on RISC-V 2022を読む (2)

SNSで見つけた、Linux on RISC-Vが現状のRISC-Vを非常に端的に説明していて勉強になると思ったので、読んでみることにした。 以下は読書メモ。といってもほぼ一対一に翻訳してしまっている。

前回の続き。今回は例外処理とOpenSBIとか。

kernel-recipes.org

mobile.twitter.com


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ラップトップが、2コアでそれぞれ2Hartを持っている場合
    • Linuxからは、4プロセッサとしてみることができる。

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)を含む
    • tech-unixplatformspecメーリングリストによって開発されている
    • CLINTに対する互換性がある。
    • RISC-V SummitのTalkにてJohn Hauserが語っている。

RISC-V Boot Flow

Untitled

Supervisor Binary Interface (SBI)

  • ISAではないRISC-Vの仕様
    • これによりRISC-V命令に修正が入ることはない
  • S-modeとM-modeにおける関数呼び出し規約
    • Linuxのようなスーパーバイザモード(s-mode)上で動作するソフトウェアをRISC-V実装間でポータブルな実装にするために、特定の機能をプラットフォームで抽象化する。
  • 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 をリクエストすることができる
  • システムリセット
    • スーパーバイザモードのソフトウェアはシステムレベルのリブートもしくはシャットダウンをリクエストできる。
  • パフォーマンスモニタユニット
    • スーパーバイザモードのがRISC-VのMachineモードに実装されているハードウェアパフォーマンスカウンタを構成することができるインタフェースを持っている。
    • Performance Monitoring in RISC-V using perf

ハイパーバイザー拡張

  • ハイパーバイザースーパーバイザーモード(HS-mode): ホストカーネルが動作する
  • 仮想化スーパーバイザーモード(VS-mode): ゲストカーネルが動作する

Untitled

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バイナリを共通化できる

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プラットフォーム
    • ベアメタルアプリケーションもしくはRTOSが動作するRISC-Vのマイクロコントローラ向け
    • CSIはCommon Software Interfaceのこと; 簡単にポーティングできることを目的とし、バイナリの互換性は要求しない。
  • OS-A共通仕様
    • RVA22U / RVA22S ISAプロファイルを守っている必要がある。
    • デバッグ、タイマ、割り込みコントローラなどの仕様が定義されている
    • UART 8250, UART 16550などのシリアルコンソールが要求されている。
    • SBI拡張などのランタイムサービスが要求されている
    • ソフトウェアコンポーネントは、RISC-V Calling Convention SpecificationおよびRISC-V ELF specificationを守っている必要がある。
  • OS-A組み込み仕様
    • Single Board Computerもしくはモバイルデバイス向け
    • PMUカウンタおよびイベントパフォーマンスモニタ
    • Bootプロセスは、Embedded Base Boot Requirements (EBBR)規格に準拠する必要がある
    • EBBRはUEFIスペックのサブセットであり、U-Bootには実装されている。
    • Device Tree(DT)はハードウェアのコンフィグレーションを認識するために必要である。
    • GPT partitioningは、共有ストレージのために必要である。
  • OS-Aサーバプラットフォーム
    • RHELなどのエンタープライズ向けのLinuxディストリビューションがサーバクラスハードウェアにおいて動作すること
    • システムの周辺機器、PCIe, Watchdog timer, システム日時、時刻などの機能をサポート
    • RAS (Reliability, Availability, Serviceability)が必要となり、ECC RAMなどがサポートされる
    • ACPIによりハードウェアの復帰やコンフィグレーションがサポートされる
    • RISC-V ACPI Platform Requirementsを準拠することが必要である。
  • RISC-V ACPI Platform仕様
    • RISC-Vサーバプラットフォーム向けに十分なACPIテーブルを定義している
    • RISC-V向けに新しいテーブルが必要になる
      • RISC-V Hart Capabilities Table (RHCT)
      • RISC-V Timer Description Table (RTDT)
    • より詳細については、 ‘ACPI for RISC-V: Enabling Server Class Platforms’を参照のこと
      • Sunil V LがRISC-Vサミットにて講演している。