请问下, 大家平时看linux源代码发现看不懂的,都有直接问代码作者吗?
最近看3.x kernel/sysctl.c这部分代码,感觉比较复杂,有些函数逻辑不太理解
比如struct ctl_table_header *__register_sysctl_paths(
struct ctl_table_root *root,
struct nsproxy *namespaces,
const struct ctl_path *path, struct ctl_table *table)
中
for (set = header->set; set; set = set->parent) {
struct ctl_table_header *p;
list_for_each_entry(p, &set->list, ctl_entry) {
if (p->unregistering)
continue;
try_attach(p, header);
}
}
这部分,循环,为什么要对每个p都做个try_attach
【 在 ameng 的大作中提到: 】
我说说想法哈,不一定合适,您根据实际情况考量。
比如有 100 个 vlan,并且不是太经常修改。
-- 比如每分钟不超过 1 次修改,就算不太经常。
这个量,我觉得就用普通的文件打开读的方式就行。
每次 16*100 = 1.6k 个文件打开、读、关闭操作。若干秒一次,对操作系统负担应该不算重。
如果 vlan 比这个量大很多,而且经常变化。
可能得进到这块的内核看看,里面数据结构是怎么构成的。
看看能不能一次把内核数据结构全部导出来,在应用层解析。理论上这样文件 I/O 的操作可以每次收集就一个打开,然后 IOCTL 就行了。但是这个对开发要求很高,而且内核数据结构的调整不会通知你,一旦内核升级的时候数据结构调整了,得跟着升级。
------------------
还有就是经常调整 vlan 这个需求不太常规。
如果您的业务需求是下位机需要临时连上 vlan 干点啥,然后马上拆。
我倒是建议把这个业务挪到应用层处理。
【 在 b0207191 的大作中提到: 】
: 比如访问
: /proc/sys/net/ipv4/neigh/vlan15下的若干节点
: anycast_delay
: ...................
--
FROM 218.66.32.*