Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
1
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
株式会社 日立超LSIシステムズ組込プラットフォーム設計部
2014/04/25
伊藤 優
WEC2013の高速起動スナップショットブートの全貌
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved. 1
はじめに
• 組み込みデバイス起動時間もその一つです。電源を入れたのち、24時間、365日の間、電源を落とさない場合もあれば、頻繁に電源OFF/ONを繰り返す製品もあります。
• たとえば自動車向け製品のように、常にコールドブートを、ただし短い起動時間を要求されるようなシステムも存在します。
• CE CoreではWindows Automotive 5.0 / 5.5で提供されてきたSnapshot Bootが、Windows Embedded Compact 2013で採用されました。本セッションでは、Snapshot Bootの概要と、実装のためのポイントについて説明をします。
2
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
1. 自己紹介2. ブート時間短縮のアプローチ3. Snapshotブートの実装4. Snapshot取得位置と起動時間5. より高速なSnapshotブートへのアプローチ
2
Contents
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved. 3
1. 自己紹介
3
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
自己紹介
4
• スピーカー:伊藤 優– 所属:株式会社日立超LSIシステムズ
– Microsoft MVP(Windows Embedded)
• あれ?アキタ電子システムズでは?– 2014年4月1日に日立超LSIシステムズとアキタ電子システムズは合
併しました。
– Windows Embeddedサポートチームはそのまま日立超LSIシステムズの所属となり、従来通りの対応をしています。
• 新しいコンタクト先:[email protected]
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved. 5
2. ブート時間短縮のアプローチ
4
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
ブート方式と起動時間
6
ブート方式起動時間
OSイメージの配置
CPUの遷移SDRAMの
状態デバイス初期化
メモ
コールドブート
× NOR Flash停止 Power
On クリア 要
NOR Flash上でプ
ログラムを実行することで起動時間を短縮できる。
× NAND Flash 停止 PowerOn
クリア 要実行イメージをRAMにコピーする必要がある。
× 外部ストレージ停止 Power
Onクリア 要
ウォームブート × NOR Flash 動作 Reset 保持 一部要 一般に実行イメージはRAM上
に展開された状態でリブートする。
△ RAM 動作 Reset 保持 一部要
サスペンド/リジューム
◎ RAM SleepResume
保持 一部要
起動は非常に速いが、スタンバイ時には電流を消費する。
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
WEC2013起動シーケンス
7
CPU, SDRAM初期化
OSイメージコピー
OS起動、デバイスドライバ初期化
アプリケーション起動
Power ON
起動ステップ 所要時間短縮の可否
前提条件等
CPU, SDRAM初期化 <0.1s No
OSイメージコピー 2.0s Yes OSイメージサイズ:64MB転送速度:32MB/s
OS起動、デバイスドライバ初期化
3.0s Yes デバイス初期化、スレッド起動、ワークエリア初期化、等
アプリケーション起動 5.0s Yes プロセスロード、起動
合計 10.0s Yes
5
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
起動時間短縮に向けた様々なアプローチ
8
• Multiple XIPによるロード時間の短縮
• デバイスドライバ初期化処理のバイパス
• デバイスドライバ初期化処理の並列化
Nk.bin
NORフラッシュ
Nk.bin
RAM
CopyNk2.bin
NORフラッシュ RAM
Copy
Nk1.bin
Nk2.bin
Nk.binを分割し、最初に動作するNk1.binをXIP(Execute In Plase)実行で、NORフラッシュ上で動作させる。
XXX_Init
MultipleXIP化
デバイス初期化初期化をバイパス
XXX_Init XXX_Open
デバイス初期化+
ドライバロード時のデバイス初期化をバイパスし、Open呼び出しで初期化を行う。
XXX_Init
デバイス初期化初期化を並列化
XXX_Init
CreateThread Thread
デバイス初期化
デバイス初期化処理をThread化し、XXX_Initをごく短時間で終わらせる。
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved. 9
3. Snapshotブートの実装
6
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
Windows Automotive:Fast Cold Bootガイド
10
• 引用元URLhttp://msdn.microsoft.com/ja-jp/library/dd362296.aspx
• 対応OS:Windows Automotive 5.0 / 5.5処理内容 高速化メソッド 高速化の内容
HDD/NAND Flash から
DRAM へのプログラム
コピー
イメージ多段ロード プログラム コピー時間を分割し、最
初にかかるロード時間を短縮
OS ワークエリアの初期
化
DRAM クリア スレッド メモリ初期化処理を分割し、最初の初期化時間を短縮
ユーザー データ
(レジストリ) 初期化
Hive-based Registry レジストリ初期時間を短縮したレジストリ管理方式
OS/アプリの起動 Snapshot Boot OS/アプリの初期化後の状態を復元
することで、定型初期化シーケンスをスキップ
デバイス ドライバの
ロード
Application Launcher ドライバ ロード処理の並列化/分割
化により、CPU のアイドル時間を排除
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
WEC2013:Snapshot Boot Development
11
• 引用元URLhttp://msdn.microsoft.com/en-us/library/dn169259.aspx
• Snapshotブートを利用するために– 標準のインターフェイスを使用し、サスペンド/リジュームを実装する。
– 予約されたRAMエリアを除き、Snapshotを取得する。
– Snapshotのサイズは最大500MBまで。
– Snapshotもメモリページロードをサポートすることで、大きなSnapshotでも起動時間を短縮することが期待できる。
• 要求項目– 電源管理機能を実装する:BSPにはSYSGEN_PMを含む。
– Snapshotを保存するために必要な記憶領域をBootloaderが使用できること。
– ドライバはPowerUp()、PowerDown()、またはIOCTLPowerSetによる電源管理機能をサポートすること。
どうでもいい話ですが、WEC2013の情報は英語サイトにしか記載がありません。注意。
7
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
Snapshot Bootの概念
12
Power On
H/W初期化(最低限)
Snapshotイメージ展開
Resume処理ジャンプ
PowerUp
デバイスの再初期化
システムリジューム
システム起動
SnapshotImage
Storage Device
SnapshotImage
SDRAM
Expand & Copy
Resume
1. 電源投入 コールドブート
2. H/Wを初期化する(最低限)
3. Snapshotイメージ展開(Storage Device RAM)
4. PowerUpシーケンスに移行し、システムをリジュームする
5. Snapshotを取得した位置からシステムが動作する
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
Snapshotの取得
13
IOCTL_KLIB_MAKESNAP
Snapshotの取得
OEMGetSnapshotRegions()
メモリ仕様の通知(Opt.)
OEMTakeCPUSnapshot()
CPU状態の保存
OEMCompressSnapshot()
Snapshotの圧縮(Opt.)
OEMPrepareSnapshot()
Snapshot用ストレージの準備
OEMWriteSnapshot()
Snapshotをストレージに保存
システムのサスペンド/リジューム機能を利用し、Snapshotを取得 不揮発性メモリへ保存する一連の処理開始をシステムに要求する。
CPUコンテキスト、OS RAM以外にSnapshotに含めるべき領域(ドライバグローバル領域など)の存在を問い合わせるためのコールバック関数。
OEM固有の情報(CPUコンテキスト等)をSnapshotとして取得するためのコールバック関数。
Snapshot取得後にイメージを圧縮するために呼び出されるコールバック関数。
Snapshotを不揮発性メモリに書き込む直前に呼び出されるコールバック関数。不揮発性メモリの初期化などの準備を実装する。
不揮発性メモリにSnapshotを書き込むコールバック関数。引数で指定されたオフセット、サイズに従い不揮発性メモリにデータを書き込む処理を実装する。
8
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
Snapshotからの起動
14
OEM Bootloader code
Snapshotからのブートを判定
SnapRestore()
Snapshotの読込みと展開
OEMReadSnapshot()
Snapshotの読込み
OEM CPU Snapshot restore code
CPUコンテキストのリストア
OEMSnapshotResume()
ハードウェアの再初期化
最小のBootloaderでSnapshotブートかを判定し、Snapshotからの起動を選択する。
SnapshotをRAMにロードし、そのイメージを復元する。
本コールバック関数は、Bootloader、OS双方で同じ機能を必要とする。Bootloaderでは不揮発性メモリからSnapshotを読み込む。OSではPageableで読み込む場合に使用する。
OEM固有の情報(CPUコンテキスト等)をリストアする。
BootloaderからOSに実行制御が切り替わった直後に呼び出されるコールバック関数。コールドブートと同等のハードウェア初期化を行う。OEMInit()を再利用することも可。
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
メモリレイアウト
15
• Snapshotブートに対応したメモリレイアウト
SNAP_BUF
NK
RAM
BootloaderでSnapshotをロード展開するためのバッファ。与えられたサイズに合わせてロードするため、サイズに制限は特にない。
Snapshotから展開されたNK領域。OSのコードはすべてここに含まれる。
9
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
不揮発性メモリへのSnapshotの配置
16
• 使用する不揮発性メモリの仕様に合わせ、Snapshotを配置す
る。ファイルシステムを使用する場合は、そのファイルシステムをアクセスする機能を実装することが求められる。– NORフラッシュ
– NANDフラッシュ
– eMMC– SD Card
• SnapshotブートはBootloaderで不揮発性メモリをアクセスする
ため、ファイルシステムを必要とするデバイスの場合、Bootloaderにファイルシステムを実装することが必要。- WEC2013:CE Boot Framework Filesystemサポート(FAT, BinFS) ブロックデバイスサポート(IDE、Flash Memories) BinFSサポート
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
修正・確認のポイント
17
目的 対象ファイル等 修正・確認ポイント
メモリレイアウト Config.bib Snapshot Bootに合わせたMEMORYセクションの変更。
Snapshotブート関数 GetSnapshotState Snapshotの状態を示す。TSnapState GetSnapshotState (void);
SnapChkSum メモリのチェックサムを求める。
SnapRestore OEMが準備した読込み関数を使用して、Snapshotをリストアする。
コールバック関数 関数 OEMPrepareSnapshot()OEMWriteSnapshot()OEMTakeCPUSnapshot()OEMSnapsotResume()OEMCompressSnapshot()GetOEMRamTable()OEMReadSnapshot()
オブジェクトストアの最適化
OEMCalcFSPages OEMCompressSnapshot()のランレングス圧縮方式を
採用した場合、オブジェクトストアの領域は圧縮率が極めてよくない。OEMCalcFSPages()で、オブジェクト
ストアを必要最小限にすることが望ましい。
10
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
Snapshotブートの起動時間
18
CPU, SDRAM初期化
OSイメージコピー
Snapshotコピー
リジューム処理
SnapshotブートPower ON
起動ステップ 所要時間 前提条件等
CPU, SDRAM初期化 <0.1s
OSイメージコピー 2.0s OSイメージサイズ:64MB転送速度:32MB/s
Snapshotコピー 2.0s Snapshotサイズ:64MB転送速度:32MB/s
リジューム処理 1.5s PowerUpシーケンス
合計 5.5s 標準ブートに対し4.5sの短縮
CPU, SDRAM初期化
OSイメージコピー
OS起動、デバイスドライバ初期化
アプリケーション起動
標準ブートPower ON
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
Snapshotの取得位置の決定
19
• Snapshotの取得位置により起動時間は変わる
• Snapshotブートは、そのサイズと動作開始位置により、起動時間が変化する。– 最初に必要なアプリケーション:Snapshotに含める。
– 必要に応じて起動するアプリケーション:Snapshotに含めない。
• Snapshot取得位置を適切に決定することが、ブート時間短縮のポイント。
取得位置Snapshot
イメージサイズOS起動時間
OS起動後のアプリケーション動作開始時間
OS起動直後 小 速い 遅い
一部のアプリケーション起動後
中 普通 普通
全てのアプリケーション起動後
大 遅い 速い
11
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved. 20
4. より高速なSnapshotブートへのアプローチ
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
OSイメージの分割
21
• BinFS対応システムの構成が大きくなり、OSイメージを不揮発性メモリからRAMへコピーする時間が大きい場合。– BinFSを導入、1st NK(Tiny)と2nd NK(Pageable)に分割する手法。
– 1st NKの読込みが速く、2nd NKの読込みではページ単位で読み込んでいくため、起動時間の短縮が期待できる。
12
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
BinFS対応メモリマップ
22
SNAP_BUF
CHAIN
RAM
BootloaderでSnapshotをロード展開するためのバッファ。与えられたサイズに合わせてロードするため、サイズに制限は特にない。
CHAIN/1st NK/2nd NKはすべて隣接させる
1st NK(Tiny)
2nd NK(Pageabe) RAMエリアと2nd NKがオーバーラップしても動作には影響しない。
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
Snapshot読込みの高速化
23
• Pageable SnapshotSnapshotのサイズが大きく、不揮発性メモリからRAMから読出し、展開・コピーする時間がかかる場合。– 動作に必要となったメモリページからロードしていく事で、Snapshot全
体を読み込むことなくシステムの起動時間短縮を図る。
– 1st Nk:BinFS立ち上げに最低限必要なモジュール/データで構成されたOSイメージ。
– Pageable Nk:1st Nk以外のモジュール/データにより構成されるOSイメージ。
SNAP_BUF
CHAIN
RAM
1st NK(Tiny)
2nd NK(Pageabe)2nd Nk
不揮発性メモリ
必要なメモリページから読み込んでいく。
13
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
最後に
24
• ブート時間の短縮はシステムごとに要求時間、実装の手法、方法が異なります。
• WEC2013では、WA5.0/5.5で自動車向けに提供されたSnapshotブートを汎用組み込みシステム向けに活用することが可能になりました。
• 日立超LSIシステムズでは、自動車向けSnapshotブートの実
装経験を通じ、様々なシステムの起動時間短縮の対応が可能です。
• ブート時間の短縮でお困りのお客様は、お気軽にご相談ください。
© Hitachi ULSI Systems Co., Ltd. 2014. All rights reserved.
株式会社 日立超LSIシステムズ
組込プラットフォーム設計部
スナップショットブートの全貌WEC2013の高速起動
2014/04/25
伊藤 優
END
14