前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux的uevent helper是什么?

Linux的uevent helper是什么?

作者头像
灯珑LoGin
发布2024-08-24 14:06:24
740
发布2024-08-24 14:06:24
举报
文章被收录于专栏:龙进的专栏

什么是Uevent机制?

uevent是kobject的一部分,用于在kobject状态发生改变时,例如增加、移除等,通知用户空间程序。用户空间程序收到这样的事件后,会做相应的处理。

uevent( user space event)是 内核与用户空间的一种基于netlink机制通信机制,主要用于设备驱动模型,常用于设备的热插拔。

uevent的机制是比较简单的,设备模型中任何设备有事件需要上报时,会触发uevent提供的接口。uevent模块准备好上报事件的格式后,可以通过两个途径把事件上报到用户空间:一种是通过kmod模块,直接调用用户空间的可执行文件;另一种是通过netlink通信机制,将事件从内核空间传递给用户空间。

其中:

  • netlink是一种socket,专门用来进行内核空间和用户空间的通信;
  • kmod是管理内核模块的工具集,类似busybox,我们熟悉的lsmod,insmod等是指向kmod的链接。

uevent helper是什么?

上文提到,在通过kmod向用户空间上报uevent的时候,会通过call_usermodehelper_exec直接执行用户空间的可执行文件。这个要执行的文件就是uevent helper。

uevent_helper的值在内核编译的时候,通过CONFIG_UEVENT_HELPER_PATH这个配置来指定。同时也可以在后期,通过修改/sys/kernel/uevent_helper文件,指定新的uevent helper.

它有什么问题?

如果启用了CONFIG_UEVENT_HELPER,那么,产生uevent的时候,内核会在[这里]运行新的uevent helper进程。也就是说,每次上报uevent,都会创建新的进程。

每次如果我们是在编译时静态指定uevent helper的话,在开机的时候,因为内核设备比较多,产生很多uevent,就会一下子创建很多进程,占用大量内存。如果内存不够,就有导致OOM的风险。

如何解决开机时uevent helper大量执行,导致oom的问题?

解法1

如果在你的场景下,不需要通过uevent helper来检测设备热插拔事件,那么就直接取消CONFIG_UEVENT_HELPER这个编译配置即可。

解法2

如果实在要用到uevent helper,那么建议在编译的时候,只启用CONFIG_UEVENT_HELPER而不设置CONFIG_UEVENT_HELPER_PATH的值,在系统启动后,再通过sysfs,把helper的路径写到/sys/kernel/uevent_helper,这样就能监测系统启动后的设备热插拔事件。

转载请注明来源:https://longjin666.cn/?p=1890

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024年8月23日2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是Uevent机制?
  • uevent helper是什么?
  • 它有什么问题?
  • 如何解决开机时uevent helper大量执行,导致oom的问题?
    • 解法1
      • 解法2
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档