10

lsmod 、 /proc/modules および slabinfo 、 /proc/meminfo では、カーネル モジュールが使用しているメモリ量がわかりません

これを見つける方法はありますか?

ところで、私は基本的に小さなテスト プログラムを作成しました。これは、ioctl 呼び出しを使用して 1MB を割り当てるデバイス ドライバーであり、この ioctl メッセージをアプリケーションから毎秒送信して、ドライブが毎秒 kmalloc を実行するようにします。「cat /proc/meminfo | grep Slab」の増加を確認できません

- をちょきちょきと切る - -

int device_ioctl(
         struct file *file,
         unsigned int ioctl_num, 
         unsigned long ioctl_param)
{
    /* 
     * Switch according to the ioctl called 
     */
    printk ( "<l> inside ioctl %d IOCTL_ALLOC_MSG = %d\n", ioctl_num,IOCTL_ALLOC_MSG );
    switch (ioctl_num) {
    case IOCTL_ALLOC_MSG:
        allocfunc(); // kmalloc 1MB // printk in this function is OK
        break;
    case IOCTL_DEALLOC_MSG:
        deallocfunc();
        break;
    }

    return 0;
}

アプリケーション/ユーザー空間

 while ( !stop )
        {
            ret_val = ioctl(memfile, IOCTL_ALLOC_MSG);

            if (ret_val < 0) {
                printf("ioctl failed. Return code: %d, meaning: %s\n", ret_val, strerror(errno));
                return -1;
            }
            sleep ( 10 );

        }

slabinfo でメモリの増加が見られません。Linux が cache->slabs->pages->objects を実行することは知っていますが、特定のカーネル モジュールのメモリ サイズを決定するには、ユーザー ランドに何らかの方法が必要です。

ありがとう、

4

2 に答える 2

3

大丈夫かどうかはわかりませんが、モジュールが使用したメモリの量を取得できますcat /proc/modules.2列目は、1列目のモジュールが使用しているバイト単位のサイズです.

drm モジュールが使用しているメモリ量を示すサンプル出力:

cat /proc/modules |grep ^drm|awk '{print $1 " " $2}'

回答例:

drm_kms_helper 49394
drm 286028

それが役立つことを願っています。

于 2013-07-10T21:53:20.533 に答える
0

これを直接行う方法がないと仮定します(私が知っている限り、あるかもしれません)....

LTTngを使用して、カーネル イベントをトレースできます。便利なイベントがまだない場合は、モジュールがメモリを割り当てるたびに新しいトレースを作成する必要があります。

その後、トレースを分析し、時間の経過とともにメモリ使用量がどのように増減するかを示すグラフを描画できます。

于 2013-03-07T22:13:45.507 に答える