谢谢您的订阅!
当新的内容发布后您将开始接收邮件。您也可以点击邮件内的链接随时取消订阅。关闭Close

使用实时内核实现边缘云中延迟最小化

by Canonical on 28 November 2023

从电信应用到边缘云和工业数字孪生,在云技术中试验实时功能已成为行业趋势。边缘应用程序在与实时系统交互时通常有一个额外的要求:它们需要确切地运行。这意味着它们在系统内的执行和交互都有时间限制。

Canonical 推出的 MicroCloud 是一种小型云部署平台,托管可扩展和高可用性的应用程序,在更接近数据源的位置提供计算、安全网络和弹性存储等功能。它们特别适用于需要在所需地方附近提供工作负载的用例,例如边缘云部署。在 Ubuntu 实时内核功能的加持下,MicroCloud 是一个适用于具有严格低延迟要求的边缘应用程序的绝佳解决方案。

本篇文章将介绍如何在 MicroCloud 主机中启用实时内核。文中还将涵盖我们的实时测试,比较利用 Ubuntu 实时和通用内核的虚拟化和容器化应用程序的性能。

部署 MicroCloud

如果您对 MicroCloud 尚不熟悉,入门很容易。您只需安装必要的组件:

sudo snap install lxd microcloud microceph microovn

并且按照所述初始化流程操作。

启用实时节点

启动 MicroCloud 之后,其看起来如下:

ubuntu@ob76-node0:~$ lxc cluster listubuntu@ob76-node0:~$ lxc cluster list
      NAME          |            URL            |      ROLES       | ARCHITECTURE | FAILURE DOMAIN | DESCRIPTION | STATE  |      MESSAGE      |
+-----------------------+---------------------------+------------------+--------------+----------------+-------------+--------+-------------------+
| ob76-node2.microcloud | https://172.27.77.19:8443 | database-leader  | x86_64       | default        |             | ONLINE | Fully operational |
|                       |                           | database         |              |                |             |        |                   |
+-----------------------+---------------------------+------------------+--------------+----------------+-------------+--------+-------------------+
| ob76-node3.microcloud | https://172.27.77.12:8443 | database-standby | x86_64       | default        |             | ONLINE | Fully operational |
+-----------------------+---------------------------+------------------+--------------+----------------+-------------+--------+-------------------+
| ob76-node5.microcloud | https://172.27.77.20:8443 | database         | x86_64       | default        |             | ONLINE | Fully operational |
+-----------------------+---------------------------+------------------+--------------+----------------+-------------+--------+-------------------+
| ob76-node6.microcloud | https://172.27.77.11:8443 | database         | x86_64       | default        |             | ONLINE | Fully operational

您可以将 Ubuntu Pro 订阅附加到主机并启用实时内核功能。在本篇文章中,我们将启用其中一个节点作为实时节点:

ubuntu@ob76-node6:~$ sudo pro attach <your_pro_token>
ubuntu@ob76-node6:~$ sudo pro enable realtime-kernel

然后,编辑 /etc/default/grub 中以 “GRUB_CMDLINE_LINUX_DEFAULT” 开头的行并添加以下参数组,以对实时主机进行调整:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash skew_tick=1 isolcpus=managed_irq,domain,2-3 intel_pstate=disable nosoftlockup tsc=nowatchdog nohz=on nohz_full=2-3 rcu_nocbs=2-3"

最后,使用 sudo update-grub 更新 grub 命令行。此时,需要重新启动以将更改应用到内核并进行验证:

ubuntu@ob76-node6:~$ uname -a 
Linux ob76-node6 5.15.0-1034-realtime #37-Ubuntu SMP PREEMPT_RT Wed Mar 1 20:50:08 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@ob76-node6:~$ cat /proc/cmdline 
BOOT_IMAGE=/boot/vmlinuz-5.15.0-1034-realtime root=UUID=449c88ff-8e2e-470e-9f04-4f758114573f ro quiet splash skew_tick=1 isolcpus=managed_irq,domain,2-3 intel_pstate=disable nosoftlockup tsc=nowatchdog nohz=on nohz_full=2-3 rcu_nocbs=2-3 vt.handoff=7

启动实时系统容器

