冰块的博客

日拱一卒 不期而至

kvm gpa to hva

内存虚拟化之地址转换

映射关系 GVA -> GPA 映射关系 保存在 Guest OS 页表中。 GPA -> HVA 映射关系 保存在 kvm memslot 数组中。 GPA -> HPA 映射关系 保存在 kvm ept 页表中(或者影子页表)。 HVA -> HPA 映射关系 保存在 Host OS 页表中。 相关代码 qemu 进程会准备好可用虚拟内存空间,类似于物理机的内存...

using ebpf in embeded env

嵌入式环境使用ebpf

不借助其它bpf调试工具,开发人员需要自行编写bpf 内核态类C代码和用户态C代码, 内核态代码用于生成字节码,用户态代码负责load并attach字节码到系统 1 借助开源库 libbpf-bootstrap 生成示例demo 先生成libbpf.so,再编译demo程序,最后把应用程序 (比如kprobe)打包进rootfs中 git clone --recursive http...

malloc trigger oom

malloc分配大块内存触发oom

问题描述 一般遇到的OOM,那就是OOM,确实可用内存剩余很少,申请不到触发的。 有一次的OOM,从应用角度看明明还有好几百M,但就是分配失败了触发系统OOM异常。 root:/$ free -m total used free shared buffers cached Mem: 19...

stack memory corruption trigger spinlock lockup

栈内存被写坏触发了系统死锁

死锁异常 产品反馈设备死锁,异常信息如下: [530.486893] BUG: spinlock lockup suspected on CPU#0, prd/22535 [530.557833] Unable to handle kernel paging request at virtual address d280003552829470 [530.652719] pgd = ffff...

async serial port recv data delayed

异步串口收包延迟问题

背景 路由器产品反馈应用程序epoll_wait等着读串口驱动数据出现30ms左右延迟。 业务场景 转报机–(串口码流)–> 路由器 –(UDP/TCP/XXX)–> 路由器 –(串口码流)-> 远端转报机 其实串口驱动收到的码流数据可以在内核态直接从网口转出去,没必要经tty交由上层再打个转。 询问产品,反馈说是历史设计原因,搞得有点复杂,因交付时间原因当下改不动。...

kvm protect guest memory

kvm保护虚拟机内存

简介 per-page memory attributes已经合入主线内核,但是最新qemu还没有利用起来。 heki这个项目没有合入主线内核,但是用到了per-page memory attributes。 刚好可以用来熟悉、了解和调试虚拟化内存页保护。 heki Hypervisor-Enforced Kernel Integrity 基于kvm强化内核完整性 heki 利用 per...

pagecache data corrupted

pagecache页面数据被写坏

简介 产品反馈虚拟机环境,内存配置为8G,升级版本时提示数据校验不过,然后升级失败。 4G内存配置无该问题。host是鲲鹏服务器,kunpeng-920处理器。 同样的虚拟机配置使用其它ubuntu或者centos的系统镜像,虚拟机都没有出现该问题。 定位过程 尝试在虚机设备上升级失败后计算版本文件的MD5值,每次都会变化。 drop_cache之后计算版本文件md5值是正确的,后续计...

spinlock lockup suspected on cpu

一次喂cpld狗触发的死锁

简介 产品反馈系统配置ptp时打印死锁异常,并且每次锁的持有者都不相同。其中一次异常栈如下 这里的锁是cpu 0 的 rq->lock 队列锁。 [ 2269.552599] BUG: spinlock lockup suspected on CPU#1, swapper/1/0 [ 2269.624511] lock: 0xffffffe0fff28500, .magic: dea...

slub calculate order

创建kmem cache时计算page order

简介 slub kmem cache创建过程中需要根据object_size计算分配的page的阶数order。 分配的阶数对性能和其他系统组件会有重要影响。 PAGE_ALLOC_COSTLY_ORDER 是内存分配场合的一个概念, 如果申请的内存 order > PAGE_ALLOC_COSTLY_ORDER时就认为本次分配是昂贵的, order <= PAGE_ALL...

synchronous abort

内存硬件错误触发的系统异常

简介 在arm64架构设备上,遇到过内存硬件问题导致的系统异常,非内核代码问题。 据boot同事说和启动阶段配置内存涉及到内存时序的一个参数有关。 查阅arm cpu手册,根据异常错误码EC区分。 EC, bits [31:26] Exception Class. Indicates the reason for the exception that this register ...