设置 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 现在将只执行您的进程,不执行任何其他操作。
我正在基于 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 现在将只执行您的进程,不执行任何其他操作。