組み込み環境における ユーザレベル・デバイスドライバの検討...
DESCRIPTION
組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告). 松原 克弥 株式会社イーゲル. これまでの経緯. スレッドの挙動を調査 RT タスク vs Non-RT タスク. 本活動の背景と目的. ユーザレベルでデバイスドライバを実現したい 開発が容易 ドライバのバグによるシステムダウンを軽減 (ジーピーエルの回避) ユーザレベル・デバドラ実現のためのいくつかの問題 I/O メモリ、物理メモリへのアクセス 割り込み要求( IRQ )の転送 割り込みへの応答速度 ‥‥ カーネル 2.6 の新機能 - PowerPoint PPT PresentationTRANSCRIPT
2006/1/20 1IGEL Co.,Ltd. / Renesas Solution Corp.
組み込み環境における組み込み環境におけるユーザレベル・デバイスドライバのユーザレベル・デバイスドライバの
検討検討(進捗報告)(進捗報告)
松原 克弥株式会社イーゲル
2006/1/20 2IGEL Co.,Ltd. / Renesas Solution Corp.
これまでの経緯これまでの経緯
スレッドの挙動を調査– RT タスク vs Non-RT タスク
WRITE → DD→ READ切り替え時間( タスク 仮想 タスク)
0
20
40
60
80
100
120
140
160
180
0 1 2 4 8 16 32負荷タスク数
応答
時間
(マイ
クロ
秒)
non-rt threadrt thread
DD→ READ起床時間(仮想 タスク)
0
20
40
60
80
100
120
140
160
180
0 1 2 4 8 16 32負荷タスク数
応答
時間
(マイ
クロ
秒)
non-RTスレッドRTスレッド
2006/1/20 3IGEL Co.,Ltd. / Renesas Solution Corp.
本活動の背景と目的本活動の背景と目的
ユーザレベルでデバイスドライバを実現したい– 開発が容易– ドライバのバグによるシステムダウンを軽減– (ジーピーエルの回避)
ユーザレベル・デバドラ実現のためのいくつかの問題– I/O メモリ、物理メモリへのアクセス– 割り込み要求( IRQ )の転送– 割り込みへの応答速度– ‥‥
カーネル 2.6 の新機能– NPTL(Native POSIX Thread Library)– スケジューラの改善( O(1) スケジューラ等)– カーネルプリエンプション– ‥‥
2006/1/20 4IGEL Co.,Ltd. / Renesas Solution Corp.
組み込みソフトウェア開発の現状組み込みソフトウェア開発の現状
新しいデバイスのためのドライバ開発が多い アプリケーションが直接デバイス制御
– 遅延の最小化– デスクトップ PC アプリケーションよりもデバイスとアプリ
ケーションが密接に関係 H/W 仕様の隠蔽
2006/1/20 5IGEL Co.,Ltd. / Renesas Solution Corp.
ユーザレベル・デバイスドラユーザレベル・デバイスドライバイバ
ユーザ空間でデバイスドライバを実装
期待される効果– 豊富なツール・ライブラリの利用(例:ファイル)– 開発とデバッグの容易さ– システムハングの軽減– アプリケーションとの距離削減– ‥‥
関連研究– Peter Chubb, “Get more device drivers out of kernel,”
OLS2004.
2006/1/20 6IGEL Co.,Ltd. / Renesas Solution Corp.
デバイスドライバに必要な機デバイスドライバに必要な機能能
I/O メモリへのアクセス– レジスタ入出力によるデバイス制御、データ入出力
割り込み受信と処理 物理メモリの確保とアクセス
– DMA 等を用いてメモリへ直接アクセスするデバイスに対して必要
– DMA では、連続物理メモリの確保が必要なことも CPU のロック,リアルタイム アプリケーションへのインタフェース
2006/1/20 7IGEL Co.,Ltd. / Renesas Solution Corp.
ユーザレベル・デバドラにおけるユーザレベル・デバドラにおける割り込み受信と処理割り込み受信と処理
ファイル I/O による割り込み受信– 割り込み番号別のデバイスファイルを用意– 上記デバイスファイルへ read() をすると、割り込みが起き
るまでブロック
2006/1/20 8IGEL Co.,Ltd. / Renesas Solution Corp.
ユーザレベル・デバドラにおけるユーザレベル・デバドラにおけるメモリへのアクセスメモリへのアクセス
メモリマップ (mmap) による I/O メモリへの直接アクセス– /dev/mem もしくは専用デバイスファイルを open(), mmap
()– 一度 mmap してしまえば、あとはこれまでどおりアクセス
物理メモリは、確保してから mmap
2006/1/20 9IGEL Co.,Ltd. / Renesas Solution Corp.
ユーザレベル・デバドラにおけるユーザレベル・デバドラにおけるアプリケーションへのインタフェアプリケーションへのインタフェ
ースース ユーザレベルデバドラでは、アプリケーションと同
じユーザ空間に存在できるので、プロセス間通信、共有メモリ等様々なインタフェースを実現可能
アプリケーションとの統合も容易
2006/1/20 10IGEL Co.,Ltd. / Renesas Solution Corp.
ユーザレベル・デバドラにおけるユーザレベル・デバドラにおけるCPUCPU のロック・リアルタイムのロック・リアルタイム
RT スレッドを使えばある程度強引には‥ これは継続審議で。
2006/1/20 11IGEL Co.,Ltd. / Renesas Solution Corp.
実装(シリアルドライバ)実装(シリアルドライバ)
実装環境– RTS7751R2D
• Renesas SH4• SM501 コンパニオンチッ
プ内蔵 UART– 8250 互換– 1 バイト入出力と FIFO
バッファ入出力の 2 モード
– Linux 2.6.13.4• CONFIG_PREEMPT=y• Glibc 2.3.3
2006/1/20 12IGEL Co.,Ltd. / Renesas Solution Corp.
処理内容処理内容
割り込み処理– データ受信– 送信バッファ空き
I/O メモリアクセス– SM501 レジスタ入出力
2006/1/20 13IGEL Co.,Ltd. / Renesas Solution Corp.
Linux カーネル
ソフトウェア・アークテクチソフトウェア・アークテクチャャ
I/O メモリマップ・ドライバ
割り込みフック・ドライバ
SM501 UART
ターミナル
アプリ
ユーザレベル
UART デバドラ
データ入出力
バッファ
2006/1/20 14IGEL Co.,Ltd. / Renesas Solution Corp.
割り込みフック・ドライバ割り込みフック・ドライバ
static int irqhook_proc_open(struct inode *inop, struct file *filp) {
...request_irq(ipp->irq, irqhook_proc_irq_handler, SA_INTERRUPT, ipp->devname, ipp);...}
static ssize_t irqhook_proc_read(struct file *filp, char __user *bufp, size_t len, loff_t *ppos) {
.... prepare_to_wait(&ipp->q, &wait, TASK_INTERRUPTIBLE); pending = atomic_read(&ipp->count);
if (pending == 0) schedule(); .....}
2006/1/20 15IGEL Co.,Ltd. / Renesas Solution Corp.
I/OI/O メモリマップ・ドライバメモリマップ・ドライバ
int iommap_mmap(struct file *filp, struct vm_area_struct *vma) { size_t size = vma->vm_end - vma->vm_start; unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
vma->vm_flags |= VM_RESERVED; vma->vm_flags |= VM_IO; vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
/* Map each page to users' virtual memory space */ if (io_remap_page_range(vma, vma->vm_start, offset, size, vma->vm_page_prot)) return -EAGAIN;
return 0;}
2006/1/20 16IGEL Co.,Ltd. / Renesas Solution Corp.
UARTUART ドライバドライバ
while (1) { .... if (read(fd, &n_pending, sizeof(int) > 0) { if ((status = SM501_UART0_LINESTAT(&iomem)) & 0x01) { do { buffer[count]= SM501_UART0_RXBUFF(&iomem); status = SM501_UART0_LINESTAT(&iomem); count++; if(count >= BUFFER_SIZE){ loop++; count = 0; if(loop >= LOOP_COUNT) goto end; } while((status & 0x01)&&(max_count-- > 0)); } ....}
2006/1/20 17IGEL Co.,Ltd. / Renesas Solution Corp.
実験実験
実験を始めたところです‥ シリアル入出力
– シリアルデバイスに対して 1MB の READ/WRITE を行ってスループットを測定してみました。
– SM501 バイト入出力モードを使用– カーネルドライバは 2.6.13.4 に同梱のもの– ユーザレベル・デバイスドライバは RT タスクとして実行– ユーザレベル・デバイスドライバはシリアル入出力プロセ
スと一体化– R2D ボードとノート PC(TeraTerm) をシリアル・クロス
ケーブルで接続
2006/1/20 18IGEL Co.,Ltd. / Renesas Solution Corp.
実験結果実験結果
38.4kbps 300bps
Read Write Read Write
User Level DD 29.95kbps 30.68kbps 210.70bps 213.34bps
Kernel Level DD
29.69kbps 28.08kbps 232.82bps 232.70bps
データサイズ: 1MB バッファサイズ: 1KB ボーレート: 300 or 38400 bps 測定値:同一実験を 10 回行った結果の平均
2006/1/20 19IGEL Co.,Ltd. / Renesas Solution Corp.
所感所感
少なくとも、低負荷(じゃまするものがいない)環境では、オーバヘッドは軽微?– 38.4kbps のときはむしろ ULDD のほうが速い。– 解析する価値あり→これからします。
システム安定性、コーディングやデバッグの容易さ、豊富なユーザランド機能が魅力
2006/1/20 20IGEL Co.,Ltd. / Renesas Solution Corp.
今後の課題今後の課題
高負荷環境での挙動– RT タスク / Non-RT タスク
PC 環境との比較 他デバイスでの評価 カーネルレベル DD とユーザレベル DD の特性を整
理 新規性を模索中‥
2006/1/20 21IGEL Co.,Ltd. / Renesas Solution Corp.
議論議論