Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debian 什么优先于SCHED_截止日期?_Debian_Real Time_Porting_Preempt Rt_Sched Deadline - Fatal编程技术网

Debian 什么优先于SCHED_截止日期?

Debian 什么优先于SCHED_截止日期?,debian,real-time,porting,preempt-rt,sched-deadline,Debian,Real Time,Porting,Preempt Rt,Sched Deadline,在对高速线程进行调度的实验中,我注意到有时会出现线程未调度的大周期(多毫秒)。我想知道在我使用的配置中,什么可以对调度程序执行此操作 使用RT(i686)的最新Debian拉伸(稳定) 双核英特尔(2237MHz) PS2键盘和鼠标 CPU 1保留(通过grub) 用于将我的测试过程放入core 1的任务集 SMI禁用、速度步进禁用等(典型RT BIOS设置) USB端口未禁用,但未插入任何内容 禁用IRQ平衡 我确认CPU1上只有工人、定时器等。其他一切都在CPU0上 我的线程是SCHED

在对高速线程进行调度的实验中,我注意到有时会出现线程未调度的大周期(多毫秒)。我想知道在我使用的配置中,什么可以对调度程序执行此操作

  • 使用RT(i686)的最新Debian拉伸(稳定)
  • 双核英特尔(2237MHz)
  • PS2键盘和鼠标
  • CPU 1保留(通过grub)
  • 用于将我的测试过程放入core 1的任务集
  • SMI禁用、速度步进禁用等(典型RT BIOS设置)
  • USB端口未禁用,但未插入任何内容
  • 禁用IRQ平衡
我确认CPU1上只有工人、定时器等。其他一切都在CPU0上

我的线程是SCHED_DEADLINE(唯一一个这样安排的线程),周期为300us。我使用schedules_yield()在保留开始之前很久就释放线程(只是一个测试循环),所以我确信它没有过度运行

我得到的是一个几乎完美的3333Hz输出(通过一个o型示波器),它时不时地被阻塞15毫秒以上。我已经研究过中断(除了计时器,CPU上的中断不会增加),我已经禁用了NMI中断等等,但没有找到干扰进程是什么。我不相信我完全理解什么可以优先,并导致调度程序跳过周期,所以我希望有人能有一个想法

我认为可能是磁盘IO,但这似乎与间隙不一致(有时是…)。VGA/控制台的使用似乎使情况变得更糟,但即使不使用,仍然会出现间隙

是的,在你问之前。。。。这只是一个实验,看看这是否可以可靠地完成。我的实际代码运行在QNX上,在相同的硬件上,QNX以这种速度稳定运行。我正在试验,看看是否可以用PREEMPT\u RT将其移植到Debian


谢谢

SCHED_DEADLINE
任务的优先级高于具有不同优先级的所有其他用户级任务(即
SCHED_RR
SCHED_FIFO
SCHED_other

请注意,自内核4.16以来,可以通过使用
SCHED_FLAG\u DL_overflow
SIGXCPU
信号上的用户级处理程序来检查溢出(请参阅)


如果您需要检查CPU在做什么,这可能是最好的方法。

您使用的是什么图形驱动程序(假设它有图形芯片组)?请与lsmod联系。通常情况下,图形驱动程序可以执行操作(我认为它们与DMA相关),在硬件级别将事情锁定数毫秒。我看到的文档表明,英特尔的驱动程序也是如此,而Nvidia的专有驱动程序和nouveau也是如此。根据我的经验,VESA驱动程序没有这个问题。您是否有一些简单的io,例如gpio或带有调制解调器控制的串行端口;基本上你可以把示波器连接起来?检测内核,以便ipi处理程序在其开始时断言一些信号,并在其结束时反断言它。如果您有一些这样的信号可用,那么还有其他一些点值得放置类似的括号。找到导致问题的路径(ipi为5美元)后,用相同的方法细分路径。最终你会将它减少到一个旋转锁,可能是在alloc/free上。我会检查图形驱动程序并禁用它。我变得懒惰,安装了带有默认选项的操作系统。我一直在使用并行端口观看线程的激活和睡眠。还有许多其他基于pci和isa的gpio可供选择(pc/104+)。听起来我今天有事情要做!谢谢你的建议。禁用了i915,情况只略有改善。直到我将noacpi添加到内核参数中,事情才开始稳定下来。我不确定这会产生什么影响,但经过一些调整后,我发现即使在磁盘io和网络io负载相当的情况下,我也可以获得稳定的3333hz。谢谢你的ipi线索!这让我在没有noacpi的情况下,检查CPU的频率是否在变化。禁用SpeedStep可能不会禁用ACPI P状态(我不记得它们现在是否相同)。P状态转换可能需要时间