安庆

导航

2018年8月22日 #

用crash来分析一下proc的文件访问

摘要: 一般来说,用户通过fd的传入,调用open系统调用,来获取fd,然后read的时候,通过这个fd来查找对应的file* 所以file*是fget_light的返回值,下面通过一个crash来分析对应的file指针 我们继续取对应的f_op成员分析,这个是不同的文件系统有不同的函数,proc文件系统就 阅读全文

posted @ 2018-08-22 14:31 _备忘录 阅读(859) 评论(0) 推荐(0) 编辑

2018年8月16日 #

linux 2.6.32.220的一个crash记录

摘要: 有同事分析一个crash,我参与了分析,记录如下,供遇到相同crash的兄弟参考: 从堆栈看,用户通过sendto系统调用进入内核,在内核态调用 udp_send_skb 时出现异常,执行的代码为 :udp_send_skb+0x2e8/0x3d0 根据代码行,确定 checksum.h:64所在的 阅读全文

posted @ 2018-08-16 19:09 _备忘录 阅读(1090) 评论(0) 推荐(0) 编辑

2018年8月10日 #

linux 内核中一个全局变量引发的性能问题

摘要: 为了调试一个功能,在一个内核模块中,增加了一个全局变量,用来统计自有skb池的申请情况。 因为是临时增加,所以没有考虑性能,一开始只是一个fail的统计,数量不多,也不太考虑是否有计数丢失的情况,毕竟那个卖火车票的例子已经让很多人知道了并发导致的计数丢失。 因为只是一个简单统计,这样做无可厚非。 后 阅读全文

posted @ 2018-08-10 10:42 _备忘录 阅读(1572) 评论(0) 推荐(0) 编辑

2018年8月9日 #

RH_KABI_RESERVE的使用

摘要: 在struct mm_struct 或者 task_struct 之类的结构中,我们经常能看到 RH_KABI_RESERVE 这种成员,这种成员其实就是为了增加扩展性所留的一手。 这个可以类比tcp协议头,也有tcp_option,原理也是类似的,那么,怎么使用这些成员呢? 比如我想在task里面 阅读全文

posted @ 2018-08-09 17:32 _备忘录 阅读(1302) 评论(0) 推荐(0) 编辑

2018年8月7日 #

linux /dev/null 中有数据

摘要: 前段时间有个同事问我说,他 cat /dev/null有数据。这个颠覆大家认知的问题最终却是个小问题。 我们来看/dev/null的操作函数: static const struct file_operations null_fops = { .llseek = null_lseek, .read 阅读全文

posted @ 2018-08-07 19:57 _备忘录 阅读(289) 评论(0) 推荐(0) 编辑

2018年8月6日 #

一个seq_file的小问题

摘要: 在修改一个内核模块的时候,我们使用seq_file来打印我们的数据,结果非常出人意料。 static int flowinfo_seq_open(struct inode *inode, struct file *file) { return seq_open(file, &flowinfo_seq 阅读全文

posted @ 2018-08-06 17:32 _备忘录 阅读(389) 评论(0) 推荐(0) 编辑

2018年7月31日 #

一种比较low的linux的hung分析

摘要: 在调试一个功能的时候,发现了两种hung,以前认为的hung肯定是softlock导致的,后来才发现不一定要有lock这种结构,但是有类似于锁的功能的时候,也可能触发hung,为了避免大家走弯路,故记录之。 为什么这里会hung呢,因为repeat之后,又会执行到page_cache_get_spe 阅读全文

posted @ 2018-07-31 09:31 _备忘录 阅读(723) 评论(0) 推荐(0) 编辑

2018年7月26日 #

一小段测试atof的代码

摘要: 不管是否把注释的//放开,都能编译链接正常,把注释的//打开,atof的行为则正常,否则异常。 也就是说atof存在两个定义,一个正确实现,一个没有实现?咨询了一个做工具链的同事,他的结论是: 反汇编对比两个生成的代码,发现返回值的问题,正常的返回是float,异常的是返回0,也就是异常使用的是ea 阅读全文

posted @ 2018-07-26 14:15 _备忘录 阅读(187) 评论(0) 推荐(0) 编辑

2018年7月24日 #

处于ESTABLISHED 状态的socket 却没有进程信息

摘要: 接《一次docker中的nginx进程响应慢问题定位记录》 在排查这个问题的时候,我先使用netstat 去查看,看到底是内核协议栈的连接请求没给到进程,还是进程accept链路慢了,或者recv数据慢了,记录如下: 可以看到,curl发送的请求,内核协议栈是已经接受了,但是对应的链路有个小小的细节 阅读全文

posted @ 2018-07-24 20:41 _备忘录 阅读(955) 评论(0) 推荐(0) 编辑

一次docker中的nginx进程响应慢问题定位记录

摘要: 有个ft测试的环境,其中nginx使用docker发布的。测试用例是curl的时候,没有获得nginx的响应。 进入容器,看一下具体信息: 敲一下top命令,可以发现多个nginx的work进程的cpu很高。 bash-4.2# strace -p 1435bash: strace: command 阅读全文

posted @ 2018-07-24 18:37 _备忘录 阅读(1055) 评论(0) 推荐(0) 编辑