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