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

前言

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基本没有区别

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙(HarmonyOS)性能优化实战-多线程共享内存

概述 在应用开发中&#xff0c;为了避免主线程阻塞&#xff0c;提高应用性能&#xff0c;需要将一些耗时操作放在子线程中执行。此时&#xff0c;子线程就需要访问主线程中的数据。ArkTS采用了基于消息通信的Actor并发模型&#xff0c;具有内存隔离的特性&#xff0c;所以跨线…

产品规划|如何从0到1规划设计一款产品?

我们要如何从0到1规划设计一款产品?在前期工作我们需要做什么呢?下面这篇文章就是关于此的相关内容,大家一起往下看多多了解了解吧! 一、什么是产品规划? 产品规划是一种策略,它设定了产品的价值和目标,并确定实施方案以实现这些目标。它考虑了产品的整个生命周期,基于…

[RTOS 学习记录] 工程管理工具make及makefile

[RTOS 学习记录] 工程管理工具make及makefile 这篇文章是我阅读《嵌入式实时操作系统μCOS-II原理及应用》后的读书笔记&#xff0c;记录目的是为了个人后续回顾复习使用。 前置内容&#xff1a; 开发工具 Borland C/C 3.1 精简版 文章目录 1 make 工具2 makefile 的内容结构3…

【学习笔记二十四】EWM补货策略和自动补货配置

一、EWM补货策略概述 1.计划补货 ①以联机或批处理模式启动 ②根据最大和最小数量计算补货 ③仅当库存量低于最低数量时才开始 ④四舍五入至最小补货数量的倍数 2.自动补货 ①在WT确认期间启动 ②根据最大和最小数量计算补货 ③只有当库存量低于最低数量时才开始 ④四舍…

Linux thermal框架介绍

RK3568温控 cat /sys/class/thermal/thermal_zone0/temp cat /sys/class/thermal/thermal_zone1/temp cat /sys/class/thermal/cooling_device0/cur_state cat /sys/class/thermal/cooling_device1/cur_state cat /sys/class/thermal/cooling_device2/cur_state thermal_zone…

翻页电子图书制作小技巧分享给你

当今社会&#xff0c;二维码已经成为了信息传递的重要方式之一&#xff0c;其在电子商务、广告营销、活动推广等领域广泛应用。而如何将二维码巧妙地融入电子画册中&#xff0c;制作出高端、具有吸引力的作品&#xff0c;成为了许多设计师和营销人员关注的焦点 但是很多人却不知…

ABeam×StartUp丨蓝因机器人访问ABeam旗下德硕管理咨询(深圳)新创部门,展开合作交流

近日&#xff0c;深圳蓝因机器人科技有限公司&#xff08;以下简称“蓝因机器人”&#xff09;创始人陈卜铭先生来访ABeam旗下德硕管理咨询&#xff08;深圳&#xff09;有限公司&#xff08;以下简称“ABeam-SZ”&#xff09;&#xff0c;与新创部门展开合作交流。 交流中&am…

六西格玛管理培训:我的转变与成长之旅

4月初&#xff0c;我参与了天行健咨询的六西格玛管理培训&#xff0c;这次经历不仅极大地提升了我的工作效率&#xff0c;还帮助我在工作中实现了卓越。现在&#xff0c;我想分享一些我在这次培训中的学习心得和实践经验&#xff0c;希望能对正在寻求提升绩效和卓越之路的大家有…

【无线通信】OQPSK

