議事録 2020/01/22, 1/23

議事録 2020/01/22, 1/23

Attendee

原木、黒川、日下部、遠藤、田口、駒形、山口、谷川、丸山、光成(敬称略)

場所

大阪

日時

2020 1/22(水) : 13:00 - 18:00

2020 1/23(木) : 10:00 - 15:00

日時

1/22

13:00 - 15:00 : CESの反省

15:00 - 16:30 : アーキテクチャ Review, 日本精機さんから提案

16:30 - 18:00 : 今後のタスク、技術的改善点

1/23

10:00 - 12:00 : GUI

13:00 - 14:30 : 予備

14:30 - 15:00 : Wrap up

議事

ELISA

  • ユースケースを提案(Telltale)

  • SafetyとNon Safetyをわけることを提案

    • すべてLinuxでできないのか、と言われている。

      • 動くものはLinuxで作れる、と主張される

    • なぜLinuxでできないのか、を伝える必要がある。

      • 車に載せれない、という理由を具体的に説明する必要がある。日系、欧州で使わない理由。機能ではなく、品質面でLinuxを使うことを受け入れれないラインがある。

      • → できること、できないことを分けるアプローチをとっていることを説明する

AMMでIC EGで2つセッションを出す

  • 品質(山口さん)

    • 量産に向けた課題解決

    • どうやって品質(QM)を担保するか

  • アーキテクチャ(田口さん、丸山さん)

  • 黒川さんがコンテナデモでわかったことを発表する

    • コンテナ化に紐づけて、AppFWについて見直しの提言

