12. 调度 Scheduler

Scheduler 调度 CRoutine(Reader 回调、Component Proc、Timer 等)。支持 classicchoreography

本文 §12

相关文档

任务调度

§0 指南 · §10 组件 Component · §3 通道 Channel · §1.6 环境变量


12.1 调度流程

Component::Initialize 末尾向 Scheduler 注册任务;任务名与 choreography 配置中 tasks[].name 对应。

调度 收包 → CRoutine → Dispatch → 工作线程 classic 线程池按 group/prio;choreography 绑核见 [§12.3](#123-classic)–[§12.4](#124-choreography)
收包
pending_queue
CRoutine DataVisitor 齐备
Dispatch
回调 / Proc
classic choreography AUTOLINK_SCHED_CONF


12.3 classic

线程池按 group 划分,任务按名称落入 group,组内按 prio 优先级调度:

scheduler_conf {
    policy: "classic"
    process_level_cpuset: "0-7,16-23"
    threads: [
        { name: "async_log", cpuset: "1", policy: "SCHED_OTHER", prio: 0 }
        { name: "shm",       cpuset: "2", policy: "SCHED_FIFO", prio: 10 }
    ]
    classic_conf {
        groups: [
            {
                name: "group1"
                processor_num: 16
                affinity: "range"
                cpuset: "0-7,16-23"
                processor_policy: "SCHED_OTHER"
                tasks: [{ name: "E", prio: 0 }]
            },
            {
                name: "group2"
                processor_num: 16
                affinity: "1to1"
                cpuset: "8-15,24-31"
                tasks: [
                    { name: "A", prio: 0 }
                    { name: "B", prio: 1 }
                    { name: "C", prio: 2 }
                    { name: "D", prio: 3 }
                ]
            }
        ]
    }
}

字段

含义

processor_num

组内工作线程数

affinity

range / 1to1 CPU 亲和

cpuset

可用 CPU 核列表

tasks[].name

与内部任务名匹配

tasks[].prio

组内优先级,数值越大越优先

适合通用负载;可为 async_logshm 等基础设施线程单独绑核(见 §8 日志 Log)。


12.4 choreography

关键任务指定 processor 编号(专用线程),其余任务进入 pool

scheduler_conf {
    policy: "choreography"
    choreography_conf {
        choreography_processor_num: 8
        choreography_cpuset: "0-7"
        choreography_processor_policy: "SCHED_FIFO"
        choreography_processor_prio: 10

        pool_processor_num: 8
        pool_cpuset: "16-23"
        pool_processor_policy: "SCHED_OTHER"

        tasks: [
            { name: "A", processor: 0, prio: 1 }
            { name: "B", processor: 0, prio: 2 }
            { name: "C", processor: 1, prio: 1 }
            { name: "E" }
        ]
    }
}

未指定 processor 的任务(如 E)落入 pool。

感知 / 控制等 延迟敏感链路 应将任务名绑定到专用 processor,减少与日志、通用逻辑的核争抢。


12.5 联调要点

  1. 控制环Channel pending_queue_size=1,只处理最新帧。

  2. Proc 非阻塞:I/O、重计算移出 Scheduler 线程。

  3. 绑核:control 场景用 control_sched_choreography.conf

  4. TimerComponentinterval 短于 Proc 耗时会导致任务堆积,需缩短 Proc 或增大间隔。


12.6 任务命名

内部任务名通常来自 Component 配置 config.name 或 channel 相关工厂。修改 choreography 前,用日志或 autolink_monitor 确认实际任务名,再写入 tasks[].name


导航← §11 时间 Time / Rate / Timer · §0 指南 · §13 综述 Survey →