You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux 4.16内核下能否同时使用SCHED_DEADLINE与设置CPU亲和性?

在Linux 4.16中同时启用SCHED_DEADLINE与CPU亲和性的可行性

答案是完全可以的,Linux 4.16内核对SCHED_DEADLINE调度策略和CPU亲和性的组合支持没有问题。SCHED_DEADLINE基于EDF(最早截止时间优先)算法,调度器会严格遵守你设置的CPU亲和性约束,只会将任务调度到你指定的CPU核心上。

你的测试代码补充与完整示例

你提供的代码片段还没完成SCHED_DEADLINE参数的设置,我帮你补全并加上CPU亲和性的设置逻辑:

#define _GNU_SOURCE
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <sched.h>
#include <unistd.h>
#include <sys/syscall.h>
#include <stdlib.h>

#define gettid() syscall(SYS_gettid)

int main() {
    struct sched_attr attr;
    cpu_set_t cpuset;
    int ret;
    long int tid = gettid();
    printf("deadline thread started [%ld]\n", tid);

    // 第一步:设置CPU亲和性,比如绑定到CPU 0和CPU 1
    CPU_ZERO(&cpuset);
    CPU_SET(0, &cpuset);
    CPU_SET(1, &cpuset);
    ret = sched_setaffinity(tid, sizeof(cpu_set_t), &cpuset);
    if (ret != 0) {
        perror("sched_setaffinity failed");
        exit(EXIT_FAILURE);
    }
    printf("Successfully set CPU affinity to cores 0 and 1\n");

    // 第二步:配置SCHED_DEADLINE参数
    attr.size = sizeof(attr);
    attr.sched_policy = SCHED_DEADLINE;
    attr.sched_flags = 0;
    // 设置runtime、deadline、period(单位为纳秒)
    // 示例:runtime=1ms,deadline=2ms,period=5ms
    attr.sched_runtime = 1000000;
    attr.sched_deadline = 2000000;
    attr.sched_period = 5000000;

    ret = sched_setattr(tid, &attr, 0);
    if (ret != 0) {
        perror("sched_setattr failed");
        exit(EXIT_FAILURE);
    }
    printf("Successfully set SCHED_DEADLINE scheduling policy\n");

    // 这里可以添加你的任务逻辑
    while (1) {
        // 模拟实时任务处理
        usleep(500);
    }

    return 0;
}

关键说明

  • 顺序方面:你可以先设置CPU亲和性再设置调度策略,也可以反过来,两种顺序在Linux 4.16中都能正常工作。不过先设置亲和性可以让调度器一开始就知道任务的CPU约束,逻辑上更合理。
  • 权限要求:设置SCHED_DEADLINE需要进程拥有CAP_SYS_NICE权限,所以运行时需要用sudo或者给程序添加相应的能力。
  • 资源限制:SCHED_DEADLINE的runtime、deadline、period需要满足runtime <= deadline <= period,否则sched_setattr会返回错误。

内容的提问来源于stack exchange,提问作者Pringles

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:54:35