linux内核参数isolcpus的作用是隔离一定数量的CPU,使其独立于内核的平衡调度算法,也就是内核本身不会将进程分配到被隔离的CPU上运行。之后用户可将指定的进程绑定到被隔离的CPU上运行,让进程独占CPU,使其实时性得到一定程度的提高。

一、参数isolcpus的说明

在linux内核源码linux-4.2.1\Documentation\kernel-parameters.txt中关于isolcpus的作用和使用说明如下:

	isolcpus=	[KNL,SMP] Isolate CPUs from the general scheduler.
			Format:
			<cpu number>,...,<cpu number>
			or
			<cpu number>-<cpu number>
			(must be a positive range in ascending order)
			or a mixture
			<cpu number>,...,<cpu number>-<cpu number>

			This option can be used to specify one or more CPUs
			to isolate from the general SMP balancing and scheduling
			algorithms. You can move a process onto or off an
			"isolated" CPU via the CPU affinity syscalls or cpuset.
			<cpu number> begins at 0 and the maximum value is
			"number of CPUs in system - 1".

二、使用isolcpus隔离cpu

树莓派3B使用的芯片为BCM2837,包含4个ARM Cortex-A53 CPU,在Raspbian操作系统boot\cmdline.txt文件的末尾添加isolcpus=3,隔离第4个cpu:
在这里插入图片描述

三、使用cyclictest进行测试

使用cyclictest工具分别对树莓派3B的4个CPU进行实时性行测试。
下载和安装cyclictest:
#git clone git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git
#cd rt-tests
#git checkout testing
#make NUMA=0

在cpu0上运行cyclictest:

#./cyclictest -t1 -p 80 -n -i 1000 -a 0

在cpu1上运行cyclictest:

#./cyclictest -t1 -p 80 -n -i 1000 -a 1

在cpu2上运行cyclictest:

#./cyclictest -t1 -p 80 -n -i 1000 -a 2

在cpu3上运行cyclictest:

#./cyclictest -t1 -p 80 -n -i 1000 -a 3

其中的参数-a 0表示绑定cyclictest到cpu0上运行,类似的-a 1, -a 2 - a3分别表示绑定到cpu1,cpu2,cpu3上运行。
测试结果如下:
在这里插入图片描述

从上图可以看出,被隔离的CPU3最大延迟为99us,而没有隔离的CPU0、CPU1和CPU2最大延迟明显偏大。

使用ps命令查看各CPU上的进程个数:
在这里插入图片描述
从上图可以看出,CPU0有63个进程,CPU1有98个进程,CPU2有88个进程,而被隔离的CPU3上只有8个进程。
进一步查看CPU3上具体有哪些进程:
在这里插入图片描述
可以看出,CPU3上只有少数守护进程和测试程序cyclictest。

Logo

更多推荐