【问题标题】:Linux device driver for SMP systemSMP系统的Linux设备驱动
【发布时间】:2012-02-17 09:22:42
【问题描述】:

我为 CD 设备开发了一个 Linux 块设备驱动程序。该驱动程序运行良好,但现在要求它应该在 SMP 系统上运行。当我在 SMP 系统上进行测试运行时,我发现驱动程序的性能下降。与单核系统相比,DATA CD 的比特率大幅下降。所以我知道我的驱动程序需要修改以使其 SMP 安全。

在我的驱动程序中,我使用过: 1.内核线程 2.互斥体 3.信号量 4. 完成

我的 SMP 系统是:ARM Cortex-A9 Dual Core 600 MHz

有人可以告诉我在进行此移植时应该记住哪些所有因素吗?

【问题讨论】:

  • 查看Documentation/lockstat.txt 文件,它可能会有所帮助。 (不打算作为如何编写体面的支持 SMP 的内核代码的完整答案,但它可能会帮助您发现错误的锁使用..)

标签: linux-device-driver


【解决方案1】:

通常对于 SMP 系统,共享资源(I/O 资源)和全局变量必须以这样一种方式处理,即同时执行的任务不能覆盖、破坏数据,为此您可以使用自旋锁、信号量等来确保一次只有一个核心对该块/任务执行操作。这是逻辑实现,您必须识别设备驱动程序中的潜在风险区域,如 ISR、读取和写入操作,并且必须识别设备驱动程序的多个入口点和中心任务(在驱动程序中)它们正在/将要执行的/去吧。

【讨论】: