在 Linux 内核中更改网络接口时为什么要使用 rtnl_lock?

问题描述 投票:0回答:1

我有一个有点愚蠢的问题,但我想知道为什么我们需要序列化有关特定接口更改的操作? https://elixir.bootlin.com/linux/v6.10-rc7/source/net/core/dev_ioctl.c#L764 我们不能同时对两个不同的界面进行更改而不会出现问题吗?

这个问题的诞生是因为我面临着类似的问题,如下所述:https://www.linuxquestions.org/questions/linux-networking-3/scale-register-a-network-device-register_netdev-takes -长时间且高CPU使用率-4175725384/

networking linux-kernel semaphore
1个回答
0
投票

RTNL(Route Table Netlink)是Linux内核中用于控制路由的协议。当您想要更改网络接口(例如更改 IP 地址或子网掩码)时,您需要获取 RTNL 锁。这样做是为了防止可能同时尝试更改网络设置的进程之间发生冲突。

RTNL 锁定确保一次只有一个进程可以对网络接口进行更改。这有助于避免同时访问资源时可能出现的同步问题和潜在错误。

此外,RTNL 锁定还允许 Linux 内核优化其内部与路由相关的数据结构,因为它知道在给定时间没有其他进程可以更改此数据。

因此,在更改网络接口时使用 RTNL 阻塞是确保系统安全性和稳定性的重要一步。

© www.soinside.com 2019 - 2024. All rights reserved.