CESの反省

  • Lessons learned from AGL UCBコンテナデモ

    • init

      • Host : systemd, Guest: systemd

        • 図らずも、systemd serviceのツリーは、きれいに構築された。逆に言うと、ゲストでSystemdを使う限り、HostにSystemdを残す必要あり?

        • もしかすると、

          • ホストでは、ベースとしてA:FS Container(独自init)と、B:QM Isolation Container(sysytemd)と置き、QM Isolation Containerの中に、IVIやICのゲストコンテナ(systemd)をネスト?

      • 全コンテナの下に、最小構成のホストRootfsを置くアーキは理想だけど、現実的ではない? 

        •  全デバイスドライバがユーザーランド化でもしない限り、例外的なバイパスを開けまくるか、ゲストからホストに処理を移動する形になり、全体アーキが崩壊しかねない

        • minimum init (fork)-> systemdを起動したほうがよいのでは。

          • FS containerはminimum initが起動。

          • initも分離しないといけないと考えた。

        • 思ったほどHost環境を守れない

        • 例)CESデモでは、MOSTドライバの初期化が(sysfsのwriteを利用する方法で)ユーザーランドにあるため、これをホスト環境に組み込む必要があった

          • 理由:LXCでは、sysfsは原則ro、rw可すると、全sysfsがゲストに丸見えになる。LXCでないとしても、sysfsの原則roは正しいと思う

    • Security Model

      • AGLは、AppFwとLSM(SMACK)が密結合(ついでにいうならsystemdとも密結合)

        • きほんてきにSMACKはhostで設定しないといけないのに、AppFWが設定している

          • 本来は、システム構成(インストール時)に基本システムのセキュリティが決まる。

          • 後からインストールされるアプリには、後から3rdパーティ用のセキュリティポリシーを割り当てるべき

        • AppFWはSmackを利用しないようになるが、我々でもセキュリティモデルを考えないと

        • SELinux, AppArmorをコンテナでどのようにマネジメントしていくかを検討したほうがいい

          • 専門家がいない。

          • Android, サーバー屋さん

          • コンテナとLSMの連携がどうなっているのか知りたい

          • システムコンテナのレベルで一度制約をかける。その中で、アプリ単位で制限をかける。もちろん、コンテナの制約を破れないように。AppFW + SMACKだとうまくいかない

          • namespaceは対応しているはず。

        • 結果、SMACKを丸ごとホストからバイパスしないと、アプリケーションがインストールも起動もできないというトンデモな事態に

        • 結論:AppFwとLSMを密結合してはいけない? AGL UCBのセキュリティモデル(特にMAC)を再考する必要あり?

    • USBホットプラグ

      • LXCは、USBホットプラグが難しい。コンテナにデバイスを追加、削除するプリミティブなAPIは存在するが、それだけでは足りない。

      • LXCは、コンテナの中でudevが機能しない。udevはホストにあり、udevの対象は基本ホスト。技術的には、例えば、udev経由でLXCのコマンドやAPI叩いてゲストに作用させる方法はあるが。。。

      • 例)USBメモリ

        • ホスト環境では、USBのデバイスの接続・切断、USBストレージデバイスの認識が可能だが、ゲストからは、ただのSCSIディスクにしか見えない

          • AGL UCBには、ストレージマネージャのようなサービスが存在しないので、まだ課題が顕在化していないだけ。

          • USBが抜かれても、ゲストに通知がこない。(USBデバイスが見れないので)

      • いまのAGLにストレージマネジャーがない

      • Bluetoothも同じような悩みがある。

        • Bluezをホストに置かないと、Bluetoothの接続、切断イベントがとれない

      • 動的に出現/消滅するデバイス

        • AGL UCBで解決することは難しいかもしれない

        • e.g. ストレージが抜かれたときにアプリをsigtermを送る機構など

      • それをホストで実装するとホストが膨らむ

      • ゲストでやると、ホストとの連携が課題

      • 既存のソリューション(Tier1が持っているストレージマネジャなど) を入れて、分離できるように

      • USB認証

      • 車載で使えるUSB, Bluetooth, その他ネットワーク系(WiFi, DCM)のコンテナでのハンドリングは、サーバーやPCでは利用しない。車載特有のため、AGLで議論するしかない。

        • 課題を明確にして、商品開発の段階で作りこむのが現実解か

        • 商品開発に移行しやすいような環境をオープンソース

        • Requirementを渡さないと、オープンソースの人は理解できない

        • AMMでABに申請したい

    • Sound

      • Unicens

        • agl-serviceの責務が明確化されていないため、本来サービスにあるべきではない処理が含まれる場合がある?

          • 例)agl-service-unicensをホストとゲストの両方で実行しないと、MOSTが正しく初期化されず、音がでない、曲の再生が始まらない、という不具合あり

      • Pipewire

        • 現状は、IVIゲストに存在。AGL AppFw?Signal composer?とPipewireが密結合している模様 → ホストや別コンテナに分離ができない → ICゲストから音を鳴らす方法が存在しない

      • サウンドのあるべき論を出してガイドラインを作って、サービスを作ってもらう。

    • Grahpics

      • DRM問題

        • Waltham backend

        • Nested westonは、当初の想定外に上手く機能している(wayland-backendのwestonは起動が軽く、結果、IVI,ICコンテナの再起動が非常に早くなる)

          • ホストに軽量コンポジタを置く構成は良いと思う。

          • wayland通信は軽量なので、ネストの影響は小さい

    • コンテナマネージメント

      • LXC-Launcher

        • デモ実装やっつけだったが、Nestコンポジタアーキをうまく動かすためには、ここが肝となるかも。

          • 理由:デモでは、IVI_SHELLで、ゲストWestonのライフサイクルを管理。一方で、LXCとホストWeston(IVI-SHELL)は、そのままでは、何も連携できない。

          • RunLXCでのアプローチ:LXCのAPIを使ってコンテナのライフサイクルと、ホストWeston(IVI-SHELL)のSurface/Layer管理を結合し、コンテナのライフサイクル管理(再起動デモ)を実現

        • サーフェス、ディスプレイマネジメントとコンテナマネジメントは統合する必要があると考えている

        • コンテナマネージャもGUIを認識しないといけない。

      • IVIのリブートは5sec程度、Clusterコンテナは1sec程度でリブート可能

      • DRMのマネジメントをゲストに見せるのはローレベル過ぎる

  • Host環境

    • systemdをベースにする

    • minimum構成に外せないものは何か

    • yoctoを使ったsystemdは大きい