调制 sps 8; RolloffFactor 0.2; FilterSpanInSymbols 10;bits randi([0, 1], 224*8, 1); % 1792symbols bits*2 - 1; % 1792 re -symbols(2:2:end); % 896 im -symbols(1:2:end); % 896pFilterTx comm.RaisedCosineTransmitFilter(...Shape, Square root, ...Rollo…

MySQL主从结构搭建

说明&#xff1a;本文介绍如何搭建MySQL主从结构&#xff1b; 原理 主从复制原理如下&#xff1a; &#xff08;1&#xff09;master数据写入&#xff0c;更新binlog&#xff1b; &#xff08;2&#xff09;master创建一个dump线程向slave推送binlog&#xff1b; &#xff…

GoJudge环境部署本地调用云服务器部署go-judge判题机详细部署教程go-judge多语言支持

前言 本文基于go-judge项目搭建&#xff0c;由于go-judge官网项目GitHub - criyle/go-judge: Sandbox Server in REST / gRPC API. Based on Linux container technologies.&#xff0c;资料太少&#xff0c;而且只给了C语言的调用样例&#xff0c;无法知道其他常见语言比如&am…

Python基础06-日期和时间的操作方法

在Python中处理日期和时间是编程中常见的需求&#xff0c;无论是安排任务、记录日志还是分析数据。本文将介绍如何在Python中获取当前日期和时间、创建特定日期和时间、格式化日期和时间、解析字符串中的日期和时间、使用时间差、比较日期和时间、从日期/时间中提取组件、处理时…

uni-app开发canvas绘图画画,如何实现后退功能

在uni-app中使用canvas进行绘图时&#xff0c;实现后退功能通常意味着你需要保存用户的每一步操作&#xff0c;然后提供一个机制来撤销最近的步骤。下面是一个基本的实现思路&#xff1a; 保存绘图步骤&#xff1a; 每当用户在canvas上绘制时&#xff08;比如通过touchMove事件…

出海不出局 | 小游戏引爆高线市场,新竞争态势下的应用出海攻略

出海小游戏&#xff0c;出息了&#xff01; 根据 Sensor Tower 近期发布的“2024 年 3 月中国手游收入 TOP30”榜单&#xff0c;出海小游戏在榜单中成了亮眼的存在。 其中&#xff0c;《菇勇者传说》3 月海外收入环比增长 63%&#xff0c;斩获出海手游收入增长冠军&#xff0c…

学习经验分享【33】YOLOv5 / YOLOv7 / YOLOv8 / YOLOv9 / RTDETR 基于 Pyside6 的图形化界面

大论文可以写两章关于算法创新模型&#xff0c;最后一章可以写对前两章提出方法进行封装&#xff0c;利用PyQT5搭建YOLOv5可视化界面&#xff0c;并打包成exe程序&#xff0c;构建检测平台实现简单的应用。用来凑大论文的字数和工作量&#xff0c;是简单又快速的方法&#xff0…

《龙之谷》游戏(客户端+服务端+视频架设教程+工具),本人收集的8个版本,云盘下载

龙之谷这个游戏本人觉得挺好玩的。你们可以下载研究一下看看&#xff0c;有能力的话&#xff0c;可以提取服务端文件出来&#xff0c;做成外网&#xff0c;让大家一起玩。。。。 《龙之谷》游戏&#xff08;客户端服务端视频架设教程工具&#xff09;&#xff0c;本人收集的8个…

WEB前端-笔记(三)

目录 一、事件 1.1类型 1.2对象 1.3页面加载事件 1.4滚动事件 1.5尺寸事件 1.6捕获&冒泡事件 1.7阻止表单提交 1.8全选案例 1.9事件委托 ​编辑 1.10client&offset 1.11换取元素的位置 1.12创建节点 1.13克隆节点 1.14删除节点 1.15setTimeout 1.16s…

【后端】PyCharm的安装指引与基础配置

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、PyCharm是什么二、PyCharm安装指引安装PyCharm社区版安装PyCharm专业版 三、配置PyCharm&#xff1a;四、总结 前言 随着开发语言及人工智能工具的普及&am…

MS1000TA超声波测量模拟前端

产品简述 MS1000TA 是一款超声波测量模拟前端芯片&#xff0c;广 泛应用于汽车工业和消费类电子。该芯片具有高度 的灵活性&#xff0c;发射脉冲个数、频率、增益及信号阈值 均可配置。同时&#xff0c;接收通道参数也可以灵活配置&#xff0c; 从而适用于不同尺寸容器、不…

Java——继承与组合

和继承类似, 组合也是一种表达类之间关系的方式, 也是能够达到代码重用的效果。组合并没有涉及到特殊的语法 (诸如 extends 这样的关键字), 仅仅是将一个类的实例作为另外一个类的字段。 继承表示对象之间是is-a的关系&#xff0c;比如&#xff1a;狗是动物&#xff0c;猫是动…