- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
谁能解释一下 Linux 网络驱动程序中以下两种情况是否需要额外的同步(例如锁定)?我对内核 2.6.32 及更高版本感兴趣。
在 PCI 网卡驱动程序中,net_device
实例通常在 .probe()
回调中注册。假设驱动程序在 net_device_ops
中指定 .ndo_open
回调,执行其他必要的操作,然后调用 register_netdev()
。
内核是否可以在 register_netdev()
之后但在 .probe
回调结束之前调用 .ndo_open
回调?我想是的,但可能是,有一个更强有力的保证,可以确保设备可以在 .probe
结束之前打开?
换句话说,如果 .probe
回调在 register_netdev()
和 ndo_open
回调之后访问 net_device 结构的私有(private)部分也访问该部分,我是否需要使用锁或其他方式来同步这些访问?
是否可以保证,对于给定的网络设备,驱动程序提供的 .ndo_start_xmit
回调和 NAPI poll
回调永远不会同时执行?
我知道 .ndo_start_xmit
至少在禁用 BH 的情况下执行,并且 poll
在软中断中运行,因此在 BH 上下文中运行。但这只会在本地 CPU 上串行执行这些回调。同一网络设备的.ndo_start_xmit
和poll
是否可以在不同的CPU上同时执行?
如上所述,如果这些回调访问相同的数据,是否需要用锁什么的来保护数据?
感谢对内核代码和/或文档的引用。
编辑:
为了检查第一种情况,我进行了一个实验,并在 e1000 驱动程序(内核:3.11-rc1)中的 register_netdev()
调用结束之前添加了 1 分钟的延迟。我还在 .probe 和 .ndo_open 回调中添加了调试打印。然后我加载了 e1000.ko,并尝试在延迟结束之前访问它所服务的网络设备(事实上,NetworkManager 在我之前就这样做了),然后检查了系统日志。
结果:是的,.ndo_open
甚至可以在.probe
结束之前被调用,尽管“竞赛窗口”通常相当小。
第二种情况(.ndo_start_xmit
VS NAPI poll
)我仍然不清楚,感谢任何帮助。
最佳答案
关于“.ndo_start_xmit VS NAPI poll”qs,我的想法如下:网络驱动程序的 start-xmit 方法在 NET_TX_SOFTIRQ 上下文中调用 - 它位于 softirq ctx 本身中。 NAPI 接收轮询方法也是如此,但当然是在 NET_RX_SOFTIRQ 上下文中。
现在,两个软中断将在任何本地核心上相互锁定(而不是竞争)。但根据设计意图,软中断当然可以在 SMP 上并行运行;因此,谁能说这两种方法(“.ndo_start_xmit VS NAPI poll”)在两个单独的软中断上下文中运行,永远不会竞争?IOW,我想这可能会发生。为了安全起见,使用自旋锁来保护全局数据。
此外,随着现代 TCP 卸载技术变得越来越流行,GSO 也可以在任何时候被调用。呵呵!
关于networking - Linux网络驱动程序中的并发: probe() VS ndo_open(), ndo_start_xmit() VS NAPI poll(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17899396/
在 GKE 上,我尝试使用就绪探针/活性探针,并使用监控发布警报 https://cloud.google.com/monitoring/alerts/using-alerting-ui 作为测试,我
在我的 K8S 工作负载中,我实现了 Readiness 探测和 Liveness 探测以进行 pod 健康检查。 我想知道我是否应该将间隔 (periodSeconds) 设置为低至 1 秒,因为它
我正在尝试在 minicube kubernetes 集群中设置 istio1.5.1,我正在按照 Knative 的官方文档设置 istio 而无需 sidecar 注入(inject)。我正面临
我正在研究 linux 设备驱动程序。目前,我大致了解设备驱动程序的流程,但我不知道 probe() 函数如何获取其参数。 例如,这是我的代码,它基于内核 3.10。 static int gpio_
我正在编写一个简单的 YAML 文件以使用 Centos.6 上的 TCP 端口应用 active 探测 我从公共(public)存储库中提取了一个 centos:6 图像 使用图像启动了一个容器。
我对我的数据库使用了 Idera 的 SQL Doctor。它在“查询优化”类别中生成报告,我发现“列上的函数“PROBE”可能导致表扫描”。工具提供链接http://sqldoctor.idera.
我对我的数据库使用了 Idera 的 SQL Doctor。它在“查询优化”类别中生成报告,我发现“列上的函数“PROBE”可能导致表扫描”。工具提供链接http://sqldoctor.idera.
我正在努力理解 this omap2 Pandas 板的mcspi驱动代码。 不明白是谁调用了probe函数,this中的调用链是什么?驱动代码? 设备连接后如何通知驱动程序? 最佳答案 spi-om
我开始为通过笔记本电脑的 PCIe 扩展槽连接的 PCI 设备开发 Linux 设备驱动程序。 启动时,一切正常。但是,我正在尝试在线获得基本的 Hotplug 支持。当我弹出卡时,我可以看到(在 d
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
我正在使用 stale-if-error 来提供陈旧的内容,而在 grace 中查看 keep 和 vcl_hit 对象选项时,服务器被标记为不健康。 问题是:进入vcl子程序vcl_backend_
在我的 Kubernetes 设置中,我有 2 个 pod - A(通过部署)和 B(通过 DS)。 Pod B 以某种方式依赖于 Pod A 的完全启动。我现在想在 Pod B 中设置一个 HTTP
我目前正在研究哈希表,对双重哈希有点困惑。首先让我从我得到的信息开始。 首先创建一个数组来保存所有数据,并且它们按键排序。我使用公式 K % size 来查找键在数组中的位置。如果您将 key 提交到
有一个函数将从两个不同的平台驱动程序调用。我想知道linux的平台驱动核心是否有机会同时调用两个不同设备的probe()?如果是,那么从这两个 probe() 调用的公共(public)函数应该设计为
我正在尝试使用 linux perf 工具在特定功能期间监控性能统计数据。 我正在按照 https://perf.wiki.kernel.org/index.php/Jolsa_Features_To
在 kubernetes 官方文档中,我正在阅读此页面(关于 container probe 以及为什么我们应该使用 startup-probe) when-should-you-use-a-star
我正在尝试设置一个 2 节点 gluster 服务器。我已经在这两个节点中安装了 gluster-server 并启动了 glusterd 服务。 我能够从两台机器上对这些机器中的每台进行 ping
我有一个在 Ubuntu 容器内运行的进程,如果该进程被终止,我想重新部署该容器。我在容器规范中添加了以下活性探针 livenessProbe: exec: command:
所以我知道我想为其创建一个书签的应用程序,我知道该应用程序是使用 Angular 6 构建的。我做了一些谷歌搜索,找到了一种使用 article 修改 DOM 的方法。 第一步是调用probe ng上
我有一个 k8s 集群。我们的服务是基于队列的。我们的 pod 订阅事件队列,获取事件并执行任务。那么对于这种服务,k8s的liveness probe和readiness probe怎么定义呢? 最
我是一名优秀的程序员,十分优秀!