使用系统容器时,由于客机共享主机内核和操作系统,因此容器内无需额外配置。您可以启动一个系统容器并将其固定到一个或多个单独的内核上,然后开始运行实时应用程序。

ubuntu@ob76-node0:~$ lxc launch ubuntu:22.04 c-rt -c limits.cpu=2 -c security.privileged=true \
-c limits.kernel.rtprio=99 --target ob76-node6.microcloud

启动实时虚拟机

使用虚拟机时,则可以将主机的相同 Ubuntu Pro 订阅附加到客机,并在虚拟机中启用实时内核:

ubuntu@ob76-node0:~$ lxc launch ubuntu:22.04 vm-rt --vm -c limits.cpu=2 \
-c limits.kernel.rtprio=99 --target ob76-node6.microcloud
ubuntu@ob76-node0:~$ lxc exec vm-rt -- pro attach <your_pro_token> 
ubuntu@ob76-node0:~$ lxc exec vm-rt -- pro enable realtime-kernel

再次编辑 /etc/default/grub 并修改以 “GRUB_CMDLINE_LINUX_DEFAULT” 开头的行:

GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash skew_tick=1 isolcpus=managed_irq,domain,0 intel_pstate=disable nosoftlockup tsc=nowatchdog nohz=on nohz_full=0 rcu_nocbs=0″

使用 sudo update-grub 更新 grub 命令行,并重新启动虚拟机。

测试和结果

我们使用实时测试套件中的中的循环测试来测量系统容器和虚拟机内部延迟作为工作负载。在这些实例中,我们模拟了主机上的负载作为最坏情况延迟测试场景,以在压力环境下获得准确结果。

使用 backbench 在被测主机节点上产生较大的 CPU 负载:

ubuntu@ob76-node6:~$ sudo apt update -y && sudo apt install rt-tests -y
ubuntu@ob76-node6
:~$ while true; do /bin/dd if=/dev/zero of=bigfile bs=1024000 count=1024; done & \
while true; do /usr/bin/killall hackbench; sleep 5; done & \
while true; do hackbench 20; done
搭载通用内核的节点中的 hackbench

测试实例

获取实时虚拟机的控制台并安装实时测试套件:

ubuntu@ob76-node0:~$ lxc exec vm-rt -- /bin/bashroot@vm-rt:~# apt update -y && apt install rt-tests -y

最后,运行一个循环测试:

root@vm-rt:~# cyclictest -t1 -p 99 -i 1000 -l 1000000000000 -m -a0 -c1 -h 15000 > \ 
rt-test.output

在实时容器中也可以这样做:

ubuntu@ob76-node0:~$ lxc exec c-rt -- /bin/bashroot@c-rt:~# apt update -y && apt install rt-tests -y
root@c-rt:~# cyclictest -t1 -p 99 -i 1000 -l 1000000000000 -m -a0 -c1 -h 15000 > \ 
rt-test.output

性能比较

我们在基于 Intel(R) Nucs 构建的 MicroCloud 中进行了测试。

处理器Intel(R) Core(TM) i5-5300U CPU @ 2.30GHz
操作系统Ubuntu 22.04.2 Jammy
通用 (gen) 内核Linux 5.15.0-69-generic #76-Ubuntu SMP
实时 (rt) 内核Linux 5.15.0-1034-realtime #37-Ubuntu SMP PREEMT_RT

下表所示为使用 hackbench 模拟的压力条件下,通用和实时环境中系统容器和虚拟机之间的预期延迟:

内核实例类型最小延迟平均延迟最大延迟
(最坏情况)
主机搭载通用内核裸机3 μs12 μs1496 μs
主机搭载通用内核容器3 μs20 μs2118 μs
主机搭载通用内核 – 客机搭载通用内核虚拟机4 μs105 μs13579 μs
主机搭载实时内核裸机3 μs4 μs17 μs
主机搭载实时内核容器3 μs7 μs21 μs
主机搭载实时内核 – 客机搭载通用内核虚拟机4 μs15 μs4472 μs
主机搭载实时内核 – 客机搭载实时内核虚拟机4  μs13 μs2282 μs

总结

