设置 CPU 亲和力并阻止后台任务的 CPU 使用

Setting CPU Affinity and blocking CPU usage for background task

我正在基于 Arm 的系统上使用 openmp 编写一个应用程序。其中我有 4 个高性能内核 (Arm Cortex A57) 和 4 个低性能内核 (Arm Cortex A53)。

环境:Poky(Yocto 项目参考发行版)2.4.3

#pragma omp parallel sections num_threads(3)
    {
#pragma omp section
        {
            cpu_set_t cpu_mask;
            CPU_ZERO(&cpu_mask);
            CPU_SET(4, &cpu_mask);
            sched_setaffinity((pid_t) 0, sizeof(cpu_mask), &cpu_mask);
            while (true) {
                // Capturing Image Here
            }
        }
#pragma omp section
        {
#pragma omp parallel num_threads(4)
            {
                cpu_set_t cpu_mask;
                CPU_ZERO(&cpu_mask);
                CPU_SET(omp_get_thread_num(), &cpu_mask);
                sched_setaffinity((pid_t) 0, sizeof(cpu_mask), &cpu_mask);
                while (true) {
                    // Processing Captured Image
                }
            }
        }

在上面的代码中,第 1 部分用于从 V4L2 捕获视频帧并填充到映射到低端内核的缓冲区 CPU4,在第 2 部分中跨越 4 个线程并映射到高端内核( 0-3) 分别.

当我 运行 应用程序时,提供适当的性能,直到任何高端核心被后台任务或内核操作使用。 有什么方法可以阻止其他任务使用 CPU 0-3?

如果我分析的方式有误,请随时指正。

为进程设置关联意味着,只有该进程可以 运行 在特定的 CPU 上。但是,内核调度程序仍在使用 CPU 并且内核可以为它调度其他进程。 一种选择是使用 isolcpus 内核命令行选项,例如 isolcpus=0-3。现在,内核将不会使用 0-3 cpus,将进程关联设置为 0-3 cpus 现在将只执行您的进程,不执行任何其他操作。