Background:我正在致力于将一个Ada项目从VxWorks移植到Linux平台.该项目在很大程度上依赖于Ada动态任务优先级的使用.
我做了几个让我感到困惑的实验.Ada任务优先级似乎不会影响底层的Linux优先级/优美度.两个具有不同优先级的相同任务需要相同的时间才能完成,即使固定在一个CPU核心上也是如此.
Question: Linux上Ada任务的语义是什么?为什么我看不到设置任务优先级的效果?
Background:我正在致力于将一个Ada项目从VxWorks移植到Linux平台.该项目在很大程度上依赖于Ada动态任务优先级的使用.
我做了几个让我感到困惑的实验.Ada任务优先级似乎不会影响底层的Linux优先级/优美度.两个具有不同优先级的相同任务需要相同的时间才能完成,即使固定在一个CPU核心上也是如此.
Question: Linux上Ada任务的语义是什么?为什么我看不到设置任务优先级的效果?
问:Linux上Ada任务的语义是什么?为什么我看不到设置任务优先级的效果?
第一个问题基本得到了Shark8的回答.我想我应该把我第二个问题的答案贴出来.
Answer:在Linux上使用Ada任务优先级需要使用Linux"实时"调度算法.默认值通常为SCHED_OTHER
.pragma Time_Slice (0.0)
或pragma Task_Dispatching_Policy (FIFO_Within_Priorities)
将调度算法设置为SCHED_FIFO
.这需要以根用户身份运行应用程序.
注意:我曾try 在运行的进程上使用chrt
手动设置SCHED_FIFO,但不起作用.
中的换行符