3
我正在研究linux内核代码,更具体地说是fs/notify/fsnotify.c中的文件系统通知... AFAIK,现在每个inode都有一个“标记”列表,每个标记引用一个“组”通知该inode。在VFS代码,通知是通过使用fsnotify(triggering_inode, REASON|OTHER_REASON, additional_parameters...)
fsnotify真的需要全局列表扫描吗?
在这一fsnotify()
功能提高,我被
list_for_each_entry_rcu(group, &fsnotify_groups, group_list) {
if (test_mask & group->mask) {
if (!group->ops->should_send_event(group, to_tell, mask))
continue;
// more code that sends notification
}
}
不解特别是由事实fsnotify_groups
显然是(fsnotify.h)全球列出所有组的记录。我最好的选择是内核开发人员知道他们在这里做了什么,而且我错过了一个关键点,它阻止我们仅仅使用foreach(mark:inode->fsnotify_mark_entry) { g=mark->associated_group; }
,这肯定会随着系统上的通知监听器数量的增加而更好地扩展。
任何人都有一个线索,为什么事情仍然在这里使用全局列表?
要去研究一下。感谢您指出。 – PypeBros
所以这个性能问题已经从2.6.36开始处理了,上面的怪异只是“过渡性”差的代码。 – PypeBros