当前位置: 首页 > 知识库问答 >
问题:

Linux PCIe驱动程序对MSI具有周期性的长延迟

崔单弓
2023-03-14

我已经为Linux V4.1.15(非PREEMPT_RT)创建了一个PCIe驱动程序,其中有一个IRQ,它是从FPGA的MSI生成的。我的ISR是:

static irq_handler int_handler(int irq, void* dev_id, struct pt_regs* regs)
{
    spin_lock(&my_lock);
    msi_counter++;
    spin_unlock(&my_lock);

    return (irq_handler_t) IRQ_HANDLED;
}
    null

此外,当我查看cat/proc/interrupts时,它显示只有核心0(四个核心中的第一个)是唯一运行ISR的核心。我不知道这是否有任何意义,但我认为这是值得一提的。

我创建了一个PREEMPT_RT内核映像,并创建了我的ISRrequest_irq()和标志irqf_no_suspend、IRQF_NO_THREAD、irqf_percpu。我还将spin_lock替换为atomic_t,最大的改进来自preempt_rt。我现在得到的平均潜伏期为~12我们。

共有1个答案

许典
2023-03-14

可以在spin_lock前后添加计时器。如果时间的差异超过某个阈值,再增加一个时间。您将计算spin_lock导致延迟的频率。如果它与您看到延迟的频率相匹配,那么您可以尝试找出另一个锁持有者不释放它的原因。它能在持有锁的时候被抢占吗?

另一个需要研究的问题是,spin_lock本身是否需要很长时间,概率很低,但不是-零?

 类似资料:
  • 我已经从http://dev.MySQL.com/downloads/connector/j/下载了MySQL“mysql-connector-java-gpl-5.1.26.msi”的JDBC驱动程序。但我想不出怎么用。http://dev.mysql.com/doc/refman/5.6/en/connector-j-binary-installation.html上的文档说明它是一个zip文

  • 问题内容: 我正在尝试使用JDBC驱动程序将android应用程序连接到服务器(PostgreSQL),但是出现此错误: 我尝试了很多事情,例如在路径中添加驱动程序的地址,但没有任何效果。我遵循了本教程:http : //appliedcoffeetechnology.tumblr.com/post/10657124340,并在构建路径中添加了驱动程序JDBC4(我也尝试过JDBC3)。 每个人都

  • 对于InterClient7.5.1和8.1.5,在Java8中创建新的JDBC连接失败 此类似乎被InterClientJDBC库引用或使用。Java7不会发生错误。是否有方法解决此错误? 此代码重现了Java 8上的问题: 输出: interbase.interclient.Connection处线程“main”java.lang.NoClassDefFoundError:sun/io/Byt

  • 我正在尝试使用Selenium和Python编写这段代码,以跳到浏览器的下一个窗口: 但是我不明白为什么会发生这个错误,请帮帮我 错误:attribute错误:“WebDriver”对象没有属性“switch_to_window_handles”

  • 对于ex,当我的chrome放在Compand提示符中时,会给出路径-/applications/google\chrome.app system.setproperty(“webdriver.chrome.driver”,“/applications/google/chrome.app”);WebDriver driver=new ChromeDriver(); driver.get(“http

  • 我的目标是使用聚合框架创建一个管道来对我的数据进行分组,然后将这个管道与java驱动程序一起使用。MongoDB v4.0.3 我使用MongoDB Compass创建了以下管道(减少到重要部分): 这导致以下(生成的)Java代码: 集合中$组阶段之前的数据如下所示: $组阶段应返回以下数据结构: 问题所在 Mongo Compass按预期预览了阶段的结果,但使用java驱动程序的阶段的结果非常