我正在尝试修改 中的某些内容/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
我该如何调试这些故障?是否有通用方法可以找到这些虚拟文件另一端的日志?理想情况下,我希望找到生成错误消息的进程或源代码。
答案1
该过程是Linux 内核。其源代码可以在各种 Git 存储库中找到。
内核生成的日志消息将显示在dmesg
(除了“调试”级别需要先启用的消息)。
Sysfs 属性由设备驱动程序定义和处理,但通常更容易git grep
(或使用 Elixir 在线搜索)找到导致问题的特定文件名并从那里继续挖掘。寻找一对“存储”/“显示”函数,它们接受您的写入并为您的读取提供数据。
写入
sriov_numvfs
由sriov_numvfs_store()
驱动程序/pci/pci-sysfs.c它打印的错误消息(使用 pci_info 或 pci_err)发送到 dmesg。处理写入(全局 sysctl 和每个节点属性)的部分
nr_hugepages
似乎位于mm/hugetlb.c– 查找函数__nr_hugepages_store_common()
。不幸的是,代码实际上并没有生成日志消息。