Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rust で RTOSを考える
Search
Ryuji Fuchikami
October 24, 2021
Programming
0
150
Rust で RTOSを考える
TOPPERS開発者会議2021 (2021/10/24) の LT で発表させて頂いた資料です。
https://www.toppers.jp/devconf2021.html
Ryuji Fuchikami
October 24, 2021
Tweet
Share
More Decks by Ryuji Fuchikami
See All by Ryuji Fuchikami
Verilator + Rust + gRPC と Efinix の RISC-V でAIアクセラレータをAIで作ってる話 RTLを語る会(18) 2025/11/08
ryuz88
0
380
オリジナルの深層学習で HLS Challenge にチャレンジ
ryuz88
0
610
Zynq MP SoC で楽しむエッジコンピューティング ~RTLプログラミングのススメ~
ryuz88
0
2.2k
LUT-Network ~その後の話~
ryuz88
0
110
Verilatorやってみた! ~ OpenCVでテストベンチを書いてみた ~
ryuz88
0
150
Fast and Light-weight Binarized Neural Network Implemented in an FPGA using LUT-based Signal Processing and its Time-domain Extension for Multi-bit Processing
ryuz88
0
140
LUT-Network ~Edge環境でリアルタイムAIの可能性を探る~
ryuz88
0
67
LUT-Network ~本物のリアルタイムコンピューティングを目指して~
ryuz88
0
1.3k
Other Decks in Programming
See All in Programming
AIエージェントを活かすPM術 AI駆動開発の現場から
gyuta
0
230
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
17
6.6k
令和最新版Android Studioで化石デバイス向けアプリを作る
arkw
0
130
TVerのWeb内製化 - 開発スピードと品質を両立させるまでの道のり
techtver
PRO
3
1.4k
ID管理機能開発の裏側 高速にSaaS連携を実現したチームのAI活用編
atzzcokek
0
190
AI時代もSEOを頑張っている話
shirahama_x
0
230
CSC305 Lecture 15
javiergs
PRO
0
250
How Software Deployment tools have changed in the past 20 years
geshan
0
28k
テストやOSS開発に役立つSetup PHP Action
matsuo_atsushi
0
140
配送計画の均等化機能を提供する取り組みについて(⽩⾦鉱業 Meetup Vol.21@六本⽊(数理最適化編))
izu_nori
0
120
手が足りない!兼業データエンジニアに必要だったアーキテクチャと立ち回り
zinkosuke
0
380
251126 TestState APIってなんだっけ?Step Functionsテストどう変わる?
east_takumi
0
300
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.1k
Designing for Performance
lara
610
69k
Designing Experiences People Love
moore
142
24k
Fireside Chat
paigeccino
41
3.7k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.6k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Stop Working from a Prison Cell
hatefulcrawdad
273
21k
Speed Design
sergeychernyshev
33
1.4k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
For a Future-Friendly Web
brad_frost
180
10k
Transcript
Rust で RTOSを考える TOPPERS開発者会議2021 LT 2021/10/24 Ryuji Fuchikami @Ryuz88
自己紹介 (渕上竜司/Ryuji Fuchikami) • 平日は某企業で働くサラリーマン (以下、趣味の経歴のみ) • 1976年生まれ 全国転々としつつも結局、福岡が一番長く、今も福岡在住 •
1998~ μITRON仕様 Real-Time OS HOS-80 をリリース • 現在 HOS-V4a にて各種組み込みCPUに対応 (組み込みRustも実験中) (ARM,H8,SH,MIPS,x86,Z80,AM,V850,MicroBlaze, etc.) • 2008~ FPGA用ソフトコアSoC環境 Jelly をリリース(MIPS互換コア) • 現在 Zynq 上にて Real-Time GPU や LUT-Network の実験など 各種 Real-Time コア開発の実験場と化す • 2018~ LUT-Network用の環境 BinaryBrain を開発中 • 微分可能回路記述にてFPGA回路自体をそのまま深層学習 • 2021年現在、Rust勉強中 • リアルタイムコンピューティングを(趣味の範囲で)探求中 • 電脳メガネ計画(いつかやりたい電脳コイルの世界) • Real-Time 画像I/O (カメラ[IMX219] & OLED 1kfps駆動) • Real-Time GPU開発 (frame buffer無し、ゼロ遅延描画) • Real-Time DNN開発 (超低遅延DNN認識) 2 本日の発表は個人的見解であり、所属する組織とは関係ありません 娘に書いてもらいました
私の活動領域と環境 3 • アカデミックでもビジネスでもなく、ホビーとしてのOSS • 論文も書かなければ、特許も出さないという、無責任な立ち位置 • 産学連携や、各種商用RTOSのようには、ちゃんとしてないです。 m(_ _)m
• 今回を動機に勉強を始めたところなのでRustは初心者です。 • Xilinx社の ZynqMP という Cortex-A53(Linux)と Cortex-R5 と FPGA が1チップになった欲張りセットなエッジプロセッサでいろいろやってます。 今日はここでRustを やってみたお話 (ARM Cortex-R5) https://japan.xilinx.com/products/silicon-devices/soc/zynq-ultrascale-mpsoc.html
やってみたことと、やろうとしていること • ITRON(HOS)を移植して、その上でRust使ってみた • ITRONが動いてしまえば、Rustは予想以上に簡単に試せる • configurator が build.rs から呼べるのは素敵
• kernel_id.h をどうするかは課題 • なのでC使わずにRustでRTOSを作れないか検討中 • Rustの勉強に良い題材。 • C言語よりもいろいろ楽できそう。 • カーネルとアプリを跨いだ最適化が期待できそう • 「RustらしいRTOSの仕様ってどうあるべき?」で悩み中 4 あまりにあっさり動いて びっくり 悩みつつも「論よりRUN」で タスク切り替えと割り込みと タイムアウトまでお試し
過去のHOS実装 vs. RustらしいRTOSとは? 5
ID方式 vs. Rust • ITRONのオブジェクトはID管理、Rustだとどうするべき? • ID方式は所有権の概念が無い。Rustの恩恵にあずかれない • ちゃんとRustできれば E_IDとか、E_DLTとかそもそも不要なエラーもあるのでは?
• IDでないならそれに代わる、タスク/セマフォなどのオブジェクトを指すハンドルは 誰がいつ生成/削除する? • 誰がライフタイムを管理するのか? 全部 static? • どうやって利用者(タスク/割り込みハンドラ)にオブジェクトの利用権を渡す? 全部 static経由? • クロージャに束縛して渡すべきと思われるがテクニックが難しく、no_std で実現でき るのか不透明。 6
何でもTCBに追加 vs. Rustの trait • HOSはCでプリプロセッサマクロの乱用で無理やり少しカプセル化していた。 結局TCB生成しないとどの機能もテストできない。 • Rust ならうまくtrait切れば、優先度キューだけ、タイムアウトキューだけ、
といったテストをTCBと独立にやれる。(C++のclassより柔軟?) 7 至る所でプリプロセッサマクロのお化けでした.... Rust だと言語機能でカプセル化
最初から何でも装備 vs. crate機能拡張 • 昔はインターネットもなく、そこにあるものしか使えないのが普通だった • なのでITRON4.0 でいろんなAPIが定義されていたのは良かった • 内部的にはHOSもマイクロカーネルと同期オブジェクトのモジュール構造はあった
• Rust の場合、クラウドから欲しい機能が降ってくる • セマフォクレート、メールボックスクレート、みたいなのが後からどんどん自由に追加 出来るようにできないか? • うまくプリミティブな機能だけでシンプルなカーネルが定義できないか? • RTOSはある意味CPUやIRCに対する HAL (Hardware Abstraction Layer)ではないか? • 転じてカーネルに先立ってPAC(Peripheral Access Crate)書いておくと楽だと感じ ています。 8
Makefile vs. Cargo • 何をいまさらと言われそうですが • Cargo 環境はとっても便利です。 • 組込みRTOSはクロスコンパイルが基本、makefile時代は
• コンパイルする環境さまざま • コンパイラメーカーさまざま • コンパイラについてくる make ツールさまざま • 同じCPUに対しても各社がコンパイラ出してきて全部方言が違う • makefileだけでなく、アセンブラもリンカも方言だらけ • 全て同じようにビルドできるソースとビルドシステム作るのはとても困難 9 アーキテクチャに依存しないビルドシステムだけでRustの価値は計り知れない
RTOS故の悩み 10
思っていたほど既存のコレクションとかが使えない • 最悪実行時間(WCET)が見積もれなければならない • 実行時間の保証のないアルゴリズムはOSサービスコール内で使えない • 最大割り込み禁止時間観点で、途中で割り解除とかしたかったり • 公平性ではなく、デッドライン厳守のスケジューリングポリシーが必要 •
タスク優先度ベースのオブジェクトを跨いだ管理機構の入れ込み余地 • Priority inheritance protocol とか • Dynamic priority exchange server とか Rustには空間リソースの所有権はあるけど、時間リソース保証に関しては 自力で準備が必要? 11 Rustで楽できるかなと思っていたのですが...
所有権とライフタイム難しい • コンテキストを跨いだ所有権のやり取りが難しい • 初心者の私にはなかなかハードルが高い • 特に割り込みハンドラ • Deferred procedure
call やるときどうする? • HOSではパラメータシリアライズしてFIFOに投げ込んでいるが... • 遅延してる間にターゲットが削除されるとかありえるが Rust の思想と合 わない? • そもそも排他区間でロックしないので、その間の割り込みハンドラから見た 対象オブジェクトの状態が不確定。 • 排他区間を抜けるまで状態不確定なものに対してリクエストを投げると いうのがRust思想外かも? 12
まとめ 13
目指したい方向性 • ITRONの弱い標準化+Rust • Rustで書いたRTOSをITRONと言うつもりはさすがにないですが思想は大事。 • 思想だけ継承できないか • 「ITRON経験者 +
Rust知識 → 素早く意味がわかる」 を目指したい • Rustのモジュール階層は弱い標準化思想には相性が良さそう • 基本機能として似たようなものを提供しておけば、細かい固有機能は #[cfg(target_arch = XXX)] などで、場合分けして個別事情で実装しても、使う側としてそこまで困らないと思う。 14
今後のRustに望むことなど • static の初期化でもっと何でも許容してほしい • コンフィギュレーターのような静的初期化をいろいろやろうとすると「mutable references are not allowed
in statics」 となり許されていない。 • const fn の内での制約も同様。 • シンプルに未初期化の変数を許す方法が欲しいかも? • レジスタの退避は細かく制御できないか? • OS(アセンブラ)から呼ぶケースで壊してもいいものまで退避しちゃう。 • 割り込みハンドラだけは浮動小数点レジスタ使うときは自分で退避して欲しい (OS側で退避すると、使ってなかったら無駄な退避になる) • cargo run で組み込み環境への download&run できないか? • Makefileから cargo 呼ぼうかとも... • Macro 2.0 は楽しみ • 今のマクロでも出来ると思いますが、個人的には20年前に構造体メンバの詰 め込みソートががしたかったとかいろいろあって、マクロの拡充は楽しみです。 15
参考にさせて頂いた文献等 • 「Rustで始める自作組込みOS入門」 • https://techbookfest.org/product/6484983 722016768 • 「基礎から学ぶ 組込みRust」 •
https://www.c-r.com/book/detail/1403 • 「RTIC」 • https://rtic.rs/0.5/book/en/ 16
発表者アクセス先 • 渕上 竜司 (Ryuji Fuchikami) • e-mail :
[email protected]
• Web-Site : http://ryuz.my.coocan.jp/ • Blog. : http://ryuz.txt-nifty.com/ https://ryuz.hatenablog.com/ • GitHub : https://github.com/ryuz/ • Twitter : https://twitter.com/Ryuz88 • Facebook : https://www.facebook.com/ryuji.fuchikami • YouTube : https://www.youtube.com/user/nekoneko1024 17 本発表に関連するコードは下記で試行錯誤中です https://github.com/ryuz/rust_rtos お気軽にアクセスください
ご清聴ありがとうございました 18