cpuset笔记

Kernel config

配置以下内核选项

CONFIG_NO_HZ_FULL=y
CONFIG_CPUSETS=y
CONFIG_TRACING=y

cmdline

配置引导参数,重启生效

//在/boot/cmdline.txt文件后加入下面的代码,隔离cpu3
nohz_full=3

init cpuset

在超级用户权限下

mkdir /sys/fs/cgroup/cpuset
mount -t cgroup -ocpuset cpuset /sys/fs/cgroup/cpuset

分配内核

CPU 0-2运行其他任务,CPU 3被隔离

cd /sys/fs/cgroup/cpuset
mkdir housekeeping
mkdir isolated
echo 0 > housekeeping/cpuset.mems
echo 3 > isolated/cpuset.cpus
echo 0 > isolated/cpuset.mems
echo 0 > cpuset.sched_load_balance 
echo 0 > isolated/cpuset.sched_load_balance
while read P
do
  echo $P > housekeeping/cgroup.procs
done < cgroup.procs

disable irq

#disableirq.sh
# Migrate irqs to CPU 0-2 (exclude CPU 3)
for I in $(ls /proc/irq)
do
    if [[ -d "/proc/irq/$I" ]]
    then
        echo "Affining vector $I to CPUs 0-2"
        echo 0-2 > /proc/irq/$I/smp_affinity_list
    fi
done

disable sched_rt_runtime_us

echo -1 > /proc/sys/kernel/sched_rt_runtime_us #disable
echo 950000 > /proc/sys/kernel/sched_rt_runtime_us #enable 默认值

example

如何使程序运行到被隔离的CPU

#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
int main(void)
{
    // Move the current task to the isolated cgroup (bind to CPU 3)
    
    int fd = open("/sys/fs/cgroup/cpuset/isolated/cgroup.procs", O_WRONLY);
    if (fd < 0) {
        perror("Can't open cpuset file...\n");
        return 0;
    }
    // 将写此文件的进程加入到isolated组内,即该进程被划分到CPU3执行
    write(fd, "0\n", 2);
    close(fd);
   
    // 其他操作
    while (1)
        ;
   
    return 0;
}

trace

trace on

#traceon.sh
TRACING=/sys/kernel/debug/tracing/    #配置路径
echo 0 > $TRACING/tracing_on   #关闭追踪
echo > $TRACING/trace   #清空之前的数据
echo 1 > $TRACING/events/sched/sched_switch/enable   #记录来自其他任务的干扰
echo 1 > /sys/kernel/debug/tracing/events/irq/enable   #记录中断的干扰
echo 1 > $TRACING/tracing_on   #开启追踪

trace off

echo 0 > $TRACING/tracing_on   #关闭追踪
cat $TRACING/per_cpu/cpu3/trace > trace.3 #获取只有cpu3的trace结果
cat $TRACING/trace  > tracedata.txt #获取所有CPU的trace结果
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值