解开Intel ECI 的面纱

news2024/12/25 17:46:43

前言

Intel ECI是一个用于工业领域边缘控制的软硬件平台,我们今天主要探索的是软件部分,也就是系统镜像。区别于传统的Ubuntu或者Debian,ECI的强大之处在于它的实时性以及对于Intel自家芯片的缓存优化能力极强。

那么让我们来探索一下

编译/安装ECI

BIOS的设置可以参考

Appendix — ECI documentation (intel.com)

然后进入主题,我们来编译和安装ECI Core-Jammy

Get Started — ECI documentation (intel.com)

当然啊,可能会对ECI这个介绍感到眼花缭乱,不知道从哪里下手,其实很简单,只要申请一个账号,然后下载ECI的Release Archive就可以。当然对于系统的要求还是存在的,我们需要用Ubuntu22.04这个环境去编译它的Core-Jammy或者Core-bullseye的系统镜像,因为它采用的方式和Yocto是一样的,都需要bitbake的方式去编译,当然也要连接外网,不然很多github的链接都会挂了。

Download ECI — ECI documentation (intel.com)

然后我们就可以按照网页给出的方式去构建Intel的ECI,这里推荐选择上面的三个,当然都是没有桌面环境的,如果有需要可以自己在后续的环境中安装

apt-get install lightdm以及apt-get install lightdm xfce4

Build ECI — ECI documentation (intel.com)

这里倒是没有什么难点,主要是网络的问题,编译完后可以按照文档的提示去制作启动U盘。这里倒是吐槽一下,Intel这个做的链接有点不好找。Install Debian-based ECI Images (Generic) — ECI documentation (intel.com)

ECI上手

安装到对应的机子上以后我们就可以进去系统查看了,

默认的用户名和密码都是eci-user,对应的最高权限的用户名和密码都是root

我们可以用cyclictest去做一下实时性的测试,在没有用stress-ng去加压的情况下,intel i7-12700上采用ECI-Core-Jammy的最大时延48h差不多在20个us左右 

cyclictest --smp --mlockall --priority=99 --policy=fifo --interval=1000 --histogram=400 --secaligned=50 --duration=10m

当然啊,Intel也是推荐我们把所有和实时性相关的任务都放到隔离核上去运行,所以我们也可以设置一下隔离核,这样实时性还会提高不少。相关的可以参考一下这个文档啊

Appendix — ECI documentation (intel.com)

对应修改/etc/default/default里面的内核参数,需要注意的是,修改完之后我们对CPU的核进行了隔离,所以不能再用--smp的这种方式去运行cyclictest了,因为--smp无法在被隔离的核上去调用。所以会影响实时性的效果。这里我们隔离了CPU1-CPU8。

# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
#   info -f grub -n 'Simple configuration'

GRUB_DEFAULT=0
#GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=3
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nohpet no_timer_check ignore_loglevel log_buf_len=16M consoleblank=0 console=hcv0 i915.nuclear_pagefilp=1 i915.avail_planes_per_pipe=0x070F00 x2apic_phys mce=ignore_ce idle=poll isolcpus=nohz,domain,1-8, rcu_nocbs=1-8, nohz_full=1-8"
GRUB_CMDLINE_LINUX=""

# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"

# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480

# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"

# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"

可以看到啊,如果还用之前的--smp去跑,时延一下子就破12了,这是因为cpu1-cpu8其实都没有跑任务,因为他们被隔离了,这样所有的12个线程就会被分配到cpu0和剩下的cpu9-11去跑,因此这个测试的结果其实不太好。(本来--smp的意思就是每一个核心上去运行一个线程,但是cpu1-cpu8被隔离了,所以这个线程就没法去加载到cpu1-cpu8,从而都加载到别的cpu上了)

那么我们可以针对CPU1-CPU8里的任意一个CPU去做测试,比如我们指定-a 1-8表示将程序绑定到cpu1至cpu8去运行测试。

通过taskset -p -c <PID>可以查看到这个程序运行在哪个cpu核心上

 通过这种方式,可以看到,基本上在48H测试的结果上来说,测试了几次最大时延基本在10-16us之间。

自定义内核参数

当然ECI也提供了让我们去自定义修改内核参数的方法,可以参考ECI的链接

Configure and Build Linux Kernel — ECI documentation (intel.com)

链接里提供了两种方式:

