linux - 如果我禁用抢占和 irq,udelay 是确定性的吗?

标签 linux linux-kernel linux-device-driver

我使用udelay 来控制GPIO 信号的切换时间。我使用 preempt_disable 和 local_irq_disable 禁用了抢占和中断。但是测试时不时显示udelay造成的延迟比我预想的要长。我在双核 ARM 系统上运行。只要我禁用抢占和中断,我可以知道在所有系统条件下 udelay 时间是否确定且准确吗?如果没有,有什么建议吗?非常感谢。

最佳答案

udelay(和 mdelay)通过自旋(忙等待)工作,并使用 bogomips 值来确定自旋计数。考虑到现代处理器不会确定性地执行指令,因为缓存未命中、管道、分支预测未命中、可变内存延迟等,我假设 udelay 不会是确定性的,即使您禁用硬件中断也是如此。

如果您的平台有某种高性能计时器(例如英特尔 CPU 上的时间戳计数器),您也许可以让它为您工作。

关于linux - 如果我禁用抢占和 irq,udelay 是确定性的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12811490/

相关文章:

c - 如何编写一个内核模块来查找内核中的路由表和arp缓存?

linux - Linux 中的热感知调度程序

linux - 为什么 Kubernetes 返回 ioctl 的奇怪结果

linux - 如何分析lpt测试用例的测试结果

java - 使用gcore生成的java corefile有用吗?

mysql - 具有 130gb 内存的服务器上 innodb_buffer_pool_size 的正确值?

linux - 在 Linux 模块中使用带有参数的导出符号时丢失数据

linux - 如何获取使用 insmod 插入的内核模块的地址?

linux - 有没有办法让 Linux 内核重新运行它的 PCI 初始化代码?

linux - sed从另一个文件内容中替换一个词