内核性能评估测试及具体修改操作步骤记录
步骤记录
- 前言
- 一、查看环境配置
- 二、LRU缓存空间调整
- 三、进程扫描时间间隔
- 四、与其他内核对比的工作负载测试(另一个内核的编译)
- 总结
前言
记录的相关操作有:查看服务器硬件环境、LRU缓存大小修改、内核命名、内核编译以及进程执行周期的设置。
一、查看环境配置
可以在Ubuntu的设置中看到磁盘、DRAM总量、以及CPU型号。
关于服务器插槽的信息,使用http://t.csdn.cn/Svm34提到的命令或者http://t.csdn.cn/XcKyi
补充:dmidecode命令主要是通过DMI获取主机的硬件信息,通常是在不打开计算机机箱的情况下使用该命令来查找硬件详细信息。其输出的信息包括BIOS、系统、主板、处理器、内存、缓存等等。
二、LRU缓存空间调整
页面会在active和inactice链表中来回移动,如果每次移动都进行操作,那就意味着要获取node节点的自旋锁,竞争非常大,因此引入LRU缓存。就是积累一定数量的页面后再操作。LRU缓存默认批处理页面数为15。新页面加入LRU链表主要通过lru_cache_add函数,当lru缓存满了之后,就通过__pagevec_lru_add去实际将页面放入对应lru链表。内核线程kswapd会周期性地把active list中符合条件的页面移到inactive list中,这项转移工作是由refill_inactive_zone()完成的。
src/include/linux/pagevec.h/ #define PAGEVEC_SIZE 15
当修改改了一个新的内核,需要去取个名字区别开时,有两处地方可以改名字。
在src文件夹里的Makefile文件如图2-5行组成了内核的命名

在.config文件里修改的CONFIG_LOCALVERSION内容会成为在Makefile文件里修改的名字的后缀,就是添加在那个名字后面

三、进程扫描时间间隔
https://cloud.tencent.com/developer/article/1725931 这篇讲解了内核时间管理相关的内容。
周期性事件是由系统的系统定时器驱动的,内核必须在硬件定时器的帮助下才能计算和管理时间。在i386平台上,目前采用的HZ值是1000。不同的体系结构其HZ值是不一样的,比如arm就采用100。如果在驱动中要使用系统的中断频率,直接使用HZ,而不要用100或1000.一个HZ被认为1s.
等待队列实际上就是一个进程链表,链表中包含了等待某个特定事件的所有进程。使用等待队列也可以实现长延迟。在延迟期间,当前进程在等待队列中睡眠。休眠也是基于等待队列实现的,wait_event系列函数,wake_up_interruptible这个是kswap线程的,和wait_event_interruptible一起用于休眠。
要想把进程加入等待队列,驱动首先要在模块中声明一个等待队列头,并将它初始化。在作者修改的代码中可以找到动态初始化:
wait_queue_head_t kpromoted_wait; //这句是添加到NUMA node结构体里的。
#ifdef CONFIG_MULTICLOCKinit_waitqueue_head(&pgdat->kpromoted_wait); //在page_alloc文件中
#endif
http://blog.chinaunix.net/uid-7332782-id-3217821.html 在这篇博客里提到:
prepare_to_wait()和finish_wait()并不是进程睡眠的地方,进程睡眠的地方是schedule()。prepare_to_wait()只是进行一些链表的操作,以确保自己在等待队列中。进程在确信自己已经在队列中后,再次检查条件,这里如果不检查,可能条件已经满足,直接去睡眠的话,可能再也没有人来唤醒它了。
https://blog.csdn.net/u013910383/article/details/121366819 schedule_timeout 函数分析将当前task调度出cpu,并根据传入的timeout决定何时重新调度。所以对进程扫描时间间隔的测试要修改的参数就是几倍HZ了。
四、与其他内核对比的工作负载测试(另一个内核的编译)
每次报错后重新开始内核编译都需要:
sudo make mrproper
sudo make clean
然后从sudo make xconfig这一步重来!
nimble的内核竟然在第一步报错:没有规则可制作目标scripts/Makefile.lib。去查看后确实对比multi-clock的内核编译文件,少了这一个,而且静态分层那个内核也少了。但是由于没有添加新的文件,只是在修改原有文件,因此搬过去用也没问题。
让我们看看这个文件是干啥的:如果说 Makefile.build 负责执行 make 的编译过程,而 Makefile.lib 则决定了哪些文件需要编译,哪些目录需要递归进入。http://cxd2014.github.io/2015/11/11/Linux-Makefile/ 一篇不错的解析
从之后的编译情况来看,Makefile.modbuiltin这个文件也是没有的……也要提前移过去。经过比较之后这四个文件都是需要移过去的。

之后就是参考readme来配置.config文件了。
Enable Enable Nimble Page Selection for Tiered Memory System to compile the MULTI-CLOCK kernel.(搜索nimble即可)
Following are the other required configurations need to be eanbled for MULTI-CLOCK:
allow for memory hot-addDevice memory (pmem, HMM, etc...) hotplug supportNVDIMM (Non-Volatile Memory Device) Support --->(搜索NVDIMM即可)NVDIMM DAX: Raw access to persistent memory
DAX: direct access to differentiated memory --->(搜索pmem即可)Device DAX: direct access mapping devicePMEM DAX: direct access to persistent memoryKMEM DAX: volatile-use of persistent memory
因为第1、2个选项没有搜索到,所以下面给出具体位置(但其实本来就是打勾的)


sudo gedit .config然后用Ctrl+F搜索CONFIG_SYSTEM_TRUSTED_KEYS,改掉,保存。
sudo make -j8
sudo make modules_install
sudo make install
总结
相关文章:
内核性能评估测试及具体修改操作步骤记录
步骤记录前言一、查看环境配置二、LRU缓存空间调整三、进程扫描时间间隔四、与其他内核对比的工作负载测试(另一个内核的编译)总结前言 记录的相关操作有:查看服务器硬件环境、LRU缓存大小修改、内核命名、内核编译以及进程执行周期的设置。…...
S7-200smart远程无线模拟量信号采集案例
本参考方案使用西门子PLCS7-200SMART 结合无线通讯终端DTD434MC和DTD433F实现 PLC对远端设备模拟量的远程无线输入输出查询控制。所使用到的设备:西门子S7-200smartPLC无线数据终端DTD434MC无线模拟量信号测控终端DTD433F所使用的协议:ModbusRTU协议方案…...
Blender Python材质处理入门
本文介绍在 Blender 中如何使用 Python API 获取材质及其属性。 推荐:用 NSDT场景设计器 快速搭建3D场景。 1、如何获取材质 方法1、 获取当前激活的材质 激活材质是当前在材质槽中选择的材料。 如果你选择一个面,则活动材料将更改为分配给选定面的材质…...
ChatGPT后劲很大,问题也是
ChatGPT亮相即封神,最初的访客是程序员、工程师、AI从业者、投资人,最后是无数懵懂又好奇的普通人:ChatGPT是什么?自己会被ChatGPT取代吗?看待ChatGPT的立场也是两个极端: 快乐,是因为ChatGPT太…...
世界那么大,你哪都别去了,来我带你了解CSS3 (二)
文章目录❤️🔥CSS文档流❤️🔥CSS浮动❤️🔥CSS定位❤️🔥CSS媒体查询❤️🔥CSS文档流 文档流是文档中可显示对象在排列时所占用的位置/空间。 例如:块元素自上而下摆放,内…...
2023年再不会Redis,就要被淘汰了
目录专栏导读一、同样是缓存,用map不行吗?二、Redis为什么是单线程的?三、Redis真的是单线程的吗?四、Redis优缺点1、优点2、缺点五、Redis常见业务场景六、Redis常见数据类型1、String2、List3、Hash4、Set5、Zset6、BitMap7、Bi…...
Java SPI机制了解与应用
1. 了解SPI机制 我们在平时学习和工作中总是会听到Java SPI机制,特别是使用第三方框架的时候,那么什么是SP机制呢?SPI 全称 Service Provider Interface,是 Java 提供的一套用来被第三方实现或者扩展的接口,它可以用来…...
vue实现输入框中输完后光标自动跳到下一个输入框中
前言 最近接到这么一个需求,做一个安全码的输入框,限制为6位数,但是每一个写入的值都是一个输入框,共计6个输入框,当前输入框写入值后,光标自动跳到下一个输入框中,删除当前输入框写入的值后再自…...
如何构建 C 语言编译环境?
C语言是一种通用的编程语言,它是由Dennis Ritchie于20世纪70年代初在贝尔实验室开发的。C语言的设计目标是提供一种结构化、高效、可移植的编程语言,以支持系统编程和应用程序开发。C语言广泛用于开发操作系统、网络设备、游戏、嵌入式系统、桌面应用程序…...
电子台账:模板制作之一——列过滤(水平过滤)
1 简介列过滤即水平过滤。一般情况下,企业数据源文件中有很多数据列,其中大部分数据列中的数据对电子台账来说是没有用的。列过滤就是确定企业数据文件的哪几列有用,以及有用的列分别对应到台账(模板)的哪一列。列过滤…...
【java】Java连接mysql数据库及mysql驱动jar包下载和使用
文章目录JDBCJDBC本质:JDBC作用:跟数据库建立连接发送 SQL 语句返回处理结果操作流程和具体的连接步骤如下:操作步骤:需要导入驱动jar包 mysql-connector-java-8.0.22.jar注册驱动获取数据库连接对象 Connection定义sql获取执行sq…...
Mysql八股文
Mysql八股文 数据库的三范式是什么 第一范式:列不可再分第二范式:行可以唯一区分,主键约束第三范式:表的非主属性不能依赖与 其他表的非主属性 外键约束且三大范式是一级一级依赖的,第二范式建立在第一范式上&#x…...
解析Android ANR问题
一、ANR介绍 ANR 由消息处理机制保证,Android 在系统层实现了一套精密的机制来发现 ANR,核心原理是消息调度和超时处理。ANR 机制主体实现在系统层,所有与 ANR 相关的消息,都会经过系统进程system_server调度,具体是ActivityManagerService服务,然后派发到应用进程完成对…...
ESP32设备驱动-MicroSD Card驱动
MicroSD Card驱动 1、SDCard介绍 SD卡是Secure Digital Card卡的简称,直译成汉语就是“安全数字卡”,是由日本松下公司、东芝公司和美国SANDISK公司共同开发研制的全新的存储卡产品。SD存储卡是一个完全开放的标准(系统),多用于MP3、数码摄像机、数码相机、电子图书、AV器…...
XC7K160T-1FBG484I、XC7A100T-2CSG324I FPGA可编程门阵列 PDF规格书
1、XC7K160T-1FBG484I说明:Kintex-7 FPGA有-3、-2、-1、-1L和-2L速度等级,其中-3具有最高的性能。-2L器件被筛选为较低的最大静态功率,并且可以在较低的核心电压下运行,以获得比-2器件更低的动态功率。-2L工业(I)温度器件仅在VCCI…...
基于HD-RK3568-IO评估板的读写速度测试报告
1. 测试对象HD-RK3568-IOT 底板基于HD-RK3568-CORE工业级核心板设计(双网口、双CAN、5路串口),接口丰富,适用于工业现场应用需求,亦方便用户评估核心板及CPU的性能。适用于工业自动化控制、人机界面、中小型医疗分析器…...
jconsole远程linux下的tomcat
修改Tomcat的配置 进去 Tomcat 安装目录下的 bin 目录,编辑 catalina.sh vi catalina.sh定位到 ----- Execute The Requested Command ----------------------------------------- vi 编辑模式下,点击 Esc,输入 / ,然后粘贴 -…...
Redis和MySQL如何保持数据一致性?
在高并发的场景下,大量的请求直接访问MySQL很容易造成性能问题。所以,我们都会用Redis来做数据的缓存,削减对数据库的请求。但是,MySQL和Redis是两种不同的数据库,如何保证不同数据库之间数据的一致性就非常关键了。1.…...
频谱分析仪的工作原理
频谱分析仪是一种专门用于测量电信号频谱特征的精密仪器。它采用了一种将信号转换成频谱的方法,使得用户可以直观地了解信号的频谱密度,并通过分析频率分布来进行信号分析。频谱分析仪的工作原理基于傅里叶变换。傅里叶变换是一种将时间域信号转换为频率…...
docker项目自动化部署脚本(认真排版、工作积累)
要解决什么问题? 把日益复杂化、工程化的开发环境,以及生产环境,变得简单,自动化部署。 达到什么效果? 环境处处一致,并且自动化部署,提升生产力,又快又好。 当您更换电脑、更换…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
关于easyexcel动态下拉选问题处理
前些日子突然碰到一个问题,说是客户的导入文件模版想支持部分导入内容的下拉选,于是我就找了easyexcel官网寻找解决方案,并没有找到合适的方案,没办法只能自己动手并分享出来,针对Java生成Excel下拉菜单时因选项过多导…...
【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅
目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...
工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...

