1. 程式人生 > >isolcpus在樹莓派3上的使用

isolcpus在樹莓派3上的使用

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。