当前位置: 首页 > news >正文

内核性能评估测试及具体修改操作步骤记录

步骤记录

  • 前言
  • 一、查看环境配置
  • 二、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-add
  • Device memory (pmem, HMM, etc...) hotplug support
  • NVDIMM (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 device
    • PMEM DAX: direct access to persistent memory
    • KMEM 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

总结

http://www.lryc.cn/news/31550.html

相关文章:

  • S7-200smart远程无线模拟量信号采集案例
  • Blender Python材质处理入门
  • ChatGPT后劲很大,问题也是
  • 世界那么大,你哪都别去了,来我带你了解CSS3 (二)
  • 2023年再不会Redis,就要被淘汰了
  • Java SPI机制了解与应用
  • vue实现输入框中输完后光标自动跳到下一个输入框中
  • 如何构建 C 语言编译环境?
  • 电子台账:模板制作之一——列过滤(水平过滤)
  • 【java】Java连接mysql数据库及mysql驱动jar包下载和使用
  • Mysql八股文
  • 解析Android ANR问题
  • ESP32设备驱动-MicroSD Card驱动
  • XC7K160T-1FBG484I、XC7A100T-2CSG324I FPGA可编程门阵列 PDF规格书
  • 基于HD-RK3568-IO评估板的读写速度测试报告
  • jconsole远程linux下的tomcat
  • Redis和MySQL如何保持数据一致性?
  • 频谱分析仪的工作原理
  • docker项目自动化部署脚本(认真排版、工作积累)
  • 【经验分享】使用了6年的实时操作系统,是时候梳理一下它的知识点了 | 文末赠书4本
  • 蓝桥杯C/C++程序设计 往届真题汇总(进阶篇)
  • yocto 将kernel添加到rootfs
  • 高通 Android10/12 4 6dof Camera+2RGBCamera异常处理经验总结
  • 项目实战典型案例17——环境混用来带的影响
  • Linux【进程理解】
  • 【华为OD机试2023】数组的中心位置 C++ Java Python
  • “大数据时代下的地理信息可视化:ECharts地图和数据面板实践“
  • MySQL数据库基础
  • 近自由电子近似
  • 【JavaWeb】从输入URL到展示出页面的过程