Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OpenSolaris を RISC-V で動かしたい
Search
hayashi
February 08, 2020
Programming
0
770
OpenSolaris を RISC-V で動かしたい
hayashi
February 08, 2020
Tweet
Share
Other Decks in Programming
See All in Programming
0→1と1→10の狭間で Javaという技術選定を振り返る/Reflecting on the Decision to Choose Java Between Scaling from 0 to 1 and 1 to 10
jaguar_imo
2
380
デフォルトにして至高、RubyMineの大好きな所
ruzia
0
310
SIMD Parallel Programming with the Vector API
josepaumard
0
150
Komplexe Oberflächen mit SVG und der Web Animation API
joergneumann
0
670
if constexpr文はテンプレート世界のラムダ式である
faithandbrave
3
640
[技育CAMPアカデミア]アイディアを形に!【超入門】スマホアプリ開発〜リリースまでの流れをご紹介
teamlab
PRO
0
360
データアナリストが行うDatabricksを活用したETLの自動化事例
shinoa
0
270
try!Swift Tokyo 2024 参加報告 LT
akidon0000
1
220
Snowflakeで眠ったデータを起こそう!
estie
0
120
単体テストを書かない技術 #phpcon_odawara
o0h
PRO
26
8.2k
educure_カリキュラム生操作マニュアル.pdf
linew_official
0
750
Milestoner
bkuhlmann
1
410
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
51
8.6k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
25
2.3k
A designer walks into a library…
pauljervisheath
200
23k
Done Done
chrislema
178
15k
Unsuck your backbone
ammeep
663
57k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
2
1.3k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
352
28k
Become a Pro
speakerdeck
PRO
11
4.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
40
4.4k
Rails Girls Zürich Keynote
gr2m
91
13k
Learning to Love Humans: Emotional Interface Design
aarron
267
39k
The Cult of Friendly URLs
andyhume
74
5.7k
Transcript
OpenSolaris を RISC-V で動かしたい カーネル/VM探検隊@関西 10回目 林 直之
OpenSolaris について 2005年、SUN が Solaris をオープンソース化 2010年、Oracle が SUN を買収
2010年、illumos が発足。 OpenSolaris の クローズドバイナリをオープンな実装に するのが目的だった Oracle が OpenSolaris の開発を中止したので事実上 の後継 現在も(細々と?)開発中 pg 2
OpenSolaris を RISC-V で動かしたい Oracle による Solaris の移植は絶望的 Oracle は
RISC-V Foundation の Platinum Members だった (2016) 現在、https://riscv.org/ の Members から消えて いるっぽい 動かしたければ自分で移植するしかない pg 3
RISC-V の開発ボード HiFive Unleashed ➢ RV64GC 4コア (FPU と MMU
あり) ➢ 8 GB DDR4 ➢ GbE, uSD (ただし、SPI接続), jtag ➢ $1250 (Early Access), $999 pg 4
RISC-V の開発ボード HiFive Unleashed ➢ RV64GC 4コア (FPU と MMU
あり) ➢ 8 GB DDR4 ➢ GbE, uSD (ただし、SPI接続), jtag ➢ $1250 (Early Access), $999 Early Access 版を買った 日本で一番最初に申し込んだ(はず) 届いたのは最初じゃないけど pg 5
HiFive Unleashed のデバッグ環境 OpenOCD に対応している (JTAG デバッグ可) https://github.com/riscv/riscv-openocd.git PC の上位24bitが0になるエラッタがあるので、
OpenOCD を修正する GDB で set arch riscv:rv64 としておく 逆アセンブリの化けが解消 当然シリアルデバッグもできる pg 6
RISC-V アーキテクチャ (SBI) RISC-V の仕様を読んだ時の疑問 IPI の発生のさせ方がわからない Timer をセットできるのは M-mode
だけ。 カーネルが動く S-mode でどうやってセットするのか pg 7
RISC-V アーキテクチャ (SBI) RISC-V の仕様を読んだ時の疑問 IPI の発生のさせ方がわからない Timer をセットできるのは M-mode
だけ。 カーネルが動く S-mode でどうやってセットするのか これらは、SBI を使って実装するのが作法らしい pg 8
RISC-V アーキテクチャ (SBI) Supervisor Binary Interface CPU実装依存を抽象化して、移植性を高めるため のインターフェース 一つのOSのバイナリが色々なCPUで動作する Alpha
の PALcode みたいなもの pg 9
RISC-V アーキテクチャ (SBI) BBL と OpenSBI の実装がある BBL (Berkeley Boot
Loader) https://github.com/riscv/riscv-pk OpenSBI https://github.com/riscv/opensbi OpenSBI が後発のプロジェクトだが、最近 BBL から OpenSBI に切り替わることが多い Fedora Freedom Unleashed SDK pg 10
RISC-V アーキテクチャ (SBI) pg 11 ID name 0 sbi_set_timer 1
sbi_console_putchar 2 sbi_console_getchar 3 sbi_clear_ipi 4 sbi_send_ipi 5 sbi_remote_fence_i 指定された hart で fence.i 6 sbi_remote_sfence_vma 指定された hart で sfence.vma 7 sbi_remote_sfence_vma_asid 8 sbi_shutdown
RISC-V アーキテクチャ (MMU) ページテーブルは階層型 PTE に キャッシュ属性はない 物理アドレスで属性が決まる Alpha っぽい
それ以外は割と普通 pg 12
RISC-V アーキテクチャ (例外・割込み) 例外はこれといった特徴なし 割込みは、Software(IPI), Timer, 外部割込み の3つ 3つをそれぞれ有効・無効の設定ができる 割り込みコントローラの優先度は外部割込みのみ
Interrupt Priority Threshold Register で設定して いる値より低い優先度の割り込みが入ることがあるっぽい pg 13
RISC-V アーキテクチャ (命令セット) 命令セットはサブセットのみのハードウェア実装でも よい trap してソフトウェアエミュレーションする OpenSBI や BBL
でハンドリング 予期せぬボトルネックとなるので注意 たとえば、rdtime 命令が未実装 HiFive Unleashed だけでなく、QEMU でも… Solaris にはスピンロック競合時、タイムスタンプで delay を入れるコードがあって… pg 14
OpenSolaris の移植の仕方 基本的に以下の4つをやるだけで移植できる 1. クロスコンパイラを用意する 2. ブートローダを用意する 3. カーネルを移植する 4.
ユーザランド (大きな作業が必要なのは、libc とか rtld)を移植する pg 15
クロスコンパイラ gcc + binutils riscv64-*-solaris2.11 を追加 #pragma init, fini を有効化
SUNPro Compiler の pragma libgcc に __sync_lock_test_and_set_を追加 RISC-V に1byte と 2byte の atomic 命令がない pg 16
HiFive Unleashedのブートシーケンス FSBL → OpenSBI → u-boot → inetboot →
unix (solaris kernel) OpenSBIに u-boot が埋め込まれている FSBL, OepnSBI は M-mode で動作 S-mode に切り替えて u-boot にジャンプ 初期の公式 SDK は FSBL → u-boot (M- mode) → BBL → Linux だった。 pg 17
inetboot SPARC の ネットワークブート用のブートローダ ZFS 対応したが SPARC とは異なるやり方 NIC や
ストレージのデバドラを追加 OpenPROM がないので。 NFS or ZFS から boot_archive を読み出し、そ こからカーネルをロードする boot_archive は カーネルとカーネルモジュールを含む ISO9600 形式のファイル pg 18
kernel の移植 vm 階層型のページテーブルなので x86 のコードベースでよ い。 割込み・例外 割り込み優先度に気を付ける (IPI,
タイマ、外部) Solaris では割り込み優先度ごとにスレッドが動作 優先度ごとに、IPI, タイマ, 外部割込みを有効無効 割り込みコントローラの優先度は使えない 多重割込みを正しくハンドリングしなくてはならない pg 19
kernel の移植 その他 boot まわり lock コンテキスト切り替え デバイスドライバ UART GbE
uSD (SPI Mode) pg 20
ユーザランド libc と rtld(ld.so) 以外はアーキテクチャ依存部 がほぼない Makefile の数が多くて大変 autoconf すごい
--host=riscv64-solaris2.11 で大体ビルドが通る デバッグは難しい Doors が多用されていて、追跡困難 DTrace が使えない…未対応なので pg 21
さいごに https://bitbucket.org/hayashin/illumos- gate でしばらく公開しておきます。 たまにパニックします。 遅い スピンロック競合時に rdtime 命令を呼んでいる MMC
SPI Mode が遅い 他にもいろいろ pg 22