我正在使用文件测试 udev 规则/etc/udev/rules.d/10-test.rules
。
这行:
DEVPATH=="/devices/system/node/node0", ATTR{hugepages/hugepages-1048576kB/nr_hugepages}="4"
使/sys/devices/system/node/node0/hugepages/hugepages-1048576kB/nr_hugepages
成为4
。
但这行:
DEVPATH=="/kernel/mm", ATTR{hugepages/hugepages-1048576kB/nr_hugepages}="4"
不影响/sys/kernel/mm/hugepages/hugepages-1048576kB/nr_hugepages
。
这行也没有:
DEVPATH=="/kernel", ATTR{mm/hugepages/hugepages-1048576kB/nr_hugepages}="4"
(即使重启也不起作用。)
为什么?
/sys/devices/system/node/node0
代表一个 NUMA 硬件节点,它可以接受命令以独立于系统的其余部分进入离线状态。因此它可以是udev 事件的主题,它可以根据udev 规则触发操作。/sys/kernel/mm
代表不特定的硬件:它只是内核的一般内存管理参数的地方。它在内核启动时就存在并且无法消失,因此不会有 udev 事件引用它。并且当没有udev事件时,无法触发udev规则。或者,您可以说只有下面的事物
/sys/devices
才能具有与其关联的 udev 规则。/sys/kernel
不下/sys/devices
。使用 udev 规则来操作一般内存管理参数是相当不寻常的。
/etc/sysctl.conf[.d]
将是定制它们的更标准的地方。