• 2024-09-29Bad or missing usercopy whitelist? Kernel memory overwrite attempt detected to SLUB object
    Linux内核有一个usercopywhitelist机制,只允许这里面的region来做usercopy。如果是用kmem_cache_create申请的kmem_cache申请的内存空间来copytouser或者copyfromuser,那么就会报这个错。这时要用kmem_cache_create_usercopy,来将申请的区域加入到usercopywhitelist中。/***
  • 2024-09-28xv6踩坑笔记
    lazyallocationtestpgbug:FAILED在系统调用函数(如sys_pipe)中,检测到致命错误(例如访问非法内存)时,不能直接用p->killed=1,而是要return-1。mmapscause0x000000000000000d(loadpagefault)sepc=0x0000000080007bb0stval=0x0000000000000000PANIC:kerneltrapgdb调试
  • 2024-07-06内存管理-15-slab、slob和slub分配器-初探
    一、slab简介1.简介首先,“slab”已成为一个通用名称,指的是使用对象缓存的内存分配策略,可实现内核对象的高效分配和释放。它最初由Sun工程师JeffBonwick记录下来,并在Solaris2.4内核中实现。Linux目前为其“slab”分配器提供了三种选择:Slab是最初的分配器,基于Bonwic
  • 2024-03-10cache操作函数 --20240310
    Baremetal不讨论多级cache的情况下,裸驱两种关于dcache的操作:flush_dcache_all();//将cache里面的东西刷入内存invalidate_dcache_all();//将数据缓存中的所有内容无效化(invalidate)。该指令一般用于确保缓存中的数据与主内存中的数据同步flush_dcache_all()函数通常在嵌入
  • 2024-02-14【XV6】 Copy-on-Write Fork for xv6
    代码:https://github.com/JasenChao/xv6-labs.gitCopy-on-WriteFork系统调用fork()会复制一个父进程的用户空间到子进程,一方面如果进程较大,复制需要很长的时间,另一方面复制的内存的大部分会被丢弃,造成浪费。题目要求实现写时复制COW来延迟fork的物理内存复制,子进程只创建了一个
  • 2024-02-14【XV6】 locks
    代码:https://github.com/JasenChao/xv6-labs.git内存分配器单个空闲内存列表可能引起多个CPU的频繁锁争用,题目要求设计内存分配器,让每个CPU维护一个空闲内存列表,不同CPU的分配和释放可以并行执行,但如果一个CPU可用列表为空,而其他CPU可用列表不为空,则这个CPU必须窃取其他CPU的空
  • 2024-02-06MIT 6.1810 Lab: Copy-on-Write Fork for xv6
    lab网址:https://pdos.csail.mit.edu/6.828/2022/labs/cow.htmlxv6Book:https://pdos.csail.mit.edu/6.828/2022/xv6/book-riscv-rev3.pdfImplementcopy-on-writefork这部分需要我们实现写时拷贝,题目给出解决方案为,当fork时,将父子进程的页表项都设置为只度,当发生写错误时,在处
  • 2023-10-08slab分配器
    前言slab分配器从伙伴系统获取页帧进行管理,对外为一些固定size的小内存块和特定内核数据结构提供缓存和内存分配服务。slab分配器为的是满足内核中小内存块的分配需求,毕竟伙伴系统的内存分配以page为单位实在太大了。使用slab带来以下几个好处:减少了伙伴系统的访问次数,小内存
  • 2023-09-23crash工具使用 —— 省去输入struct或者union关键字
    使用crash工具根据地址查看结构体的内容时,有时需要输入struct或者union,多少有些繁琐,crash提供了*命令,直接跟在结构体或者联合体的名字的前面即可。示例:带structcrash>structkmem_cache-xffff893751f60800structkmem_cache{cpu_slab=0x5fc135c77b40,flags=
  • 2023-05-26深度解析 slab 内存池回收内存以及销毁全流程
    在上篇文章《深入理解slabcache内存分配全链路实现》中,笔者详细地为大家介绍了slabcache进行内存分配的整个链路实现,本文我们就来到了slabcache最后的一部分内容了,当申请的内存使用完毕之后,下面就该释放内存了。在接下来的内容中,笔者为大家介绍一下内核是如何将内存
  • 2023-02-01k8s最佳实践:cgroup kmem的内存泄露问题
    k8s最佳实践:cgroupkmem的内存泄露问题1.前言这篇文章的全称应该叫:[在某些内核版本上,cgroup的kmemaccount特性有内存泄露问题],如果你遇到过pod的"cannotallocated
  • 2022-12-30操作系统实战45讲00025
    你好,我是LMOS。上节课我们学习了伙伴系统,了解了它是怎样管理物理内存页面的。那么你自然会想到这个问题:Linux系统中,比页更小的内存对象要怎样分配呢?带着这个问题,我们来一
  • 2022-12-29Linux内存管理-slub算法
    Slub简介Linux内核内存管理用了两个算法:伙伴算法(以页为单位的大内存)和slub算法(以字节为单位的小内存),其中slub系统运行在伙伴系统之上。slub进行内存分组管理,分
  • 2022-09-18kmem_cache的alias特性
    kmem_cache的alias特性,或者叫kmem_cache重名、kmem_cache别名。指在kmem_cache_create创建kmem_cache的时候,会尝试复用slub中已经存在的kmem_cache,复用的基本条件是创建siz
  • 2022-08-17k8s 集群节点 SLUB: Unable to allocate memory on node -1 cgroup 内存泄露问题
    1.原因cgroup的kmemaccount特性在3.x内核上有内存泄露问题,如果开启了kmemaccount特性会导致可分配内存越来越少,直到无法创建新pod或节点异常几点解释:kmema