簡體   English   中英

我的內核模塊使用了多少內存?

[英]how much memory is my kernel module using?

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,但是在用戶區中必須有一些方法來確定特定內核模塊的內存大小。

謝謝,

我不確定它是否適合您,但是您可以獲得模塊使用'cat / proc / modules'獲取的內存量,第二列是第一列中模塊的大小(以字節為單位)正在使用。

示例輸出顯示drm模塊使用的內存量:

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

drm_kms_helper 49394 drm 286028

希望有所幫助。

假設沒有辦法直接這樣做(據我所知,可能存在)....

您可以使用LTTng來跟蹤內核事件。 如果那里沒有任何方便的事件,即使每次模塊分配內存,也應該創建一個新的跟蹤。

然后,您可以分析跟蹤並繪制內存使用量隨時間增長和縮小的圖表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM