ACRN Intel推出的虚拟机是啥样的?

news2025/1/12 10:47:10

前言

ACRN作为Intel为工控领域推出的一个小型化的虚拟机,它的特点主要有这么几个:

1.针对Intel的芯片做了非常强的优化

2.RT-VM实时虚拟机的实时性很好

3.CACHE缓存技术发挥的好

4.TCC技术 / 当然不是所有intel的芯片都支持,,,得带e的芯片才行

编译机器的环境

编译环境就没有ACRN这么严格了,相对还是轻松的,我们可以用虚拟机Ubuntu22.04去搭建环境,根据给出的文档操作就可以了Getting Started Guide — Project ACRN™ 3.2-unstable documentation

mkdir -p ~/acrn-work

sudo apt install -y gcc git make vim libssl-dev libpciaccess-dev uuid-dev \
     libsystemd-dev libevent-dev libxml2-dev libxml2-utils libusb-1.0-0-dev \
     python3 python3-pip libblkid-dev e2fslibs-dev \
     pkg-config libnuma-dev libcjson-dev liblz4-tool flex bison \
     xsltproc clang-format bc libpixman-1-dev libsdl2-dev libegl-dev \
     libgles-dev libdrm-dev gnu-efi libelf-dev \
     build-essential git-buildpackage devscripts dpkg-dev equivs lintian \
     apt-utils pristine-tar dh-python python3-lxml python3-defusedxml \
     python3-tqdm python3-xmlschema python3-elementpath acpica-tools

cd ~/acrn-work
git clone https://github.com/projectacrn/acrn-hypervisor.git
cd acrn-hypervisor
git checkout release_3.2

cd ..
git clone https://github.com/projectacrn/acrn-kernel.git
cd acrn-kernel
git checkout release_3.2

目标机器Step1

其实ACRN对硬件芯片还是有限制的,可以去对应的查看一下,这里我还是用intel i7-12700来做示范。系统可以使用ECI或者ACRN教程上面的Ubuntu 22.04。对RT_VM虚拟机的实时性不会有很大影响

BIOS设置

Hyper-ThreadingDisabledIntel Advanced Menu ⟶ CPU Configuration
Intel (VMX) VirtualizationEnabledIntel Advanced Menu ⟶ CPU Configuration
Intel(R) SpeedStepDisabledIntel Advanced Menu ⟶ Power & Performance ⟶ CPU - Power Management Control
Turbo ModeDisabledIntel Advanced Menu ⟶ Power & Performance ⟶ CPU - Power Management Control
C StatesDisabledIntel Advanced Menu ⟶ Power & Performance ⟶ CPU - Power Management Control
RC6 (Render Standby)DisabledIntel Advanced Menu ⟶ Power & Performance ⟶ GT - Power Management Control
VT-dEnabledIntel Advanced Menu ⟶ System Agent (SA) Configuration
Above 4GB MMIO BIOS assignmentDisabledIntel Advanced Menu ⟶ System Agent (SA) Configuration
PM SupportEnabledIntel Advanced Menu ⟶ System Agent (SA) Configuration ⟶ Graphics Configuration(没找到)
DVMT Pre-Allocated64MIntel Advanced Menu ⟶ System Agent (SA) Configuration ⟶ Graphics Configuration

生成配置文件

这里需要注意一点,ACRN建议我们在生成配置文件的时候,就插上所有需要用的到设备,比如hdmi、pcie设备、usb键鼠等等,因为这个配置是一次性的,如果后期再增加,那在虚拟机里可能识别不到。

编译机器Step1

编译机器主要是把这个my_board文件拷过来,可以结合这个链接,我们在这里大概的说一下过程。Getting Started Guide — Project ACRN™ 3.2-unstable documentation

在这里我们主要去搭建一个实时的RT_VM,当然也有标准的STD_VM,只要按官方的教程就可以了。在终端里输入 acrn-configuration之后,按照链接里选好my_board.xml,在界面里按下面的方式去设置,因为ACRN会用串口去调试打印数据,如果等级设置的太低,它会什么都打印,严重影响实时性。

然后对应设置RT_VM的参数

 接着按照官网的方式去编译,会获得一堆deb的安装文件,这些文件需要拷贝到目标平台上

 目标机器Step2

