【问题标题】:Do fsnotify really need global list scan?fsnotify 真的需要全局列表扫描吗?
【发布时间】:2011-09-05 13:36:05
【问题描述】:

我正在研究 linux 内核代码,更具体地说,是 fs/notify/fsnotify.c 中的文件系统通知 ... AFAIK,现在每个 inode 都有一个“标记”列表,每个索引都引用一个“组”侦听该 inode 上的通知。在 VFS 代码中,通过使用 fsnotify(triggering_inode, REASON|OTHER_REASON, additional_parameters...) 引发通知

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; },它肯定会随着系统上通知侦听器的数量而更好地扩展。

周围的人都知道为什么这里仍然使用全局列表吗?

【问题讨论】:

    标签: linux performance coding-style notifications linux-kernel


    【解决方案1】:

    latest version 似乎不再这样做了。

    【讨论】:

    • 所以这个性能问题已经从 2.6.36 开始处理了,上面的奇怪只是“过渡”的糟糕代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多