210 likes | 384 Views
組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告). 松原 克弥 株式会社イーゲル. これまでの経緯. スレッドの挙動を調査 RT タスク vs Non-RT タスク. 本活動の背景と目的. ユーザレベルでデバイスドライバを実現したい 開発が容易 ドライバのバグによるシステムダウンを軽減 (ジーピーエルの回避) ユーザレベル・デバドラ実現のためのいくつかの問題 I/O メモリ、物理メモリへのアクセス 割り込み要求( IRQ )の転送 割り込みへの応答速度 ‥‥ カーネル 2.6 の新機能
E N D
組み込み環境におけるユーザレベル・デバイスドライバの検討(進捗報告)組み込み環境におけるユーザレベル・デバイスドライバの検討(進捗報告) 松原 克弥 株式会社イーゲル IGEL Co.,Ltd. / Renesas Solution Corp.
これまでの経緯 • スレッドの挙動を調査 • RTタスク vs Non-RTタスク IGEL Co.,Ltd. / Renesas Solution Corp.
本活動の背景と目的 • ユーザレベルでデバイスドライバを実現したい • 開発が容易 • ドライバのバグによるシステムダウンを軽減 • (ジーピーエルの回避) • ユーザレベル・デバドラ実現のためのいくつかの問題 • I/Oメモリ、物理メモリへのアクセス • 割り込み要求(IRQ)の転送 • 割り込みへの応答速度 • ‥‥ • カーネル2.6の新機能 • NPTL(Native POSIX Thread Library) • スケジューラの改善(O(1)スケジューラ等) • カーネルプリエンプション • ‥‥ IGEL Co.,Ltd. / Renesas Solution Corp.
組み込みソフトウェア開発の現状 • 新しいデバイスのためのドライバ開発が多い • アプリケーションが直接デバイス制御 • 遅延の最小化 • デスクトップPCアプリケーションよりもデバイスとアプリケーションが密接に関係 • H/W仕様の隠蔽 IGEL Co.,Ltd. / Renesas Solution Corp.
ユーザレベル・デバイスドライバ ユーザ空間でデバイスドライバを実装 • 期待される効果 • 豊富なツール・ライブラリの利用(例:ファイル) • 開発とデバッグの容易さ • システムハングの軽減 • アプリケーションとの距離削減 • ‥‥ • 関連研究 • Peter Chubb, “Get more device drivers out of kernel,” OLS2004. IGEL Co.,Ltd. / Renesas Solution Corp.
デバイスドライバに必要な機能 • I/Oメモリへのアクセス • レジスタ入出力によるデバイス制御、データ入出力 • 割り込み受信と処理 • 物理メモリの確保とアクセス • DMA等を用いてメモリへ直接アクセスするデバイスに対して必要 • DMAでは、連続物理メモリの確保が必要なことも • CPUのロック,リアルタイム • アプリケーションへのインタフェース IGEL Co.,Ltd. / Renesas Solution Corp.
ユーザレベル・デバドラにおける割り込み受信と処理ユーザレベル・デバドラにおける割り込み受信と処理 • ファイルI/Oによる割り込み受信 • 割り込み番号別のデバイスファイルを用意 • 上記デバイスファイルへread()をすると、割り込みが起きるまでブロック IGEL Co.,Ltd. / Renesas Solution Corp.
ユーザレベル・デバドラにおけるメモリへのアクセスユーザレベル・デバドラにおけるメモリへのアクセス • メモリマップ(mmap)によるI/Oメモリへの直接アクセス • /dev/memもしくは専用デバイスファイルをopen(), mmap() • 一度mmapしてしまえば、あとはこれまでどおりアクセス • 物理メモリは、確保してからmmap IGEL Co.,Ltd. / Renesas Solution Corp.
ユーザレベル・デバドラにおけるアプリケーションへのインタフェースユーザレベル・デバドラにおけるアプリケーションへのインタフェース • ユーザレベルデバドラでは、アプリケーションと同じユーザ空間に存在できるので、プロセス間通信、共有メモリ等様々なインタフェースを実現可能 • アプリケーションとの統合も容易 IGEL Co.,Ltd. / Renesas Solution Corp.
ユーザレベル・デバドラにおけるCPUのロック・リアルタイムユーザレベル・デバドラにおけるCPUのロック・リアルタイム • RTスレッドを使えばある程度強引には‥ • これは継続審議で。 IGEL 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 IGEL Co.,Ltd. / Renesas Solution Corp.
処理内容 • 割り込み処理 • データ受信 • 送信バッファ空き • I/Oメモリアクセス • SM501 レジスタ入出力 IGEL Co.,Ltd. / Renesas Solution Corp.
I/Oメモリマップ・ドライバ 割り込みフック・ドライバ SM501 UART ソフトウェア・アークテクチャ バッファ データ入出力 ユーザレベル UARTデバドラ ターミナル アプリ Linuxカーネル IGEL 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(); ..... } IGEL Co.,Ltd. / Renesas Solution Corp.
I/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; } IGEL Co.,Ltd. / Renesas Solution Corp.
UARTドライバ 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)); } .... } IGEL Co.,Ltd. / Renesas Solution Corp.
実験 実験を始めたところです‥ • シリアル入出力 • シリアルデバイスに対して1MBのREAD/WRITEを行ってスループットを測定してみました。 • SM501 バイト入出力モードを使用 • カーネルドライバは2.6.13.4に同梱のもの • ユーザレベル・デバイスドライバはRTタスクとして実行 • ユーザレベル・デバイスドライバはシリアル入出力プロセスと一体化 • R2DボードとノートPC(TeraTerm)をシリアル・クロスケーブルで接続 IGEL Co.,Ltd. / Renesas Solution Corp.
実験結果 • データサイズ:1MB • バッファサイズ: 1KB • ボーレート: 300 or 38400 bps • 測定値:同一実験を10回行った結果の平均 IGEL Co.,Ltd. / Renesas Solution Corp.
所感 • 少なくとも、低負荷(じゃまするものがいない)環境では、オーバヘッドは軽微? • 38.4kbpsのときはむしろULDDのほうが速い。 • 解析する価値あり→これからします。 • システム安定性、コーディングやデバッグの容易さ、豊富なユーザランド機能が魅力 IGEL Co.,Ltd. / Renesas Solution Corp.
今後の課題 • 高負荷環境での挙動 • RTタスク / Non-RTタスク • PC環境との比較 • 他デバイスでの評価 • カーネルレベルDDとユーザレベルDDの特性を整理 • 新規性を模索中‥ IGEL Co.,Ltd. / Renesas Solution Corp.
議論 IGEL Co.,Ltd. / Renesas Solution Corp.