新規記事投稿
フォロー記事投稿
記事のキャンセル
From: Akitaka HOSOMI
<hosomi@ga2.so-net.ne.jp>
Subject: 当世ドライバ事情( カーネル関数の体力測定 )
Date: 1999/06/14 02:23:07
Reference: junge/00274
ちょうど、今、 Linux 用のドライバを書いているので、カーネルドライバ
とユーザプログラム間でメモリの風通しを良くするために使えそうな、カー
ネル提供関数 のパフォーマンスを調べてみた。
こういうのは、削岩機を持ち出す前に、まずは一応、調べておいた方が宜し
い。
verify_area() ...... 0.15 マイクロ秒
メモリのページングの有無を調べ、カーネル空間からアクセス
できるようにする
スワップは、たぶん発生してないと思うので、関数の処理は軽
目の筈だが、やっぱ、ちょっと、なぁ ...
memcpy_fromfs() ..... 0.2 マイクロ秒( 4 バイト転送 )
memcpy_tofs() ..... 0.32 マイクロ秒( 4 バイト転送 )
カーネル空間とユーザ空間でメモリ転送を行う
4 バイト転送だから 1 回転送すりゃ、それで仕事は終わるの
だが、これも、やっぱ、ちょっと、なぁ ... オーバーヘッド
が、あり過ぎるぞ
16 KB ほど転送すると、15 マイクロ秒といったところで、
1 バイトあたりの換算では、1 ナノ秒弱となり、まぁ OK よ
小容量の転送には、put_user() とか get_user() なんての
もあるが、これは、インライン展開が腐っとると思うで、私の
場合は、そのまま使う気に、なれん。
kmalloc() + kfree() .... 0.5 マイクロ秒( 4 バイト確保 )
kmalloc() + kfree() .... 1.6 マイクロ秒( 16K バイト確保 )
メモリプールからページングされないメモリを確保する
なんか、こういうメモリ管理用の関数って、結構、遅いぞぉ
16K バイトの場合のように、ページングサイズ( うちの場合
は、4K バイト )を超えると、また、とたんに遅くなるし .....
この手のオーバーヘッドを嫌う場合は、カーネルモードのドライバ内で、頻繁に
メモリ管理用の関数を呼び出すのは、なるべく避けた方が良いように思う。
よっしゃ、結局、わたしの場合は、削岩機で壁に穴あけちゃる。
はぁ?
わしの PC は、他人の家と自分の家の区別もつかんような分譲マンションではな
いぞ。マイホームなのだし、建築基準法には従っとるのだし、好きに増改築させ
ていただく。んなこたぁ、あったり前じゃ、あ〜りませんか。