21
2006/1/20 1 IGEL Co.,Ltd. / Renesas Soluti on Corp. 組組組組組組組組組組 組組組組組組組組組組 組組組組組組 組組組組組組組組組組組 組組組組組組 組組組組組組組組組組組 組組組組組 () 組組組組組 () 松松 松松 松松松松松松松松

組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

Embed Size (px)

DESCRIPTION

組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告). 松原 克弥 株式会社イーゲル. これまでの経緯. スレッドの挙動を調査 RT タスク vs Non-RT タスク. 本活動の背景と目的. ユーザレベルでデバイスドライバを実現したい 開発が容易 ドライバのバグによるシステムダウンを軽減 (ジーピーエルの回避) ユーザレベル・デバドラ実現のためのいくつかの問題 I/O メモリ、物理メモリへのアクセス 割り込み要求( IRQ )の転送 割り込みへの応答速度 ‥‥ カーネル 2.6 の新機能 - PowerPoint PPT Presentation

Citation preview

Page 1: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 1IGEL Co.,Ltd. / Renesas Solution Corp.

組み込み環境における組み込み環境におけるユーザレベル・デバイスドライバのユーザレベル・デバイスドライバの

検討検討(進捗報告)(進捗報告)

松原 克弥株式会社イーゲル

Page 2: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

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スレッド

Page 3: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 3IGEL Co.,Ltd. / Renesas Solution Corp.

本活動の背景と目的本活動の背景と目的

ユーザレベルでデバイスドライバを実現したい– 開発が容易– ドライバのバグによるシステムダウンを軽減– (ジーピーエルの回避)

ユーザレベル・デバドラ実現のためのいくつかの問題– I/O メモリ、物理メモリへのアクセス– 割り込み要求( IRQ )の転送– 割り込みへの応答速度– ‥‥

カーネル 2.6 の新機能– NPTL(Native POSIX Thread Library)– スケジューラの改善( O(1) スケジューラ等)– カーネルプリエンプション– ‥‥

Page 4: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 4IGEL Co.,Ltd. / Renesas Solution Corp.

組み込みソフトウェア開発の現状組み込みソフトウェア開発の現状

新しいデバイスのためのドライバ開発が多い アプリケーションが直接デバイス制御

– 遅延の最小化– デスクトップ PC アプリケーションよりもデバイスとアプリ

ケーションが密接に関係 H/W 仕様の隠蔽

Page 5: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 5IGEL Co.,Ltd. / Renesas Solution Corp.

ユーザレベル・デバイスドラユーザレベル・デバイスドライバイバ

ユーザ空間でデバイスドライバを実装

期待される効果– 豊富なツール・ライブラリの利用(例:ファイル)– 開発とデバッグの容易さ– システムハングの軽減– アプリケーションとの距離削減– ‥‥

関連研究– Peter Chubb, “Get more device drivers out of kernel,”

OLS2004.

Page 6: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 6IGEL Co.,Ltd. / Renesas Solution Corp.

デバイスドライバに必要な機デバイスドライバに必要な機能能

I/O メモリへのアクセス– レジスタ入出力によるデバイス制御、データ入出力

割り込み受信と処理 物理メモリの確保とアクセス

– DMA 等を用いてメモリへ直接アクセスするデバイスに対して必要

– DMA では、連続物理メモリの確保が必要なことも CPU のロック,リアルタイム アプリケーションへのインタフェース

Page 7: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 7IGEL Co.,Ltd. / Renesas Solution Corp.

ユーザレベル・デバドラにおけるユーザレベル・デバドラにおける割り込み受信と処理割り込み受信と処理

ファイル I/O による割り込み受信– 割り込み番号別のデバイスファイルを用意– 上記デバイスファイルへ read() をすると、割り込みが起き

るまでブロック

Page 8: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 8IGEL Co.,Ltd. / Renesas Solution Corp.

ユーザレベル・デバドラにおけるユーザレベル・デバドラにおけるメモリへのアクセスメモリへのアクセス

メモリマップ (mmap) による I/O メモリへの直接アクセス– /dev/mem もしくは専用デバイスファイルを open(), mmap

()– 一度 mmap してしまえば、あとはこれまでどおりアクセス

物理メモリは、確保してから mmap

Page 9: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 9IGEL Co.,Ltd. / Renesas Solution Corp.

ユーザレベル・デバドラにおけるユーザレベル・デバドラにおけるアプリケーションへのインタフェアプリケーションへのインタフェ

ースース ユーザレベルデバドラでは、アプリケーションと同

じユーザ空間に存在できるので、プロセス間通信、共有メモリ等様々なインタフェースを実現可能

アプリケーションとの統合も容易

Page 10: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 10IGEL Co.,Ltd. / Renesas Solution Corp.

ユーザレベル・デバドラにおけるユーザレベル・デバドラにおけるCPUCPU のロック・リアルタイムのロック・リアルタイム

RT スレッドを使えばある程度強引には‥ これは継続審議で。

Page 11: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

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

Page 12: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 12IGEL Co.,Ltd. / Renesas Solution Corp.

処理内容処理内容

割り込み処理– データ受信– 送信バッファ空き

I/O メモリアクセス– SM501 レジスタ入出力

Page 13: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 13IGEL Co.,Ltd. / Renesas Solution Corp.

Linux カーネル

ソフトウェア・アークテクチソフトウェア・アークテクチャャ

I/O メモリマップ・ドライバ

割り込みフック・ドライバ

SM501 UART

ターミナル

アプリ

ユーザレベル

UART デバドラ

データ入出力

バッファ

Page 14: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

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(); .....}

Page 15: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

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;}

Page 16: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

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)); } ....}

Page 17: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 17IGEL Co.,Ltd. / Renesas Solution Corp.

実験実験

実験を始めたところです‥ シリアル入出力

– シリアルデバイスに対して 1MB の READ/WRITE を行ってスループットを測定してみました。

– SM501 バイト入出力モードを使用– カーネルドライバは 2.6.13.4 に同梱のもの– ユーザレベル・デバイスドライバは RT タスクとして実行– ユーザレベル・デバイスドライバはシリアル入出力プロセ

スと一体化– R2D ボードとノート PC(TeraTerm) をシリアル・クロス

ケーブルで接続

Page 18: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

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 回行った結果の平均

Page 19: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 19IGEL Co.,Ltd. / Renesas Solution Corp.

所感所感

少なくとも、低負荷(じゃまするものがいない)環境では、オーバヘッドは軽微?– 38.4kbps のときはむしろ ULDD のほうが速い。– 解析する価値あり→これからします。

システム安定性、コーディングやデバッグの容易さ、豊富なユーザランド機能が魅力

Page 20: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 20IGEL Co.,Ltd. / Renesas Solution Corp.

今後の課題今後の課題

高負荷環境での挙動– RT タスク / Non-RT タスク

PC 環境との比較 他デバイスでの評価 カーネルレベル DD とユーザレベル DD の特性を整

理 新規性を模索中‥

Page 21: 組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)

2006/1/20 21IGEL Co.,Ltd. / Renesas Solution Corp.

議論議論