Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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
Linux kernel 如何提高调度和中断延迟_Linux Kernel_Embedded_Embedded Linux - Fatal编程技术网

Linux kernel 如何提高调度和中断延迟

Linux kernel 如何提高调度和中断延迟,linux-kernel,embedded,embedded-linux,Linux Kernel,Embedded,Embedded Linux,如何改善计划程序和中断延迟: 背景: 基于10核mips64处理器的嵌入式系统 9个内核运行SMP linux。内核版本2.6.32.27 我们有实时性能要求的过程,必须在1ms内完成某些任务。在最大负载条件下,可能需要800 US 该进程在接收到GPIO中断(FPGA提供的1ms中断,作为内核驱动程序实现)后开始处理。 在此之前,它将向gpio驱动程序发出icotl调用,并通过唤醒可中断系统调用将其置于睡眠状态 GPIO ISR将在此过程中唤醒 为了防止其他进程占用这个进程的CPU,我们在“

如何改善计划程序和中断延迟:

背景:

  • 基于10核mips64处理器的嵌入式系统
  • 9个内核运行SMP linux。内核版本2.6.32.27
  • 我们有实时性能要求的过程,必须在1ms内完成某些任务。在最大负载条件下,可能需要800 US
  • 该进程在接收到GPIO中断(FPGA提供的1ms中断,作为内核驱动程序实现)后开始处理。 在此之前,它将向gpio驱动程序发出icotl调用,并通过唤醒可中断系统调用将其置于睡眠状态
  • GPIO ISR将在此过程中唤醒
  • 为了防止其他进程占用这个进程的CPU,我们在“ISOLCPU”内核上运行这个进程
  • 我们已将此过程的优先级设置为用户线程中的最高优先级,如下所示: 优先级:80,调度类型:SCHED_FIFO 线程设置优先级(SCHED_FIFO,80)
  • 所有/proc/sys/kernel/sched_uu参数值都是默认值。我们没有对它们进行微调
问题:

  • 有时,我们会看到ISR已调用wake_up,但该过程仅在350uS之后安排。 这是一个伟大的时刻,因为我们的处理器运行在1.25GHz。 调度延迟的这个大数字让我们感到困惑,因为我们已经使用“ISOLCPU”专门为这个过程隔离了核心
  • 我们分析了连续1ms GPIO ISR调用之间的最大CPU周期计数。此最大时间超过1.5ms。 中断延迟的这个大数字对我们来说太令人担忧了,因为这将消耗进程在1ms边界内进行处理的可用时间

请帮助我们减少中断和调度延迟数的输入

标准Linux内核不提供实时调度。使用该补丁可以实现一定程度的实时确定性。它仍然需要仔细的设计,对于关键的实时性要求,它不能替代RTOS。

我一直在开发
linux内核4.8抢占rt
,它的
rt\u抢占补丁应用于此报告:并且有一些有希望的结果

我通过运行
rt benchmark
cyclictests
preempt-rt
non-preempt-rt
linux内核进行了基准测试,发现
preempt-linux内核
Max-Latency
与使用
2025-us
时的
非抢占式linux内核
,这可能对您的情况有所帮助


结果显然诱惑我使用
prempt-rt内核
,因为两者在
Max-Latency
方面存在巨大差异。我在这里记录了结果:,以防对您有所帮助

内核是否启用了
CONFIG\u PREEMPT
选项?不清楚:这个进程是在内核空间还是在用户空间?我们还没有启用“配置抢占”选项。我所指的过程是在用户空间中进行的。所以你至少需要启用抢占或应用@Cliffordyes已经解释过的RT补丁,我同意你的看法。让我尝试应用此修补程序并尝试编译我们的mips arch