新規記事投稿 フォロー記事投稿 記事のキャンセル
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 は、他人の家と自分の家の区別もつかんような分譲マンションではな
いぞ。マイホームなのだし、建築基準法には従っとるのだし、好きに増改築させ
ていただく。んなこたぁ、あったり前じゃ、あ〜りませんか。