首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >软实时Linux调度

软实时Linux调度
EN

Stack Overflow用户
提问于 2014-02-19 03:17:30
回答 1查看 1.3K关注 0票数 8

我有一个有一些软实时要求的项目。我有两个进程(我编写的程序)做一些数据采集。在任何一种情况下,我都需要不断地读取即将进入的数据并对其进行处理。

第一个程序是严重线程化的,第二个程序使用一个应该线程化的库,但是我不知道引擎盖下面发生了什么。每个程序都由用户执行,(默认情况下)我看到每个程序的优先级为20,值很好,为0。每个程序使用大约30%的CPU。

就目前情况而言,这两个进程都必须与一些后台进程进行竞争,我想尽可能地让我的两个程序在CPU上得到最好的尝试。我的主要问题是,我有一个与我交谈的设备,它有一个64字节的硬件缓冲区,如果我不能及时读取,就会出现溢出。我注意到这种情况每2-3个小时运行一次.

根据我的研究(http://oreilly.com/catalog/linuxkernel/chapter/ch10.html),似乎有三种方式来玩弄优先级:

  1. 将好的值设置为较低的数值,从而赋予每个进程更多的优先级。我可以在不修改代码(或使用系统调用)的情况下使用尼斯命令来完成这一任务。
  2. 对整个进程使用sched_setscheduler()来执行特定的调度策略。
  3. 使用pthread_setschedparam()单独设置每个线程。

我遇到了以下障碍:

  1. 假设我选择3,如何防止优先级较低的线程被饿死?是否还有一种方法可以确保共享锁会导致较低优先级的线程被提升到更高的优先级?假设我有一个实时线程,SCHED_RR和它与默认的SCHED_OTHER线程共享一个锁。当SCHED_OTHER线程获得锁时,我希望它执行@较高的优先级来释放锁。我该如何确保这一点?
  2. 如果SCHED_RR的一个线程创建了另一个线程,那么新线程是自动SCHED_RR,还是需要指定这个线程?如果我有一个设置为SCHED_RR的进程,它的所有线程都会自动遵循这个策略吗?如果SCHED_RR进程生成子进程,那么它是否太自动生成SCHED_RR?
  3. 考虑到代码只消耗CPU的60%,这其中有什么关系吗?还是我应该关注的与后台进程共享CPU的问题仍然存在,并可能导致缓冲区溢出?

很抱歉提出这个冗长的问题,但我觉得需要一些背景信息。提前谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-19 04:02:44

(1) 塞普海

(2)新创建的线程继承其创建线程的调度和优先级,除非在调用赛特赛德帕拉姆 /集调度策略时指示线程属性(例如pthread_create /pthread_create)。

(3)既然你现在不知道是什么原因造成的,任何人都很难有把握地说出来。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21870318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档