安装上面所有的deb文件,然后我们修改GRUB的菜单,在进入系统的时候选择带有acrn-service-vm的选项进入即可。

设置网络 

sudo cp /usr/share/doc/acrnd/examples/* /etc/systemd/network
sudo systemctl enable --now systemd-networkd

VM镜像的选择

目标机器Step1的过程中啊,我们其实是随便填写了一个镜像目录,教程里用的是Ubuntu的Ubutnu22.04.iso这种iso的镜像文件。这个会有问题,我们可以进系统,但是任何的操作都没有办法保存,这是因为iso这种镜像烧录方式决定的,无法修改内部的数据。所以我们可以通过Run Ubuntu as the User VM OS — Project ACRN™ 3.2-unstable documentation这个链接里面提到的,将Ubuntu通过KVM去打包成一个xxx.img的镜像,替换我们原来的Ubuntu.iso镜像,比如下面所示

当然啊,其实我们可以用之前的ECI镜像,实时性的效果会更好,可以参考前面的ECI Core-jammy编程。

然后我们直接运行launch_user_vm_id1.sh这个脚本,稍等一会就可以进入VM虚拟机中。 

联网问题

按上面的所有操作,我们在虚拟机里是没有办法联网的。根据Virtio-Net — Project ACRN™ 3.2-unstable documentation这个链接中提到的,我们需要在脚本里指定联网的设备(ACRN里叫Tap)

在目标机器上使用ifconfig命令,可以看到存在acrn-br0和tap0 我们要指定tap0作为网络的接口

acrn@acrn:~/acrn-work$ ifconfig
acrn-br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.8.36  netmask 255.255.255.0  broadcast 192.168.8.255
        inet6 240e:478:e58:4560:822e:1577:8b6d:3  prefixlen 128  scopeid 0x0<global>
        inet6 240e:478:e58:4560:689a:7bff:fe5c:2038  prefixlen 64  scopeid 0x0<global>
        inet6 fd82:2e15:778b:6d00:689a:7bff:fe5c:2038  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::689a:7bff:fe5c:2038  prefixlen 64  scopeid 0x20<link>
        ether 6a:9a:7b:5c:20:38  txqueuelen 1000  (Ethernet)
        RX packets 7159  bytes 775567 (775.5 KB)
        RX errors 0  dropped 55  overruns 0  frame 0
        TX packets 2527  bytes 380381 (380.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 34:df:20:03:00:82  txqueuelen 1000  (Ethernet)
        RX packets 14282  bytes 9998415 (9.9 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6609  bytes 783568 (783.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0x50500000-505fffff

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 296  bytes 24997 (24.9 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 296  bytes 24997 (24.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tap0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 62:f9:46:52:c4:1e  txqueuelen 1000  (Ethernet)
        RX packets 4078  bytes 403446 (403.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7241  bytes 9084469 (9.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

我们继续修改launch脚本,把这个tap0挂载上,这样就可以访问网络了。 

加载磁盘的问题

生成一个test.img的磁盘块,大小为2048M 也就是2G

dd if=/dev/zero of=test.img bs=1M count=2048
mkfs.ext4 test.img

修改launch脚本。它每一行命令前置的序列是不能重复的,比如这里在添加磁盘前已经有0 3 4 5 ,我们可以选择7、8、9等等,比如这里我选择了9

进入RT VM1以后,挂载它

mkdir /home/xxx/test
sudo mount /dev/vdb /home/xxx/test
sudo chmod 755 /home/xxx/test 

扩充img

# 用qemu-img将eore-jammy.img扩大到20G 
qemu-img resize eore-jammy.img 20G 
# 进入VM1, 
fdisk /dev/vda 
# 然后 
wq 
# 最后 
resize2fs /dev/vda2

优化RT VM

使用debug调试线,用putty进入后更改Loglevel等级(串口 115200波特率),当然这个在设置VM的时候可以选择,改成2 2 2,如果之前没有改的话,我们就要用这个debug调试线的方式去修改。

loglevel 2 2 2

VM1中调整grub, /etc/default中找到grub,修改成以下内容 (我这里VM1用了俩核,所以我可以去把一个核隔离了用来做实时任务)

GRUB_CMDLINE_LINUX DEFAULT="quiet splash isolcpus=nohz.domain,1 idle=poll rcu_nocb_poll rcu_nocbs=1 mce=off"

Real Time测试结果

在VM1里面,我们进行Cyclictest的实时性测试(宿主机用的是Ubuntu 22.04,VM1用的镜像是ECI Core-jammy),48h的结果是15us,已经很不错了,跟裸机的ECI基本没有区别

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1618625.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OKCC搭建配置什么样的服务器合适

OKCC呼叫中心系统是一种采用软硬件结合的架构方式、及分布式的IP技术&#xff0c;从多角度为企业提供整合的一体化解决方案。因此&#xff0c;搭建OKCC呼叫中心系统所使用的服务器应该满足以下几点要求&#xff1a; 稳定性&#xff1a;服务器需要具有较高的稳定性和可靠性&…

应用部署tomcat的三种方式

由于一直在用springboot框架&#xff0c;集成了tomcat&#xff0c;快忘记如何单独部署tomcat了&#xff0c;以下&#xff0c;记录一下&#xff1a; 部署tomcat有三种方式&#xff1a; 一、方式一&#xff1a;将war包丢进webapps 这是最简单粗暴的方式&#xff1a;将web工程打…

平均月薪超4.6万!AI领域重磅课程汇总,哈佛,斯坦福,微软,谷歌等出品!

2023年底&#xff0c;由脉脉高聘人才智库发布的《2023泛人工智能人才洞察》报告显示&#xff0c;2023年前八个月内新发布的AI岗位平均月薪超过了4.6万元&#xff0c;而且人才供不应求&#xff0c;甚至出现了5个岗位争夺2个人才的情况。 本文章整理了10项来自全球各高校与知名企…

语音聊天app软件、语音房软件开发

最近我们收到了众多客户咨询,他们都对语音聊天app非常感兴趣! 语音聊天app,在线组CP,一起连麦聊天、唱歌、打游戏,年轻人非常喜欢的语音社交软件,可以语音通话、多人语音房聊天、发布动态、会员充值等功能.大家可以在虚拟世界里快乐社交! 里面还有好玩的互动小游戏,帮助客户增…

[Meachines][Easy]Bizness

Main $ nmap -p- 10.10.11.252 --min-rate 1000 $ dirsearch -u https://bizness.htb/ $ whatweb https://bizness.htb/control/login 存在一个未授权的RCE $ git clone https://github.com/jakabakos/Apache-OFBiz-Authentication-Bypass.git $ cd Apache-OFBiz-Authenticat…

【webrtc】m98 RoundRobinPacketQueue的优先级处理

m98 代码 PacedSender::EnqueuePackets 的调用者可能是多个地方,所以这个要加锁保护。RoundRobinPacketQueue 本身是没有锁的发现m98和新版本不同,参考:【webrtc】m114自己实现的PrioritizedPacketQueuepush和pop都是RtpPacketToSend 但是实际上,内部是封装为QueuedPacket 处…

【笔试强训】牛牛快递

链接&#xff1a;牛牛的快递_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/41b42e7b3c3547e3acf8e90c41d98270?tpId290&tqId39852&ru/exam/oj描述 牛牛正在寄快递&#xff0c;他了解到快递在 1kg 以内的按起步价 20 元计算&#xff0c;超出部分…

基于RT-Thread的智能家居助手

一、项目简介 智能家居助手主要基于RT-Thread开发的&#xff0c;该系统主要分为语音子系统&#xff0c;环境监测子系统&#xff0c;智能控制子系统&#xff0c;智能网关子系统&#xff0c;音乐播放器&#xff0c;云端以及应用软件七大部分。语音子系统可通过语音进行人机交互来…

基于51单片机的温度、烟雾、防盗、GSM上报智能家居系统

基于51单片机的智能家居系统 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.DS18B20检测温度&#xff0c;MQ-2检测烟雾、ADC0832实现模数转换&#xff1b; 2.按键可以设置温度、烟雾浓度阈值&#x…

Linux加强篇-Shell命令脚本

目录 ⛳️推荐 编写Shell脚本 编写简单的脚本 接收用户的参数 判断用户的参数 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 编写Shell脚本 Shell脚本命令的工作方式有下面…

Hdu1350 Taxi Cab Scheme 【最小路径覆盖】

Taxi Cab Scheme 题意 有一张边长不超过 200 200 200 的网格图&#xff0c;有若干个乘客&#xff0c; 乘客 i i i 的需求是&#xff1a; h h : m m , ( a , b ) , ( c , d ) hh:mm, (a,b) , (c, d) hh:mm,(a,b),(c,d)&#xff0c;意为他需要在 h h 时 m m 分 hh时mm分 hh时…

Kibana安装部署(Linux)

Kibana是Elasticsearch的开源可视化工具&#xff0c;与存储在Elasticsearch中的数据进行交互。 1. 下载软件 这里使用的Elasticsearch的版本是7.12.0&#xff0c;所以kibana选择同样的7.12.0版本。 官网下载地址&#xff1a;https://www.elastic.co/cn/downloads/past-releas…

安装zabbix server

目录 1、实验环境 2、yum 安装zabbix server 2.1 解决权限问题和放行流量 2.2 安装zabbix-server 1、实验环境 操作系统rhel8zabbix6.0TLS数据库mysql8.0.30IP地址192.168.81.131时间配置NTP时间服务器同步 2、yum 安装zabbix server 如果通过yum源安装&#xff0c;操作系…

【NUCLEO-G071RB】005——RCC-PLL时钟配置

NUCLEO-G071RB&#xff1a;005——RCC-PLL时钟配置 设计目标芯片配置程序修改仿真测试 设计目标 将HSI通过PLL倍频到64MHz&#xff0c;并作为系统时钟。 芯片配置 切换到Clock Configuration选项卡&#xff0c;以图形化界面配置时钟。System Clock Mux是CPU核心的时钟源选择…

AJAX——事件循环(EventLoop)

1.事件循环&#xff08;EventLoop&#xff09; 概念&#xff1a;JavaScript有一个基于事件循环的并发模型&#xff0c;事件循环负责执行代码、收集和处理事件以及执行队列中的子任务。这个模型与其它语言中的模型截然不同&#xff0c;比如C和Java。 原因&#xff1a;JavaScri…

Positive证书——最经济的数字信任的桥梁

简介 在网络世界中&#xff0c;数据安全与隐私保护的重要性日益凸显&#xff0c;其中SSL或TLS证书扮演着至关重要的角色。Positive SSL证书作为全球认可的数字证书品牌之一&#xff0c;以其高性价比和广泛兼容性赢得了广大用户的青睐。 这是一种由权威CA&#xff08;Certifica…

SD-WAN制造业网络优化方案

制造业在数字化浪潮的推动下&#xff0c;进行转型的需求越来越强烈。网络作为制造业数字化转型的关键基础设施&#xff0c;其稳定性、安全性和灵活性直接影响着企业的运营效率和市场竞争力。而SD-WAN可以为制造业提供有效的解决方案&#xff0c;让制造业顺利高效地进行数字化转…

跨模态、多模态、多任务之间的区别与联系

文章目录 1、定义1.1 跨模态1.2 多模态1.3 多任务 2、区别3、联系4、关系图5、总结 1、定义 1.1 跨模态 跨模态是指从一种模态的数据中学习&#xff0c;并将其知识应用到另一种模态的数据上。跨模态学习可以利用不同模态数据之间的隐含关系&#xff0c;从而提高模型的泛化能力…

go语言并发实战——日志收集系统(七) etcd的介绍与简单使用

什么是etcd etcd是基于Go语言开发的一个开源且高可用的分布式key-value存储系统&#xff0c;我们可以在上面实现配置共享与服务的注册与发现。 和它比较相似的还有我们之间所提到的Zookeeper以及consul.(注:后面我们学习微服务的时候etcd和consul会有广泛的使用) etcd有以下几…

napi —— linux 网卡驱动收包机制

linux 操作系统一般指 linux 内核。在 linux 上开发应用的时候&#xff0c;可以使用 linux 提供的系统调用。linux 内核管理着机器上的硬件资源&#xff1a;内存&#xff0c;磁盘&#xff0c;网卡等。开发应用的时候不能直接操作这些硬件&#xff0c;而只能通过系统调用来使用…