CES2020(1/23) - 黒川さんから

  • アプリケーションコンテナは利用していない

    • アプリケーションからどのコンポジタとバインドするのか、ホスト

    • ホスト側

    • 全部アプリケーションコンテナにするのは、組み込みには向いていないかもしれない

  • SMACKは本来介入しなくてよいはず

    • ホスト側で設定したセキュリティポリシーに従って、アプリFWがMACコントロール

  • QM isolationも含め、hostの分離の仕方(initから) を考える

    • LXCそのままで続けていくのは無理があるかもしれない

  • Ethernet

    • systemdがDNSを起こすと、LXCと競合する

      • 名前解決ができなくなる

    • DNSマスカレードの設定をレシピ化

    • ネットワークのネームスペースはホスト側に置くべき。

    • ローカルリンクはLXC

    • Hostのconnmanは物理デバイスの制御

    • 将来的にはスライサーが欲しい

  • バックエンドはホスト → ホストは大きくならざるを得ない → ホストの検証範囲が広がってしまうので、どのように切り分けるか、がコツ

  • アプリケーションはアプリコンテナ

    • 早いところ、アプリを分離したい

DRM lease

  • 複数の独立したコンテナでディスプレイを分配したい。

  • DRM leaseを利用すれば、Hostのmasterがゲストのコンポジタにdisplayのmaster権限を貸し出しできる

    • unix domainなどでfile descriptorを渡す必要がある。

  • 1GPU - 2 Display というケースで必要

  • R-CARはRender Nodeの仕組みが必要

  • lease managerはmaster権限を貸し出すだけで、初期化はコンテナのweston

  • アーリーレンダリングに必要

  • GPU描画をQMの対象外にしたい

    • メータの中でもQMのレベルを分ける必要がある。

    • GPUのドライバは検証できない。GPUのIPベンダのみ。

      • セットの動作保証はできない

  • Pros

    • 出力の宛先を切り替えたい

    • 1GPU - 2 Displayのようなユースケースに対応できる

    • IVIの中を分けることもできる(IVI + RSE)

  • inputについてはユースケースの定義が必要 

    • 一つのタッチイベントやボタンイベントを共有する

  • 4月から開発スタートしたい

    • CESでプロダクトレディーの状態にしたい

次のミーティング

  • 2/20

  • AMMのどこか

 

TODO

  • USBのRequirementを提案する必要がある

    • Requirementのたたき台を日下部さんに出していただく → Dr. Yamaguchiがまとめる。

  • Security Modelの構築(SELinux, AppArmor) ... メータのEG

    • 考え方の整理からスタートする

  • IC Service ... メータTier1 ですり合わせていただく

  • Linux Graphic stackのQM実現方法

    • 既存のほかのOSのやり方を学ぶ ... メータTier1 ワーキングから出してもらいたい

      • GPU(OpenGL)

      • デジタルクラスタのときに、どういうQMの考え方をしたのか

      • モータから絵を描画することに変化して、QMのレべルをどう切り分けたか

  • カーネルのQM Isolationについて、ELISA(SIL2Linux)に考え方を確認する

  • DRM lease

  • Connectivity のデバイスに対する要件の整理 ... 担当者を探す

    • ある程度要件がまとまった時点でContainer Managerのデザインを行う

  • GUI Reference ... 田口さん

    • 3月までに

アーキテクチャレビュー

今後のタスク

DRM lease : 

Security Model : 

USBのハンドリング : 

IC service : 

Container Manager : 

 

 

ELISAメソッドを使ったQMアイソレーション in Kernel

とりあえず、リンク

カーネル(まだ荒い。。。)

https://makelinux.github.io/kernel/map/

 

ブロックデバイス

https://www.ctouniverse.com/linux/?open-article-id=10571948&article-title=linux-io-stack-diagram&blog-domain=improgrammer.net&blog-title=i-m-programmer

 

キャラクタデバイス

 

drm/kms(graphics関連)

=== Appendix 12/4の議事 ====

進捗の確認

IC EG Callの内容

  • 関係者に資料は共有している

  • プロジェクトを開始する前にしなければいけないこと

    • インフラ 

    • Contribution

      • UCBに入れるのはやりにくい。いらないもの、ビルド環境がIVI用に特化して構築されていて、修正しにくい構造になっている。

      • CESデモはUCB

    • リリースプロセス

    • プロジェクトの進め方のたたき台?

      • 回せるものを作成して、進めていく

    • 手を動かせる環境を整えないといけない

      • AGL UCBをスタートにすると、土台が大きすぎて難しい。仕切り直したい。

        • 合流できるなら合流しましょうというスタンス、を伝える

      • CESからAMMの間に環境を整えたい

      • 山口さんの環境はUCBを外している。ホストだけでよい

    • Cluster固有の作業は、Hostの環境構築とは分離

      • レシピセットは山口さん

      • レイヤーデザインは谷川さん

      • CES後

