-- linux爱好者,业余时间热衷于分析linux内核源码 -- 目前主要研究云计算和虚拟化相关的技术,主要包括libvirt/qemu,openstack,opennebula架构和源码分析。 -- 第五届云计算大会演讲嘉宾 微博:@Marshal-Liu
分类: LINUX
2010-12-02 15:38:55
这两天遇到一些 udev 的问题, 顺便阅读了一下文档(见参考文档), 基本了解了 udev 的机制。 嵌入式系统性能很重要,于是对内核这一块进行了性能方面的研究。
内核大概20多处会调用了 kobject_uevent 函数发送 KOBJ_ADD / KOBJ_REMOVE 等事件。其中我们最关心的就是在device_add/device_del 中向用户空间发送设备的添加、删除信息。
kobject_uevent 直接调用 kobject_uevent_env 函数完成功能, 我们先分析一下该函数的流程。
我们通过高精度定时器(一个 3.25M 的timer)来统计 kobject_uevent 的时间花费:
考虑到:
我们可以:
这样,在进入用户空间之前,我们的uevent机制不会做任何事情,只有用户空间调用
echo "" > /sys/kernel/uevent_helper
后, uevent 才会被真正发送到netlink.
实践证明系统运行良好。
Writing udev rules
http://reactivated.net/writing_udev_rules.html
http://blog.csdn.net/colorant/archive/2008/01/09/2031721.aspx