2013-03-07 35 views
10

lsmod,/proc/modules và slabinfo,/proc/meminfo KHÔNG cung cấp số lượng bộ nhớ mà mô-đun hạt nhân của tôi đang sử dụngMô-đun hạt nhân của tôi sử dụng bao nhiêu bộ nhớ?

có cách nào để tìm ra điều này không?

btw, tôi đã viết một chương trình thử nghiệm nhỏ về cơ bản, một trình điều khiển thiết bị nhận cuộc gọi ioctl để phân bổ 1MB và tôi gửi thông điệp ioctl này mỗi giây từ ứng dụng của tôi để ổ đĩa của tôi thực hiện mỗi giây. Iam không thể nhìn thấy sự gia tăng "cat/proc/meminfo | grep Slab"

- snip ---

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; 
} 

không gian ứng dụng/user

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); 

     } 

tôi không thấy sự tăng trưởng của bộ nhớ trong slabinfo. Tôi biết linux không cache-> slabs-> trang-> đối tượng nhưng phải có một số cách trong đất người dùng để xác định kích thước bộ nhớ của một mô-đun hạt nhân cụ thể.

Cảm ơn,

Trả lời

0

Giả sử không có một cách để làm điều này trực tiếp (trong đó có thể có, vì tất cả tôi biết) ....

Bạn có thể sử dụng LTTng để theo dõi các sự kiện hạt nhân của mình. Nếu không có sự kiện tiện dụng nào ở đó, bạn nên tạo một dấu vết mới ngay cả khi module của bạn cấp phát bộ nhớ.

Sau đó, bạn có thể phân tích dấu vết và vẽ đồ thị về cách sử dụng bộ nhớ của bạn tăng lên và co lại theo thời gian.

3

Tôi không chắc chắn nếu nó sẽ là ok cho bạn, nhưng bạn có thể nhận được số lượng bộ nhớ mà một mô-đun đã thực hiện với 'cat/proc/modules', cột thứ hai là kích thước tính theo byte mà module trong cột đầu tiên đang sử dụng.

đầu ra

mẫu cho thấy có bao nhiêu bộ nhớ là module drm sử dụng:

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

drm_kms_helper 49.394 drm 286.028

Hy vọng điều đó sẽ hữu ích.

Các vấn đề liên quan