この先やりたいことは組み込み用途ならだいたいみんな一緒で
- myledサンプルだと、一度read/writeするたびにcloseしないといけないので遅い。連続rwしたい。
- 割り込みハンドリングしたい
- 大容量データを転送したい
といった順序で戦っていくことになります。
まず1番目についてですが、現状の/proc/myledデバイスを open->read->close または open->write->close するコンボでどれだけオーバーヘッドがあるか、ユーザーコード側で100万回ループさせて確認してみました。
readの方はコンソールに文字を出すと/dev/nullに捨ててもかなりのオーバヘッドになるので、コード内で読み捨てしています。
- open->write->close ×100万回 = 156秒 ⇒ 1回あたり 0.15msec
- open->read->close ×100万回 = 76秒 ⇒ 1回あたり 0.07msec
人間の速度からすれば高速ですが、10msecごとにIOをポーリング監視したい、といったような組み込み用途ではさすがに見過ごせない遅さです。
3番目の大容量転送は、DMAやらブロックデバイスやらが登場しそうな気がするのでいったん忘れることにして、とにかく1番と2番をなんとか学習したいと思います。
あちこちの先輩方の記事を見ると、このあたりに関してはUIOを使うと簡単そうなのでちょっと試してみたのですが・・・
0 件のコメント:
コメントを投稿