云技术中的实时应用听起来有点矛盾,但当 Canonical MicroCloud 满足 Ubuntu 的实时内核特性时,就有可能在虚拟工作负载条件下实现确切的性能。

换言之,即使底层主机处于压力条件下,这样也可以让相关的云达到其延迟要求,这使得其成为适用于具有严格延迟要求的边缘部署的有效解决方案。

MicroCloud 提供两种托管工作负载的选择,即系统容器和虚拟机,二者根据用例提供不同的优势。使用实时应用程序的情况下,启用实时功能的系统容器表现出最小的平均延迟和最小的最大延迟,这使得其成为适合您工作负载的推荐之选。不过,运行特权容器时需要谨慎考虑。其需要考虑额外的安全注意事项,比如确保运行的是可信的工作负载,或者容器中没有不可信的任务作为根运行。

正如基准测试所示,与实时内核相结合的 MicroCloud,可以利用行业中具有实时约束的且部署了行业在云技术中寻求的所有基本功能的关键型应用程序。

如果您想了解更多关于边缘云环境中 MicroCloud 的信息,可以先阅读本白皮书

如果您对实时内核感兴趣,可以阅读 “什么是实时 Linux?” 或观看介绍实时 Linux 的网络研讨会


订阅博客文章

订阅您感兴趣的主题

在提交此表格的同时,我确认已阅读和同意的隐私声明隐私政策。

查看更多内容

基于 MicroK8s 和 Ubuntu 实时内核支持的 Intel FlexRAN 组件自动扩展

RAN 随着每一代移动通信技术的发展而不断演变,从而在用户设备和核心网络之间实现更快的数据传输。内部互连设备数量的增多使得数据量比以往任何时候都要多。至于现有的网络架构,其挑战在于处理不断增加的工作负载,以及更快地处理、分析和传输数据的能力。而对于 5G 生态系统,则需要实现 RAN 的虚拟化。第五代移动网络需要具备更大的灵活性以适应需求,具备可扩展性以满足运行时的网络条件,以及需要自动化以进行远程管理,而这些只能通过虚拟 RAN 来实现。  Intel FlexRAN 解决了传统 RAN 架构所面临的挑战。它能够从核心网络功能中将底层硬件抽象化,以实现最佳的资源利用。FlexRAN 是 O-RAN (OpenRAN) 的改进和参考实现,具有在不同供应商设备之间进行互操作 […]

Canonical 发布 MicroCloud:人人触手可及的低接触私有云

Canonical 正式发布 MicroCloud — 一款低接触开源云解决方案。MicroCloud 是 Canonical 不断增长的云基础架构产品组合中的一员,专为所有类型企业的可扩展集群和边缘部署而构建。其设计集简单性、安全性和自动化于一身,最大限度地减少了其部署和维护的时间与精力。MicroCloud 还作为 Canonical Ubuntu Pro 订阅服务的一部分,提供企业支持,有多个支持层级可供选择,并且按节点定价,非常方便。  使用单个命令即可完成云部署 优化的 MicroCloud 可实现可重复的可靠远程部署。单个命令即可启动各种组件的编排和集群,且用户的参与度非常低,数分钟内即可部署形成一个功能齐全的云。这种简化的部署过程大大降低了进入门槛,使得人人 […]

在搭载实时内核的汽车中进行快速 SDV 定型

如何在云端使用实时计算为软件定义汽车定型 汽车软件开发人员想要在目标硬件上试用他们的软件时,经常会遇到挑战。由于多个团队必须共享有限的硬件资源和原型试验台,而这样会导致问题发生。微芯片短缺也进一步加大了获取硬件试验台进行软件测试和调试的难度。 得益于云计算技术的进步,很多开发工作可以通过访问最先进的性能和协作选项远程完成。在基于云的开发中,工程师可以使用明显高于嵌入式系统功能的高性能功能,因此,结果和效果并不能反映目标系统在实际条件下的表现。 在大多数情况下,与目标硬件相比,结果并不具有代表性,原因要么是车辆接口饱和,要么是内存管理存在差异。因此,基于云的开发的挑战在于考虑目标系统的约束条件。 环境奇偶校验法可以通过尽可能多地模拟目标硬件解决这个问题。 什么是环境奇偶校验 […]