随笔分类 - kernel 编程
摘要:问题:某次共享内存计算key值时,发现文件的inode在变化, 到底是什么原因导致的呢?最后发现是echo 3 > /proc/sys/vm/drop_caches导致的!! https://time.geekbang.org/column/article/278222?utm_source=rel
阅读全文
摘要:SLUB分配一个object的流程分析 上篇文章已经说了性能瓶颈显示为slub,所以这篇文章来看看 转载: 在上一节 我们清晰的知道了当调用kmem_cache_create之后系统会为我们分配一个名为slub_test的一个slab。这时候只是分配了kmem_cache,kmem_cache_cp
阅读全文
摘要:目前可以看出: 核心问题为:多线程fd close/open 以及 skb的slab_cache以及 slab_free fd close /open 所引发的的问题已经有相关解决办法;主要是slab_free这个? 内核的slab来自一种很简单的思想,即事先准备好一些会频繁分配,释放的数据结构。然
阅读全文
摘要:在内核中,顺序锁和读写锁比较相似,都是针对多读少写且快速处理的临界区的锁机制。 对于 rwlock 而言,rwlock的全称是"reader-writer spin lock",和普通的spinlock不同,它对"read"和"write"的操作进行了区分。如果当前没有writer,那么多个read
阅读全文
摘要:回顾历史 在计算机诞生之前,人们发明了 Teleprinter(电传打字机),通过长长的电线点对点连接,发送和接收打印的信息,用于远距离传输电报信息。 Teleprinter 也可以写成 teletypewriter 或 teletype。 后来人们将 Teleprinter 连接到早期的大型计算机
阅读全文
摘要:TTY 是 Teletype 或 Teletypewriter 的缩写,原来是指电传打字机,后来这种设备逐渐键盘和显示器取代。不管是电传打字机还是键盘显示器,都是作为计算机的终端设备存在的,所以 TTY 也泛指计算机的终端(terminal)设备。为了支持这些 TTY 设备,Linux 实现了一个叫
阅读全文
摘要:5. printk的格式字符 常见的数据类型对应的printk的格式字符如下: int %d or %x unsigned int %u, %x long %ld, %lx unsigned long %lu, %lx long long %lld, %llx unsigned long long
阅读全文
摘要:看以前的驱动hook代码,发现分配20Bytes的内存竟然使用vmalooc;这些人当时写代码太随意了,再次记录一下vmalloc kmalloc kmem_cache_alloc alloc_page 等的区别 Kmalloc: kmalloc是基于kmem_cache_alloc、 slab实现
阅读全文
摘要:查看代码可知,查找路由后校验src dst ip 不过! 同时通过ip route查看ip 命中的路由 可知 会发往lo接口 查看路由也能看到结果: ip rule add fwmark 1 lookup 100 ip route add local default dev lo table 100
阅读全文
摘要:转载来自:魅族内核组 Workqueue 是内核里面很重要的一个机制,特别是内核驱动,一般的小型任务 (work) 都不会自己起一个线程来处理,而是扔到 Workqueue 中处理。Workqueue 的主要工作就是用进程上下文来处理内核中大量的小任务。 所以 Workqueue 的主要设计思想:一
阅读全文
摘要:printk简介 printk是在内核中运行的向控制台输出显示的函数,Linux内核先分配一个静态的临时缓冲区log_buf,然后调用vscnprintf格式化显示字符串,并返回格式化之后字符串的长度,最后调用tty驱动初始化注册绑定好的console.write()实现向串口输出。 目前新版内核解
阅读全文
摘要:以前看互斥锁自旋锁实现的时候,看过RET_IP,只是了解到其为当前函数的返回地址;今天系统的看下这几个宏 __builtin_return_address(0)的含义是,得到当前函数返回地址,即此函数被别的函数调用返回时的地址。 __builtin_return_address(1)的含义是,得到当
阅读全文
摘要:执行 ./install/bin/staprun ./sigkill.ko 结果发现脚本执行命令刷屏了!! debug_bin]$ ./install/bin/staprun ./sigkill.ko sig[17] SIGCHLD was sent to sh (pid:15237) by exe
阅读全文
摘要:首先需要弄清楚 进程被干掉的过程是怎样的? 一般使用kill -9 pid 来杀死进程 , 那么进程是怎样收到signal以及处理signal呢? 那目前有哪些现成的工具可以使用探测signal呢? 参考tapset文档 #! /usr/bin/env stap # sigkill.stp # Co
阅读全文