我正在尝试修改/sys
. 我的命令失败了。
例如echo 63 > /sys/bus/pci/devices/0000:62:00.0/sriov_numvfs
->bash: echo: write error: Cannot allocate memory
例如echo three > /sys/devices/system/node/node1/hugepages/hugepages-1048576kB/nr_hugepages
->bash: echo: write error: Invalid argument
我该如何调试这些故障?是否有一种通用方法可以找到这些虚拟文件另一端的日志?理想情况下,我想找到生成错误消息的过程或源代码。
进程就是Linux内核。它的源代码可以在各种 Git 存储库中找到。
内核生成的日志消息将显示在
dmesg
(需要首先启用的“调试”级消息除外)。Sysfs 属性由设备驱动程序定义和处理,但通常更容易
git grep
(或使用 Elixir 在线搜索)导致问题的特定文件名并从那里继续挖掘。寻找一对“存储”/“显示”功能,它们接受您的写入并为您的读取提供数据。写入
sriov_numvfs
由drivers/pci/pci-sysfs.c处理sriov_numvfs_store()
。它打印的错误消息(使用 pci_info 或 pci_err)转到 dmesg。处理写入的部分
nr_hugepages
(全局 sysctl 和每个节点属性)似乎在mm/hugetlb.c 中——查找 function__nr_hugepages_store_common()
。不幸的是,代码实际上并没有首先生成日志消息。