草庐IT

sched_getaffinity

全部标签

c - Linux 实时调度优先级(SCHED_FIFO 和 SCHED_RR)的实际使用?

我正在试验SCHED_FIFO,我看到了一些意外行为。我使用的服务器有12个内核,禁用了超线程。所有可配置的中断都已设置为在CPU0上运行。我的程序开始使用pthreads库为较低优先级任务创建一个线程,而不更改CPU亲和性设置为核心0的调度策略。然后父线程将其CPU亲和性设置为核心3,并将其自己的调度策略设置为SCHED_FIFO使用sched_setscheduler(),pid为零,优先级为1,然后开始运行非阻塞循环。程序本身运行良好。但是,如果我在程序运行时尝试第二次登录服务器,终端将无响应,直到我停止我的程序。这就像调度程序试图在与实时进程相同的核心上运行其他进程。我错过了什

c - linux 中的 sched_setaffinity cpu 亲和性

我在一台有1个插槽、4个内核的服务器上用Linux做了一个sched_setaffinity测试,以下/proc/cpuinfo显示cpu信息:processor:0modelname:Intel(R)Core(TM)2QuadCPUQ8400@2.66GHzcachesize:2048KBphysicalid:0siblings:4cpucores:4processor:1modelname:Intel(R)Core(TM)2QuadCPUQ8400@2.66GHzcachesize:2048KBphysicalid:0siblings:4cpucores:4processor:2m

c++ - 内核模块和 SCHED_RR 线程的优先级

我有一个嵌入式Linux平台(Beagleboard,运行AngstromLinux),连接了两个设备:通过USB连接的激光测距仪(HokuyoUTM30)通过SPI连接的自定义外部板我们编写了一个负责SPI数据传输的Linux内核模块。它有一个IRQ处理程序,其中spi_async被调用,这反过来会导致调用异步回调方法。我的C++应用程序包含三个线程:数据处理的主线程激光轮询线程一个SPI轮询线程我遇到的问题似乎是由上述模块的交互方式引起的。当我关闭USB设备(激光测距仪)时,我会正确接收所有SPI消息(每3毫秒1条消息,消息长度除以数据速率为当我打开USB设备并使用正常的线程调度(

c - kernel/sched.c/context_switch() 是否保证每次进程切换时都会被调用?

我想改变Linux内核,以便每次当前PID发生变化时——即,切换到一个新进程——执行一些诊断代码(下面有详细解释,如果好奇的话)。我做了一些挖掘,似乎每次调度程序选择一个新进程时,函数context_switch()都会被调用,这是有道理的(这只是来自对sched的粗略分析.c/schedule()).问题是,Linux调度程序现在对我来说基本上是黑魔法,所以我想知道这个假设是否正确。是否保证每次选择新进程以在CPU上获得一些时间时,都会调用context_switch()函数?或者在内核源代码中是否有其他地方可以在其他情况下处理调度?(或者我完全误解了这一切?)为了提供一些背景信息,

linux - sched_batch 和 sched_other 调度有什么区别?

我正在从事Ubuntu项目。还没有发现sched_batch和sched_other之间的明显区别。谁能告诉我区别? 最佳答案 假定使用sched_batch调度的线程是非交互式的,但受CPU限制并针对吞吐量进行了优化。因此,此策略对缓存更友好。默认的sched_batch时间片是1.5秒。此外,在SMP的情况下,sched_batch将迁移到具有高空闲度的核心(相对于非批处理线程)。 关于linux-sched_batch和sched_other调度有什么区别?,我们在StackOve

c - sched_setaffinity() 是如何工作的?

我想了解linux系统调用sched_setaffinity()的工作原理。这是我的问题的后续问题here.我有thisguide,它解释了如何使用系统调用并有一个非常简洁(有效!)的示例。所以我下载了Linux2.6.27.19kernelsources.我对包含该系统调用的行执行了“grep”,得到了91个结果。没有希望。最终,我试图了解内核如何能够为特定内核(或处理器)设置指令指针。我熟悉单核单线程程序的工作原理。可能会发出“jmpfoo”指令,这基本上将IP设置为“foo”标签的内存地址。但是当有多个内核时,就必须说“从内存地址foo获取下一条指令,并设置内核编号2的指令指针以

c - 了解 POSIX 和 Linux/glibc sched_* 函数之间的差异

POSIXXSH2.8.4ProcessScheduling定义线程和进程的调度属性的行为。sched_*接口(interface)被指定为影响进程的调度属性,而不是线程。以下段落阐明了这一点:ThePOSIXmodeltreatsa"process"asanaggregationofsystemresources,includingoneormorethreadsthatmaybescheduledbytheoperatingsystemontheprocessor(s)itcontrols.Althoughaprocesshasitsownsetofschedulingattrib

c - 如何从 C 在 Linux 中使用 sched_getaffinity 和 sched_setaffinity?

我正在尝试:与处理器固定同时运行16个副本(每个内核2个副本)与处理器固定(每个内核2个副本)并发运行8个副本,并在某些功能说功能1完成后将处理器内核翻转到最远的内核。我面临的问题是如何选择最远的处理器。有friend建议用sched_getaffinity和sched_setaffinity,但我估计没找到什么好的例子。 最佳答案 要使用sched_setaffinity使当前进程在核心7上运行,您可以这样做:cpu_set_tmy_set;/*Defineyourcpu_setbitmask.*/CPU_ZERO(&my_set

Linux SCHED_OTHER、SCHED_FIFO 和 SCHED_RR - 区别

谁能解释一下SCHED_OTHER、SCHED_FIFO和SCHED_RR之间的区别?谢谢 最佳答案 SCHED_FIFO和SCHED_RR是所谓的“实时”策略。它们实现了POSIX标准指定的固定优先级实时调度。具有这些策略的任务会抢占所有其他任务,因此很容易陷入饥饿状态(如果它们不释放CPU)。SCHED_FIFO和SCHED_RR的区别在于,在具有相同优先级的任务中,SCHED_RR以一定的时间片进行循环;相反,SCHED_FIFO需要显式让出处理器的任务。SCHED_OTHER是常见的循环分时调度策略,它根据系统中运行的其他任