同步访问 net_device 结构的最佳原因是什么?
What is the best why to synchronize access to net_device structures?
我正在使用 linux 内核版本 2.6。
我想同步访问 单个 net_device 结构。
在内核代码中寻找答案时,我遇到了与此问题相关的两种同步机制:
dev_base_lock锁.
rtnl_lock()函数。
我的问题是:
两者有什么区别?
使用上述方法有什么经验法则吗?
- 我应该使用其中哪一个来同步访问单个 net_device
结构?
谢谢!
可以参考<<了解linux网络内部>>
中的“8.15.锁定”一章
dev_base
列表和两个哈希表 dev_name_head
和 dev_name_index
受 dev_base_lock
保护。但是,该锁仅用于序列化对列表和表的访问,而不用于序列化对 net_device 数据结构内容的更改。 net_device 内容更改由路由网络link 信号量 (rtnl_sem) 处理,信号量分别通过 rtnl_lock
和 rtnl_unlock
获取和释放。[ *] 此信号量用于序列化对 net_device 个实例的更改,来自:
运行时事件
例如,当link状态改变时(例如,网线被插入或拔出),内核
需要通过修改dev->flags来改变设备状态。
配置更改
当用户使用来自 net-tools 包的 ifconfig 和 route 或来自 IPROUTE2 包的 ip 等命令应用配置更改时,内核会通过 ioctl 命令和 Netlink 套接字得到通知,分别。通过这些接口调用的例程必须使用锁。
[*] 也可以使用其他例程来获取和释放信号量。有关详细信息,请参阅 include/linux/rtnetlink.h。
我正在使用 linux 内核版本 2.6。 我想同步访问 单个 net_device 结构。 在内核代码中寻找答案时,我遇到了与此问题相关的两种同步机制:
dev_base_lock锁.
rtnl_lock()函数。
我的问题是:
两者有什么区别?
使用上述方法有什么经验法则吗?
- 我应该使用其中哪一个来同步访问单个 net_device 结构?
谢谢!
可以参考<<了解linux网络内部>>
中的“8.15.锁定”一章 dev_base
列表和两个哈希表 dev_name_head
和 dev_name_index
受 dev_base_lock
保护。但是,该锁仅用于序列化对列表和表的访问,而不用于序列化对 net_device 数据结构内容的更改。 net_device 内容更改由路由网络link 信号量 (rtnl_sem) 处理,信号量分别通过 rtnl_lock
和 rtnl_unlock
获取和释放。[ *] 此信号量用于序列化对 net_device 个实例的更改,来自:
运行时事件
例如,当link状态改变时(例如,网线被插入或拔出),内核 需要通过修改dev->flags来改变设备状态。
配置更改
当用户使用来自 net-tools 包的 ifconfig 和 route 或来自 IPROUTE2 包的 ip 等命令应用配置更改时,内核会通过 ioctl 命令和 Netlink 套接字得到通知,分别。通过这些接口调用的例程必须使用锁。
[*] 也可以使用其他例程来获取和释放信号量。有关详细信息,请参阅 include/linux/rtnetlink.h。