过多的Linux延迟

时间:2014-01-20 23:49:58

标签: linux

您认为Linux系统中50毫秒的延迟是正常的吗?

我有一个包含许多线程的程序,一个线程控制一个带有电机和光电池的物体的移动。

我已经做了很多事情来获得最小延迟,但总是得到50毫秒,导致对象中的位置错误。

我做的事情: - -20的好功能 - 光电控制线程的线程优先级:SCHED FIFO,99 - 内核配置:CONFING_PREEMPT = y - mlockall(MCL_CURRENT | MCL_FUTURE);

很多时候,我在等待光电管时损失了50毫秒。我认为问题不是另一个问题 我的线程,但在内核中处理。

是否可以减少这种延迟?是否可以知道这个50毫秒额外的人是谁?

控制光电池的线程会产生许多“读取”功能。这会产生问题吗?

/ * ** * ** * ** * /

目前的情况是: 只有一个线程运行无限空循环,只在循环结束时查找循环开始时的时间。 没有访问磁盘,没有访问GPIO,没有串口,没有。 循环在很多时候花费50毫秒。

我没有设置cpuaffinity,我的处理器只有一个核心。

1 个答案:

答案 0 :(得分:0)

我一直在我的计划中进行测试。 这是主函数中的代码,在程序为线程加星之前,导致de 50 mseg延迟:

struct sched_param lsPrio;

lsPrio.sched_priority = 1;
if (sched_setscheduler (0, SCHED_FIFO, &lsPrio) != 0)
    printf ("FALLO sched_set\n");

如果我对此行进行评论,则延迟会减少约1 mseg。

为什么这条线会导致延迟?