セキュリティ

  • (サイバー)セキュリティのデザインを決めないといけない

    • smackfsを共有していて、全ゲストから参照できるようになっている

    • chrootを破られると、リソースが別のコンテナから参照できるようになる。

  • 製品にするまでには解決

  • 今後の課題

 

Sound

  • 特に進捗なし

    • PulseaudioのAuthenticationでパーミッションエラーが発生している

  • pipewireに切り替える(unicense)

Graphics

  • コンテナ上でwayland backend でwestonを動かすことを試す

  • compositor on DRMが理想だが、現状はweston(guest) on weston(host)

    • 小さなコンポジタが必要

    • libdrmをリンクできる人は一人しかいない

      • 複数リンクできるようにするか

      • マスターを作る

      • AndroidはDRMの上に違うサブシステムが乗っている。

        • グラロクとsurface flinger

    • westonをhostに存在させると、シェルがなくなってしまう。

    • waylandはまだ枯れていないので、できればhostに残したくない

Ethernet

  • LXC

  • meta-verbalizationのレシピが古いので最新に切り替える。

Container Manager

  • 今実装中

    • CANサポートがない

    • 動的にvCANデバイスの割り当て

    • 動的なドメインソケットの割り当て

  • 設定ファイルで動的に動いてほしい。

  • 製品にするには、CかC++

  • オープンソースで選択肢(e.g. LXD, LXC, docker etc) を用意する

    • 製品側で選択して、改造

    • 製品側でQMの認証

  • スペックを作るためのたたき台

    • LXCがEOLになってもAutomotive用に生き残らせたい

    • コンテナランタイムから分離したい

    • (Container) Managerではなく、違う名前を考えたほうがいいかも

      • Containerでできた仮想イメージをマネージしたい(vagrant, libvirtみたいな。現状あるLXD, Kubernetesはネットワーク向け)

      • コンテナランタイムの抽象化層

      • 車載特化のものを作りたい

CES Integration

  • CESデモ反省会(実装してみてわかったこと)

  • ネットワークは?

    • dhcpで起こしている

    • LXC-netのbridgeは、つなぐ先(host)がいないと、ゲストからネットワークが繋げない

    • hostのbridgeを割り当てたほうがいいのでは?

      • hostのネットワークが起き上がってから、host - guestのbridgeをつなげる

 

次回打ち合わせ

  • 1/22, 23 @大阪

    • AMMまでの課題

    • CESの課題

      • 見つかった課題

    • 機能ブロック上、足りていない機能

    • 反省会、新年会、次回の定例

Init

  • systemdがでかい

    • systemdを削る

    • サービスが無い状態

  • 代替案がない。。

    • busybox

    • sysv-init

  • AndroidはCのプログラム

    • 起動はテキスト

  • シンプルのリファレンスがあればいい?

  • 最低限のこと

    • 電源周り

    • コンテナとワンセットで作るべき?

  • systemd-mslを作ると小さくなるのでは。

  • 2段階のinit

    • clusterを起動するためのminimal QM init

      • こっちをinit

    • IVIを動かすためのホストシステムとして、systemdを起動するホスト用コンテナ

      • initrd → cluster(1)

      • initrd → systemd(2)

今後

  • AMM Hawaii でIC EGの活動を発表し、アップストリームをアピールしておく必要がある。

マイルストーン(Implement Goal)

  • 2019.12 RFQ

  • 2019.2   Start development

  • 2019.6   Cluster Container

時期

 

備考

時期

 

備考

2020.3

  • Cluster Service(API)

  • Container Management Spec

  • Reference design(絵)

  • Requirement Spec

APIの決定

2020.6

  • QMの考え方

  • Cluster container

  • Privilege

  • Host

  • Container Management Imple(CAN)

  • Fast boot

 

2020.8

  • Sound

  • Window

  • Sample Cluster Service

  • IVI container