使用实时内核实现边缘云中延迟最小化
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
测试实例
获取实时虚拟机的控制台并安装实时测试套件:
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 μs | 12 μs | 1496 μs |
主机搭载通用内核 | 容器 | 3 μs | 20 μs | 2118 μs |
主机搭载通用内核 – 客机搭载通用内核 | 虚拟机 | 4 μs | 105 μs | 13579 μs |
主机搭载实时内核 | 裸机 | 3 μs | 4 μs | 17 μs |
主机搭载实时内核 | 容器 | 3 μs | 7 μs | 21 μs |
主机搭载实时内核 – 客机搭载通用内核 | 虚拟机 | 4 μs | 15 μs | 4472 μs |
主机搭载实时内核 – 客机搭载实时内核 | 虚拟机 | 4 μs | 13 μs | 2282 μs |
总结
云技术中的实时应用听起来有点矛盾,但当 Canonical MicroCloud 满足 Ubuntu 的实时内核特性时,就有可能在虚拟工作负载条件下实现确切的性能。
换言之,即使底层主机处于压力条件下,这样也可以让相关的云达到其延迟要求,这使得其成为适用于具有严格延迟要求的边缘部署的有效解决方案。
MicroCloud 提供两种托管工作负载的选择,即系统容器和虚拟机,二者根据用例提供不同的优势。使用实时应用程序的情况下,启用实时功能的系统容器表现出最小的平均延迟和最小的最大延迟,这使得其成为适合您工作负载的推荐之选。不过,运行特权容器时需要谨慎考虑。其需要考虑额外的安全注意事项,比如确保运行的是可信的工作负载,或者容器中没有不可信的任务作为根运行。
正如基准测试所示,与实时内核相结合的 MicroCloud,可以利用行业中具有实时约束的且部署了行业在云技术中寻求的所有基本功能的关键型应用程序。
如果您想了解更多关于边缘云环境中 MicroCloud 的信息,可以先阅读本白皮书。
如果您对实时内核感兴趣,可以阅读 “什么是实时 Linux?” 或观看介绍实时 Linux 的网络研讨会。
订阅博客文章
查看更多内容
实时操作系统是否适合您的业务?
随着自动化几乎遍及社会的每个部门,从汽车和电信到工业制造,实时操作系统(OS)在各个行业都变得至关重要。实时操作系统(RTOS)可确保精确和确定的响应,满足对安全性和性能至关重要的严格的时间要求。但究竟是 Zephyr 或 FreeRTOS 等传统的 RTOS 才是您业务的正确选择,还是具有实时功能的 Linux 解决方案更适合您的需求呢? 我们最新的白皮书对这些问题进行了深入的探讨,在这篇博客中,我们将进行顶层概述。 是什么让系统实现 “实时”? 实时系统优先考虑计时而不是原始性能。它们的设计初衷是在严格的时间限制内处理特定的任务。与考虑总吞吐量的通用系统不同,实时系统关注确定性结果,因为每个操作都必须在定义的限制内可预测地发生。这种确定性对于车辆安全机制、工业控制系 […]
Canonical 推出首个 MicroCloud LTS 版本
扩大 Canonical 基础架构解决方案 - MicroCloud 2.1.0 LTS 长期支持承诺 Canonical 推出 MicroCloud 的首个长期支持(LTS,Long Term Support)版本。MicroCloud 是 Canonical 的云基础架构产品组合的一员。作为 Ubuntu 的发行商,Canonical 以每两年在4月份提供 Ubuntu LTS 版本著名。随着 MicroCloud LTS 的加入,Canonical 扩大了对寻求面向边缘和低接触云的可扩展虚拟化解决方案的组织提供长期支持的承诺。 MicroCloud 2.1.0 LTS 支持单节点部署,改进了安全状况,并在初始化过程中具有更大的灵活性。它将 LXD 作为其虚拟化平 […]
Canonical x Lenovo: 在边缘运行 AI workloads
携手 Canonical 和 Lenovo,在边缘运行 AI 工作负载 从制造业中的预测性维护,到医疗保健行业中的虚拟助手,再到最偏远地区的电信路由器优化,AI 正在各种边缘环境中掀起新浪潮,带来新机遇。但为了支持这些几乎随处运行的 AI 工作负载,公司需要具备快速、安全且高度可扩展的边缘基础架构。 开源工具 —— 例如用于轻量级 Kubernetes 编排的 MicroK8s 和用于 ML 机器学习工作流的 Charmed Kubeflow —— 可以为边缘 AI 部署提供更高的灵活性和安全性。如果配合加速计算堆栈使用,这些解决方案可以帮助专业人员更快地交付项目,降低运营成本,以及确保更可预测的结果。 今天这篇博客探讨为什么企业正逐渐在边缘 AI 领域转向开放式基础架构 […]