本人不是一专追求机器性能的人. 本人世界观觉得是没有必要这样做的.
本文主要是为了弄明白一件事: 编译入内核的module与动态加载的module是否在效率上有较大的差距.
linux kernel是单核结构, 称为monolithic kernel. 因为单核的一些缺点, linux kernel加入了modular结构.
因此linux对待module的方法有两种:
1. module被编译入内核, 成为monolithic kernel内部代码
2. module被编译成模块, 需要时才加载. 称为modular kernel.
被加载入内核的module, 其实也是执行于kernel的code space的. 这个的module与built-in module在效率上什么区别吗?
如果一定要说效率的话, 差别就在于静态链接与动态链接的差别了!
相反, modular kernel可以让kernel得到功能裁减, 效率上有提升!
modular module
优势:
1. 方便增加功能.
2. module参数传递
3. 减少memory footprint, 增加效率. 不使用时可以rmmod, 减少内存开支
缺点:
1. 在加载module上浪费时间( 这点其实是可以无视的! )
2. 容易被利用rootkit( 如果Module support = N 的话就永远不会出现 )
这里也没有提到built-in的module是否比load入的module效率高.
http://www.redhatlinuxsysadmin.com/configure-key-linux-components/module2/modular-monolithic-kernels.php
module需要被注册才可以被使用的. 所以/proc/devices中有系统中的所有驱动module
jessinio@niolaptop ~ $ cat /proc/devices
Character devices:
1 mem
4 /dev/vc/0
4 tty
4 ttyS
5 /dev/tty
...
Block devices:
1 ramdisk
259 blkext
7 loop
8 sd
9 md
11 sr
...
例子中, major number是1的就是内存的module
jessinio@niolaptop ~ $ cat /proc/devices |grep alsa
116 alsa
jessinio@niolaptop ~ $ lsmod |grep alsa
比较一下, 可以知道alsa是一个built-in module
rmmod命令能否拆下built-in module呢? 下面测试一下
jessinio@niolaptop ~ $ sudo rmmod alsa
ERROR: Module alsa does not exist in /proc/modules
* 因为built-in module不在此文件中记录, rmmod是需要此文件的记录, 所以出错
其实rmmod是使用delete_module这个system call的:
jessinio@niolaptop /tmp $ sudo strace rmmod test_n
...
open("/proc/modules", O_RDONLY)
...
delete_module("test_nx", O_RDONLY|O_EXCL|O_NONBLOCK)
...
从delete_module的man手册中看到: delete_module - delete a loadable module entry. 只是针对于loadable的module才起作用的
* 所以rmmod是不能拆下built-in module的
其它参考文档:
http://systhread.net/texts/200510kdiff.php
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.