以梦为马无处可栖
程序猿的一生
展开
-
内核常见问题汇总
常见Linux内核问题汇总,后期会不断更新原创 2025-04-29 15:29:31 · 20 阅读 · 0 评论 -
内存管理之匿名页面
匿名页面在刚分配的时候会加入到active LRU链表的头部,在活跃LRU链表移动一段时间后 ,会到达链表的尾部,shrink_active_list()会将该页加入到不活跃LRU链表中,然后shrink_inactive_list()会扫描不活跃链表,然后通过add_to_swap()为该页面分配交换区,再进过pageout()把该页面写到交换分区。匿名页面的建立是在缺页中断分配完成之后,此时已经建立了进程虚拟地址和物理地址之间的映射关系,用户进程访问虚拟地址就可以访问到匿名页面中的内容。原创 2025-01-14 19:24:17 · 80 阅读 · 0 评论 -
内存管理之页面回收
在LRU算法中新产生的页面被添加到链表的开头,当系统内存紧张时,LRU链表尾部的页面将会离开并被换出,当系统再需要这些页面的时候,会重新置于链表的开头,也是会存在一种情况,频繁被使用的页面,也会不可避免的会被换出。内存紧张时总是优先换出文件映射的文件缓存页面,而不是匿名页,因为大多数情况下,文件混存页面不需要被回写到磁盘,除非页面内容被修改了,也就是脏页,匿名页面总是要在写入交换分区之后,才能被换出。直接内存回收是同步回收,就是执行页面回收的进程就是应用进程本身,会阻塞调用者进程的执行。原创 2025-01-13 20:53:05 · 67 阅读 · 0 评论 -
Linux内存管理调试
1. 当pages free小于pages min,说明所有内存耗尽,此时说明内存压力过大,会开始触发同步回收,表现为系统卡死,分配内存被阻塞,开始尝试碎片整理、内存压缩,如果都不奏效,则开始执行 OOM Killer,直到pages free大于pages high。2. 当pages free在pages min和pages low之间,说明内存压力较大,kswapd0线程开始回收内存,直到pages free大于pages high。slab相关信息,包括总页面大小,可回收页面和不可回收页面。原创 2025-01-10 11:34:17 · 43 阅读 · 0 评论 -
xvisor调试记录
记录一次虚拟化方案xvisor启动调试案例原创 2024-12-10 20:10:36 · 208 阅读 · 0 评论 -
IMA/EVM开发和测试流程
评估的含义是在进程存取文件之前,内核先判断文件的完整性度量值和预先存入到文件的扩展属性“security.ima”中的值是否一致,如果一致则允许存取操作,不一致则拒绝。EVM 子系统将安全相关的扩展属性的值合在一起作为消息输入,将密钥“evm-key”作为密钥输入,算出当前的 HMAC 值,用这个值和之前存储在扩展属性 security.evm 中的值进行比较,确定文件的安全相关扩展属性的完整性是否被破坏。同样,EVM的扩展属性security.evm的值也有两种形式,一种是HMAC,另一种是数字签名。原创 2024-10-21 11:26:51 · 223 阅读 · 0 评论 -
ima-evm-util交叉编译
ima/evm调试中,需要集成evmctl工具,本文提供一种交叉编译方法原创 2024-09-29 16:34:56 · 157 阅读 · 0 评论 -
cgroup基本原理与使用
在cgroups v2中,虚拟文件系统通常挂载在`/sys/fs/cgroup/`,并且不同控制器的文件不再分散,而是统一到一个cgroup目录下。说明:控制该 cgroup 的内存换出到 swap 的倾向,值在 0 到 100 之间,数值越大表示更倾向于将内存换出到 swap。说明:设置该 cgroup 的内存软限制,允许 cgroup 在有剩余内存时使用更多的内存,但当系统内存紧张时会首先回收超出部分。说明:控制当进程迁移到一个新的 cgroup 时是否将其当前的内存使用量一起迁移。原创 2024-09-18 11:00:30 · 309 阅读 · 0 评论 -
sysbench下载与交叉编译
sysbench性能测试工具编译与调试原创 2024-09-09 20:20:17 · 1247 阅读 · 0 评论 -
Linux内核性能增强
内存压缩和调度增强是现代操作系统中的关键技术,它们直接影响系统的响应速度、吞吐量和资源利用效率。原创 2024-08-15 19:01:26 · 351 阅读 · 0 评论 -
zRAM和zswap
linux内核性能增强原创 2024-08-24 15:38:18 · 1029 阅读 · 0 评论 -
Linux中RT-Mutex实现
本文主要梳理优先级继承的基本原理,优先级继承主要是用来解决优先级反转,可以简单理解为一个进程在当前进程拥有的锁上阻塞时,会继承另一个进程的优先级。举个例子说明,进程A、B、C,其中A优先级最高,B次之,C最小,那么当 A 在 C 拥有的锁上阻塞时,C 将继承 A 的优先级。因此,如果 B 变为可运行状态,它将不会抢占 C,因为此时 C 具有 A 的高优先级。一旦 C 释放锁,它将失去继承的优先级,然后 A 可以继续使用 C 拥有的资源。原创 2024-07-31 16:58:12 · 1055 阅读 · 0 评论