一. 准备工作
本文主要以使用xenomai3的dovetail作为样例,并且运行x86平台上,所以需要准备如下工作:
- 一台安装ubuntu20.04的x86工控机
- linux-dovetail-v5.15.y-dovetail
- xenomai-3.2
二. 配置内核
1. 进入到xenomai-3.2,在控制台中执行:
./scripts/bootstrap
./scripts/prepare-kernel.sh --arch=x86_64 --linux=<linux-dovetail-v5.15.y-dovetail的路径>
2. 进入到linux-dovetail-v5.15.y-dovetail文件夹,在控制台执行:
cp /boot/config-$(uname -r) .config
make menuconfig
找到下面的选项,并执行相应的操作:
* General setup --> Local version - append to kernel release: -xenomai(起个区分内核的名字) --> Timers subsystem ---> High Resolution Timer Support [*](默认) * Pocessor type and features --> Linux guest support(如果使用ipipe补丁,则必须关闭) --> Processor family ---> Core 2/newer Xeon (if “cat /proc/cpuinfo | grep family” returns 6, otherwise set as Generic otherwise) --> Multi-core scheduler support [](关闭) --> Enable Maximum number of SMP Processors and NUMA Nodes [](可选) * Xenomai/cobalt --> Sizes and static limits ---> Number of registry slots (512 --> 4096) ---> Size of system heap (Kb) (4096 --> 4096) ---> Size of private heap (Kb) (256 --> 256) ---> Size of shared heap (Kb) (256 --> 256) ---> Maximum number of POSIX timers per process (256 --> 512) --> Drivers ---> Real-time IPC drivers [*] (双击空格选定为*)(可选) ---> RTIPC protocol family <M>(默认) ---> XDDP cross-domain datagram protocol [*](默认) ---> IDDP intra-domain datagram protocol [*](默认) ---> Number of IDDP communication ports (32) (默认) ---> Buffer protocol [*](默认) ---> Number of BUFP communication ports (32) (默认) ---> RTnet ---> RTnet, TCP/IP socket interface (Enable) ----> Drivers -----> New intel(R) PRO/1000 PCIe(Gigabit) [M](模块) -----> Realtek 8169(Gigabit) [M](模块) -----> Loopback [M](默认) ----> Add-Ons -----> Real-Time Capturing Support [M](模块) * Power management and ACPI options --> CPU Frequency scaling ---> CPU Frequency scaling [](关闭) --> ACPI (Advanced Configuration and Power Interface) Support ---> Processor [](关闭) --> CPU Idle ---> CPU idle PM support [](关闭) * Memory Management Options ---> Transparent Hugepage Support [](关闭) ---> Allow for memory compaction [](关闭) ---> Contiguous Memory Allocation [](关闭) ---> Page Migration [](关闭) * Device Drivers --> Unisys visorbus driver [](关闭)
除以上提到的配置外 , 下面这些选项配合内核参数也会对xenomai实时性进行增强:
- CONFIG_NO_HZ_FULL = y、CONFIG_RCU_NOCB_CPU=y、RCU_KTHREAD_PRIO=0
- CONFIG_MIGRATION=n、CONFIG_MCORE2=y[x86]、CONFIG_PREEMPT=y、ACPI_PROCESSOR =n[x86]、CONFIG_CPU_FREQ =n、CONFIG_CPU_IDLE =n
如果要安装IGH,建议同时关闭下面三个选项:
Power management and ACPI options
--> Suspend to RAM and standby [] (建议关闭)
--> Hibernation (aka 'suspend to disk') [] (建议关闭)
--> Device power management core functionality [] (建议关闭)
【注意】由于这几个选项会影响IGH网卡驱动的PM(电源管理),当系统自动挂起或者用户主动挂起系统时可能会导致IGH网卡驱动出问题甚至系统崩溃。
三. 编译安装
3.1 编译内核
sudo make -j4 bzImage
sudo make modules
3.2 安装模块
sudo make INSTALL_MOD_STRIP=1 modules_install
3.3 安装内核
sudo cp arch/x86_64/boot/bzImage /boot/vmlinuz-5.15.151-xenomai
sudo cp .config /boot/config-5.15.151-xenomai
sudo cp System.map /boot/System.map-5.15.151-xenomai
cd /lib/modules/5.15.151-xenomai
sudo update-initramfs -c -k 5.15.151-xenomai
3.4 配置grub
sudo vim /etc/default/grub
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.15.151-xenomai"
GRUB_TIMEOUT=5
sudo update-grub
3.5 编译遇到的问题
1. canonical-certs.pem
- 问题描述
make[1]: *** No rule to make target 'debian/canonical-certs.pem', needed by 'certs/x509_certificate_list'. Stop.
make: *** [Makefile:1868: certs] Error 2
- 解决问题
vim .config
从.config文件找到如下两行:
- CONFIG_SYSTEM_TRUSTED_KEYS="debian/canonical-certs.pem"
CONFIG_SYSTEM_REVOCATION_KEYS="debian/canonical-revoked-certs.pem"
并将其修改成:
- CONFIG_SYSTEM_TRUSTED_KEYS=""
- CONFIG_SYSTEM_REVOCATION_KEYS=""
四. 增强实时性
4.1 优化内核参数
sudo vim /etc/default/grub
修改GRUB_CMDLINE_LINUX:
GRUB_CMDLINE_LINUX="audit=0 isolcpus=0 xenomai.supported_cpus=0x01 nohz_full=0 rcu_nocbs=0 irqaffinity=1,2,3 rcu_nocb_poll=1024 rcupdate.rcu_cpu_stall_suppress=1 acpi_irq_nobalance numa_balancing=disable cpufreq.off=1 nosmap nosmt nohalt noirqbalance hugepages=1024 i915.enable_rc6=0 i915.enable_dc=0 i915.disable_power_well=0 i915.enable_execlists=0 nmi_watchdog=0 nosoftlockup processor.max_cstate=0 intel.max_cstate=0 processor_idle.max_cstate=0 intel_idle.max_cstate=0 clocksource=tsc tsc=reliable nmi_watchdog=0 nosoftlockup intel_pstate=disable idle=poll mce=ignore_ce hpet=disable clocksource=tsc tsc=reliable nohz=off"
还有一些其他的内核参数也可以加上:
- xenomai.smi_mask=1 xenomai.smi=detect
4.2 优化BIOS
BISO选项 | 设置 | 选项作用 |
---|---|---|
Boot performance mode | Max Non-turbo Performance | 可以使CPU运行在固定的始终频率下面,从而提供更稳定、更可预测的结果 |
Intel SpeedStep | disable | 是一个动态电源管理技术,也是一种节能技术,在禁用的情况下,CPU会按照最高频率和电压运行,避免CPU降频对实时性的影响 |
Intel Speed Shift Technology | disable | 是一种动态调整CPU频率和电压的技术,目的是提供更快的响应时间和更高的性能效率,可以根据负载的变化动态调整CPU频率和电压,对于实时性来说,开启后会引入更多不确定性 |
C-States | disable | CPU节能技术,运行在CPU空闲或者低负载的情况下,降低功耗 |
Gfs RC6 | disable | 一种Intel的节能技术,可以降低图形核心的电源消耗,从而减少整个系统的功耗。如果在实时性操作中需要使用到图形,可以将这个功能禁用 |
GPU Frequency | 300MHZ | 是图形处理器的工作频率,在实时操作系统中,这个频率过高会影响系统响应时间的不确定性和抖动。 |
Intel VMX | disable | 虚拟化技术,对于实时系统来说关闭虚拟化配置可以避免资源抢占,从而优化实时系统的性能 |
VT-d | disable | 虚拟化技术,对于实时系统来说关闭虚拟化配置可以避免资源抢占,从而优化实时系统的性能 |
PCI Express Clock Gating | disable | 关闭PCIe的时钟,降低系统开销 |
DMI Link ASPM Control | disable | 控制计算机主板上DMI电源的管理技术,达到节能降温效果 |
SATA Aggressive LPM Support | disable | 一种SATA硬件设备电源管理技术,通过降低设备在空闲时的电源消耗,达到节能和降温的效果。为了保证SATA技术在实时任务中的活跃状态,我们将其关闭 |
ACPI Sleep State | Suspend Disabled | 一种电源管理技术,用于控制计算机在空闲时进入休眠状态,以节约电源和延长硬件寿命 |
Native ASPM | disable | 也是一种电源管理技术,这里也关闭,避免设备进入休眠状态 |
PCH Cross Throttling | disable | 用于控制系统中多个设备共享PCIe根节点时的分配分配,当多个设备同时向根节点发送数据的时候,PCH Cross Throttling可以通过降低每个设备的带宽,来保证整体带宽的均衡分配,避免任何一个设备的带宽占用过度。 |
SA GV | Fixed High | 在Intel处理器中将System Agent的电压固定在一个高水平上,SA控制Intel处理器中的处理器内存、控制器和IO,设置为Fixed High有助于提升内存处理器的性能和稳定性,避免低压对实时性产生的影响 |
DVMT pre-Allocated | 64M | 用于在启动时为显存预先分配一定的内存空间,以提升显卡的性能和稳定性,如果配置的过高,会导致系统内存资源不足,从而导致实时任务拿到的内存资源不足,影响实时任务 |
Enable Hibernation | disable | 关闭休眠模式 |
USB Legacy Support | disable | 关闭对旧USB系统的支持,如果实时任务中没有用到,则可以关闭来减少资源浪费 |
HD Audio | disable | 这是一个用于提供高质量的数字音频体验,如果实时任务中没有用到,则可以关闭减少带宽和处理器资源的浪费 |
ACPI D3Cold Support | disable | 是一种将整个系统进入一种低功耗状态的技术,降低能源消耗和设备寿命 |
Low Power S0 idle Capability | disable | 也是一种低功耗的技术,直接关闭 |
Page Close idle Timeout | disable | 是内核中用于节能的一种机制,当系统空闲时,关闭不使用的页面,从而节省能源并提高系统启动时的性能。这个机制需要定期扫描页面,关闭不使用的页面,所以会占用系统资源 |
五. 注意
Nvidia/Ati Drivers are NOT supported (creates a lot of interruptions that breaks the real-time constraints). Please consider removing the dedicated graphic card and use the integrated graphics (Intel HD graphics).