第一种就是根据我们编译ECI的环境,去进行kernel的修改。这里只有一个地方要注意,当我们选择manual build的时候,下面会给出几行命令,我们需要修改一下KAS的那行,把build targets/xxx 改成shell targets/xxx 就可以进入bitbake,然后在按照上面链接里的方式去编译即可。最后生成deb文件,拷贝到目标系统里 用dpkg -i 去安装就可以了。

第二种是在已经运行ECI的目标机器上去编译内核

这里有一个要注意的地方Step3这里有坑,我们要把这个patchset的文件夹拷贝一份到build-full这个目录里面,然后去做对应的tar zxf /proc xxxxx这部操作,否则在编译的时候会提示找不到patcheset文件夹。 

还有一个地方要注意,Step5里这个dir是错的,其实真正要进的目录就是我们编译的这个目录,比如linux-intel-lts-lts-v5.15.113-rt64-preempt-rt-230530T192215Z这个目录

 

编译完以后它会自动安装上,我们直接重启系统就可以了,两种方法都很方便,当然我比较推荐第一种,因为第二种要在ECI的目标机器上安装很多依赖库。。会整的我们的目标机器变得更庞大。因为作为工业机器,我们希望越简单越好。 

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

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

相关文章

Access denied for user ‘zabbix‘@‘localhost‘ (using password: NO)

现象 排查过程 进入数据库show grants for zabbixlocalhost;select host,user from mysql.user;cat /etc/zabbix/zabbix_server.conf | grep DB | grep -vE ‘#|$’cat /etc/zabbix/web/zabbix.conf.php | grep DB 解决办法 mysql 8.0以下 DPassword123.com mariadb -e "…

手写一个Spring IOC框架

目录 一&#xff0c;Spring IOC 二&#xff0c;流程图设计 三&#xff0c;设计思路解析 三&#xff0c;开始写代码 1.准备工作: 2.扫描并加载类信息 3.初始化bean 4.测试一下 一&#xff0c;Spring IOC Spring IoC容器是Spring框架的核心&#xff0c;它通过读取配置信息…

木马——文件上传

目录 1、WebShell 2.一句话木马 靶场训练 3.蚁剑 虚拟终端 文件管理 ​编辑 数据操作 4.404.php 5.文件上传漏洞 客户端JS检测 右键查看元素&#xff0c;删除检测代码 BP拦截JPG修改为php 服务端检测 1.MIME类型检测 2.文件幻数检测 3.后缀名检测 1、WebShell W…

【网络协议】 TCP与UDP协议区别及应用场景深度分析

1. TCP与UDP简介 1.1 TCP 1.1 定义 TCP&#xff08;TransmissionControl Protocol&#xff09;传输控制协议。 是一种可靠的、面向连接的协议&#xff08;eg:打电话&#xff09;、传输效率低全双工通信&#xff08;发送缓存&接收缓存&#xff09;、面向字节流。使用TCP的应…

restful请求风格的增删改查-----查询and添加

一、restful风格的介绍 restful也称之为REST ( Representational State Transfer )&#xff0c;可以将它理解为一种软件架构风格或设计风格&#xff0c;而不是一个标准。简单来说&#xff0c;restful风格就是把请求参数变成请求路径的一种风格。例如&#xff0c;传统的URL请求…

SpringBoot---------Lombook

Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具&#xff0c;通过使用对应的注解&#xff0c;可以在编译源码的时候生成对应的方法&#xff0c;也就是简化咱们之前pojo&#xff0c;实体类里面臃肿的get/set有参无参。 首先查看一…

【Linux】认识文件(二):重定向

【Linux】认识文件&#xff08;二&#xff09;&#xff1a;重定向 一.stdout,stderr,stdin二.重定向1.什么是重定向i.输出重定向>ii.追加重定向>>iii.输入重定向< 2.重定向原理3.dup2的使用 三.理解linux中的一切皆文件 上篇文件博客中&#xff0c;讲了进程管理已打…

助企扩岗稳就业,2024年成都市重点企业稳就业政策培训会圆满举行!

2024年4月17日&#xff0c;由成都市就业服务管理局主办&#xff0c;成都市金牛区就业服务管理局承办的2024年成都市重点企业稳就业政策培训会&#xff08;金牛区专场&#xff09;在成都市金牛区顺利举行。此次培训会由国际数字影像产业园召集全区70余家重点企业积极参与&#x…

Android Studio实现内容丰富的安卓养老平台

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动 158安卓养老 1.开发环境 后端用springboot框架&#xff0c;安卓的用android studio开发android stuido3.6 jak1.8 idea mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登…

ELK 日志分析(二)

一、ELK Kibana 部署 1.1 安装Kibana软件包 #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录 cd /opt rpm -ivh kibana-5.5.1-x86_64.rpm 1.2 设置 Kibana 的主配置文件 vim /etc/kibana/kibana.yml --2--取消注释&#xff0c;Kiabana 服务的默认监听端口为5601 server.po…

C++11——线程库的理解与使用

目录 前言 一、线程库的构造 1.默认构造 2.带参构造 3.拷贝构造与赋值拷贝&#xff08;不支持&#xff09; 4.移动构造 二、线程调用lambda函数 三、线程安全与锁 1.lambda中的线程与锁 2.函数指针中的线程与锁 3.trylock() 4.recursive_mutex 5.lock_gurad守卫锁…

android开发 多进程的基本了解

目录 如何开启多进程?理解多进程模式的运行机制 如何开启多进程? 给四大组件在androidMenifest中指定android:precess <activityandroid:name".ThreeActivity"android:exported"false"android:process"com.my.process.three.remote" />…

4月21日Linux运维用户相关的添加,分组,修改权限等shell脚本开发第一天

4月21日运维用户相关的添加&#xff0c;分组&#xff0c;修改权限等shell脚本开发第一天 第一天主要实现前2个功能 ​ 主要卡在了&#xff1a; 正确的写法如下&#xff0c;注意[]中的空格&#xff0c;要求很严格&#xff01;&#xff01;&#xff01; #!/bin/bash # 先查看已…

Unity射击游戏开发教程:(3)如何销毁游戏对象 ,添加CD

在 Unity 中销毁游戏对象 在我之前的文章中,我写了关于实例化或创建激光预制体,当发射时,激光预制件将继续在屏幕上移动一段时间。 创建所有这些激光预制件后,最终会减慢游戏速度,因此我们必须通过创建激光预制件来找到平衡,在屏幕上移动直到它超出游戏视图,然后销毁它…

Vue2:标签页一个页面拆分成俩个选项卡

概要 在自己的项目中&#xff0c;标签页组件显示一般就是点击一个页面&#xff0c;然后标签页组件显示该页面的名称。但是如果你是一个页面文件中展示不同的内容比如( 某模块的新增页面 和 详情页面)一般内容新建页面和详情页面差别不是很大&#xff0c;有的内容甚至俩边都会用…

windows驱动开发-设备栈

设备栈是windows内核中非常重要的部分&#xff0c;这部分理解可以让我们在调试中节省大量的时间&#xff0c; 在windows NT体系中&#xff0c;内核所有的设备被按照连接次序加载到设备树上&#xff0c;这棵树的根节点是ROOT节点&#xff0c;每一个设备可以从当前路径一直遍历到…

查询服务器上所有SQL SERVER数据库中是否包含某个字段,且该字段是否包含某个值

公司有一堆相同类别的客户&#xff0c;每个客户都部署了相同的一套系统&#xff0c;每套系统对应一个相同结构的数据库&#xff0c;昨天老板让查一下手机号码177xxxxx248是属于哪个客户的客户。 我要查的这个号码来自于oa_member表中的phone字段&#xff0c;我需要对所有的数据…

Android 性能优化之黑科技开道(二)

3. 其它可以黑科技优化的方向 3.1 核心线程绑定大核 3.1.1 定义 核心线程绑定大核的思路也很容易理解&#xff0c;现在的 CPU 都是多核的&#xff0c;大核的频率比小核要高不少&#xff0c;如果我们的核心线程固定运行在大核上&#xff0c;那么应用性能自然会有所提升。 核…

使用Python比较两张人脸图像并获得准确度

使用 Python、OpenCV 和人脸识别模块比较两张图像并获得这些图像之间的准确度水平。 一、原理 使用Face Recognition python 模块来获取两张图像的128 个面部编码&#xff0c;并比较这些编码。比较结果返回 True 或 False。如果结果为True &#xff0c;那么两个图像将是相同的…

社交媒体内容创新:Kompas.ai如何引领潮流

在数字营销的激烈竞争中&#xff0c;社交媒体平台已成为品牌与消费者互动的主要战场。随着用户对新鲜、有趣和互动性强的内容需求不断增长&#xff0c;品牌必须不断创新&#xff0c;以维持其在社交媒体上的影响力和吸引力。本文将深入探讨社交媒体平台上内容创新的必要性及其对…