Guide for Xenomai build, setup and test on top of Ubuntu&Debian (Xenomai编译安装和测试指导) - intel/linux-stable-xenomai GitHub Wiki
目录
- 01 概述
- 02 环境配置
- 03 源代码下载
- 04 软件包构建
- 05 新内核安装
- 06 配置内核启动参数
- 07 测试工具安装
- 08 启动后配置
- 09 测试例运行
- 10 可能遇到的问题
- 11 深入阅读
- 12 支持
1. 概述
本文档讲述了如何基于Ubuntu 18.04/Debian 10 搭建一个xenomai测试环境, 您也可以选择等其他Linux发行版本进行实验。
Xenomai 3.x 官方的内核制作和安装文档请阅读这里: Setting_Up
这个wiki指导是官方文档的一个简化版, 重点针对 x86_64 uefi 硬件平台。
2. 环境配置
安装 Ubuntu Desktop 18.04 https://ubuntu.com/tutorials/tutorial-install-ubuntu-desktop
[可选]如果您的网络环境需要设置代理才能运行apt, 在Ubuntu 18.04上, 可以把代理的环境变量添加到/etc/environment
首先检查一下当前shell是否有有效的http_proxy, https_proxy等环境变量:
$env | grep -i proxy
http_proxy=http://xxx.abc.com:8080/
https_proxy=http://xxx.abc.com:8080/
no_proxy=localhost,127.0.0.1,
可以用如下命令直接添加相关环境变量到文件/etc/environment \
$sudo su
#printf "\n\nhttp_proxy=${http_proxy}\nhttps_proxy=${https_proxy}\nno_proxy=${no_proxy}\n\n" >> /etc/environment
安装相关工具集合,主要包括源代码下载工具,编译kernel所必须的工具和库。
sudo apt update
sudo apt install vim ssh
sudo apt install -y git build-essential libssl-dev libelf-dev iasl python nasm openssl gcc-multilib bison flex bc lz4
above package name should both work for Ubuntu 18.04 & Debian 10; Ubuntu 20.04 not tested yet.
Optional package may useful for developing but not required for kernel compile:
python python2.7 python3 python3-pip gawk wget diffstat curl unzip texinfo chrpath socat libsdl1.2-dev xterm cpio xz-utils iputils-ping whiptail
3. 源代码下载
从如下的github仓库获取完整的xenomai源代码。 https://github.com/intel/linux-stable-xenomai
mkdir workspace && cd workspace
git clone https://github.com/intel/linux-stable-xenomai
cd linux-stable-xenomai
git checkout F/4.19.59/base/ipipe/xenomai_3.1 ### use branch "RC/5.4.61/base/ipipe/xenomai_next" for kernel 5.4.x
4. 软件包构建
我们制作一个简单的bash脚本,简化了手工编译的过程:
bash build-deb.sh --help ### help
bash build-deb.sh ### build - without clean previous output
bash build-deb.sh --clean-build ### build - clean previous output before build
bash build-deb.sh --clean-all ### clean - clean previous output then exit
if meet such error when build your own version:
*** No rule to make target 'debian/certs/debian-uefi-certs.pem', needed by 'certs/x509_certificate_list'. Stop.
modify CONFIG_SYSTEM_TRUSTED_KEYS by:
sed -ri '/CONFIG_SYSTEM_TRUSTED_KEYS/s/=.+/=""/g' ${KBUILD_OUTPUT}/.config
如果编译成功,将在'../'目录下生成如下deb软件包。
5. 新内核安装
在目标板上安装新生成的内核软件包。
sudo dpkg -i linux-headers-4.19.59-xenomai+_3.1_amd64.deb
sudo dpkg -i linux-image-4.19.59-xenomai+_3.1_amd64.deb
内核的deb包会自动调用update-grub更新'/etc/default/grub'文件, 但是我们还需要手工更新kernel boot parameters.
6. 配置内核启动参数 (假设CPU是 4CORE4THREAD or 4CORE8THREAD, 把实时程序限定隔离在core 2和core 3)
sudo nano /etc/default/grub
- GRUB_CMDLINE_LINUX值更新为"nosmt noefi intel_idle.max_cstate=1 pstate_driver=no_hwp clocksource=tsc tsc=reliable rcu_nocb_poll rcu_nocbs=2-3 nohz_full=2-3 nmi_watchdog=0 nosoftlockup nosmap audit=0 irqaffinity=0,1 isolcpus=2-3 console=tty1 console=ttyS0,115200"
- 关闭 GRUB_TIMEOUT_STYLE选项
- GRUB_TIMEOUT值更为10,代表等待10秒钟
不要忘记运行update-grub配置更新,使新GRUB_CMDLINE_LINUX生效。
在本例中,core2,3将被配置为隔离态,保留给后续的时延测试程序专用。相应的在后续"run_latency.sh"的脚本内,'taskset'命令指定了时延测试程序运行于core2 或者core3.
sudo update-grub
启动时选择正确的内核版本。
reboot
进入系统以后,可以用dmesg | grep -i xenomai
检查一下当前内核是否包含Xenomai:
$ dmesg | grep -i xenomai
[ 0.000000] Linux version 4.19.59-xenomai+ (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #3.1 SMP PREEMPT
[ 1.047397] [Xenomai] scheduling class idle registered.
[ 1.047399] [Xenomai] scheduling class rt registered.
[ 1.047466] I-pipe: head domain Xenomai registered.
[ 1.048794] [Xenomai] allowing access to group 1234
[ 1.048821] [Xenomai] Cobalt v3.1 [DEBUG]
*** RTnet for Xenomai v3.1 ***
7. 测试工具安装 (on kernel 4.19.x)
从xenomai.org下载'xenomai-3.1.tar.bz2'软件压缩包,完成配置、编译及程序安装过程。时延测试程序'latency'将被安装在'/opt/xenomai-3.1/bin'子目录中。
在kernel 5.4.x上, 不能使用xenomai-3.1版本, 请下载xenomai最新的master branch或者next branch.
wget https://xenomai.org/downloads/xenomai/stable/xenomai-3.1.tar.bz2
tar xvf xenomai-3.1.tar.bz2
cd xenomai-3.1
./configure --prefix=/opt/xenomai-3.1 --with-core=cobalt --enable-smp --enable-pshared
make -j4
sudo make install
sudo /opt/xenomai-3.1/bin/latency ### successfully run means installation good!
'glmark2' 被用于xenomai时延测试时的背景程序, 如果测试板可以联网,可直接使用'apt-get'完成安装。
sudo apt-get install glmark2
如果测试板无法联网,从以下链接可获取相应的deb软件包,完成手动安装。
libpng12-0_1.2.54-1ubuntu1_amd64.deb
glmark2-data_2014.03+git20150611.fa71af2d-0ubuntu2_all.deb
glmark2_2014.03+git20150611.fa71af2d-0ubuntu2_amd64.deb
msr-tools_1.3-2build1_amd64.deb
sudo dpkg -i libpng12-0_1.2.54-1ubuntu1_amd64.deb
sudo dpkg -i glmark2-data_2014.03+git20150611.fa71af2d-0ubuntu2_all.deb
sudo dpkg -i glmark2_2014.03+git20150611.fa71af2d-0ubuntu2_amd64.deb
sudo dpkg -i msr-tools_1.3-2build1_amd64.deb
8. 启动后配置
系统启动后, 也必须对系统状态做一些配置. 总的指导原则是关闭所有的休眠和省电相关选项, 让CPU,Memory,内部总线和其他组件以固定频率运行; 关闭所有可能产生高延迟的设置。同时要注意单板散热,不能关闭Thermal监控。如果散热不佳,应降低CPU频率运行.
In intel_idle driver, lock CPU C-State, and set governor to "performance":
### if not print "intel_idle", remove "poll=idle" in kernel boot parameters
cat /sys/devices/system/cpu/cpuidle/current_driver
### should only have state0 and 1 after apply "intel_idle.max_cstate=1"
echo 1 > /sys/devices/system/cpu/cpu0/cpuidle/state1/disable
echo 1 > /sys/devices/system/cpu/cpu1/cpuidle/state1/disable
echo 1 > /sys/devices/system/cpu/cpu2/cpuidle/state1/disable
echo 1 > /sys/devices/system/cpu/cpu3/cpuidle/state1/disable
### disable turbo freq
echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo
### set governor
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo performance > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
echo performance > /sys/devices/system/cpu/cpu2/cpufreq/scaling_governor
echo performance > /sys/devices/system/cpu/cpu3/cpufreq/scaling_governor
Lock CPU, GPU freq and disable SAGV (SAGV's formal name is System Agent Speedstep):
### adjust and lock CPU freq (to do)
### /sys/devices/system/cpu/cpu${i}/cpufreq/scaling_min_freq
### /sys/devices/system/cpu/cpu${i}/cpufreq/scaling_max_freq
### adjust and lock GPU freq
echo 700 > /sys/devices/pci0000:00/0000:00:02.0/drm/card0/gt_boost_freq_mhz
echo 700 > /sys/devices/pci0000\:00/0000\:00\:02.0/drm/card0/gt_max_freq_mhz
echo 700 > /sys/devices/pci0000\:00/0000\:00\:02.0/drm/card0/gt_min_freq_mhz
### disable SAGV at runtime
echo 1 > /sys/kernel/debug/dri/0/i915_sagv_disable
9. 测试例运行
下载以下运行脚本至目标板:
run_latency.sh:
#!/bin/bash
cpu="2"
cycle="250"
xenomai_dir="/opt/xenomai-3.1"
time_total="345600"
####################################################################
taskset -c $cpu $xenomai_dir/bin/latency -g ./latency.histo.log -s -p $cycle -c $cpu -P 99 -T $time_total 2>&1 | tee ./latency.log
run_glmark2.sh:
#!/bin/bash
amount="8"
##################################
i="0"
while [ $i -lt $amount ]
do
glmark2 --run-forever &
i=$[$i+1]
done
使用'chmod +x'命令为这些脚本文件添加可执行属性。在运行脚本前运行'uname -a'确认内核版本。
新打开一个terminal窗口, 执行 ./run_glmark2.sh
新打开一个terminal窗口, 执行 sudo ./run_latency.sh
最后一列, "lat worst" 是最重要的实时性测试指标,单位是微秒。
To avoid negative value for minimum latency, set xenomai “gravity” to 0,
$echo 0 > /proc/xenomai/clock/coreclk
, or write your own value to the calibration file,
$echo ${value_in_ns} > /proc/xenomai/latency
10. 可能遇到的问题
Note: if "latency" program failed to run under root, please close group rt schedule policy use:
sudo sysctl -w kernel.sched_rt_runtime_us=-1
11. 深入阅读
resource-director-technology
cache-allocation-technology (CAT)
intel-cmt-cat
12. 支持
如果有任何问题, 请提交issue, 或者发邮件至Xenomai邮件列表: [email protected], 谢谢!