- 博客(12)
- 资源 (8)
- 收藏
- 关注
原创 IP数据包的输入与输出
IP层主要函数之间的调用关系如下图所示:上面的图主要是拷贝的《Linux内核源码剖析----TCP/IP实现上册》中的图11.3,原图中有部分错误,所以这里重新绘制了一下,并且去掉了一些冗余的部分。下面简述一下数据包传递的大致过程:一、IP数据包的输入ip_rcv()是网络层(IPv4,以下同)接收数据包的入口函数,链路层在接收到数据包后调用netif_receiv
2013-08-28 17:42:49 2118
原创 Linux中查看是否是固态硬盘(SSD)
最近在准备测试,需要看看哪些机器挂载的是ssd硬盘,Google了一圈看到了许多方法,但都云里雾里的,不知道怎么确定。ssd硬盘貌似使用的也是scsi接口,所以根据盘符的名称也是判断不出来的。最后群里eric大神告知lsscsi工具,试了一下,非常简单,显示的也很直接,分享一下。废话不多说,直接上图和结果,如下所示:[root@FWD_YF_009_110 ~]# lsscsi
2013-08-26 11:57:31 32066 1
原创 SystemTap----将SystemTap脚本编译成内核模块
当运行SystemTap脚本时,会根据脚本生成一个内核模块,然后插入到系统中执行后退出。这个过程总共分为5个阶段:parse, elaborate, translate, compile, run,对应的编号为1-5.stap命令的-p选项可以用来指定在哪个阶段停止,利用这个选项可以将脚本编译成内核模块。正常情况下,SystemTap脚本只能在部署了SystemTap执行环境(安装内核的开发包
2013-08-25 21:15:24 2934
原创 SystemTap----利用stap命令来查找内核函数定义
我们知道stap命令的-l(或-L)选项可以列出指定的某个probe描述中所有符合的probe点的列表,例如可以使用下面的命令,看到所有可以probe的函数:stap -l 'kernel.function("*")'今天在看书的时候,突然想到可以利用这个选项来找到一些内核函数的定义,例如sys_open()的定义。不管是source insight还是vim+ctag+csc
2013-08-24 19:57:13 7010
原创 SystemTap----thread_indent()函数分析
thread_indent是systemtap中一个非常有用的函数,声明如下:thread_indent:string(delta:long)它可以输出当前probe所处的可执行程序名称、线程id、函数执行的相对时间和执行的次数(通过空格的数量)信息,它的返回值就是一个字符串。参数delta是在每次调用时增加或移除的空白数量。在没有看thread_indent函
2013-08-24 15:15:41 3773
原创 SystemTap----常用变量、宏、函数和技巧
后面会持续更新,方便自己,方便大家.......一、宏1. kderef从指定的地址处读取指定大小的值格式为:kderef(size, address);其中address为要读取的地址值,size是要是读取的值的大小,返回值就是所读取的值。2.kread在嵌入的C代码中安全地读取指针值格式为:kread(&(address))
2013-08-18 18:39:21 7379
原创 SystemTap----嵌入C代码
SystemTap支持guru模式,通过-g选项来以这种模式执行SystemTap脚本。在guru模式下,嵌入的C代码在“%{"和“%}"标记之间,这些代码会原封不动地放到生成的模块中。嵌入的C代码不仅可以作为函数体,还可以出现在SystemTap描述中(例如函数等),示例如下:%{#include linux/in.h>#include linux/ip.h>%}
2013-08-18 10:07:27 3684
原创 SystemTap----初始化和遍历数组
SystemTap数组中的索引项可以是long或者string类型(systemtap的基本类型),访问数组项的方式和C语言类似,数组名[索引]。例如odds[x],odds是数组名,x是索引。下面的示例是以long为索引项,如下所示:global oddsprobe begin {printf("probe begin\n");for (i = 0; i
2013-08-17 22:45:04 3379
原创 netpoll浅析
netpoll只是一种框架和一些接口,只有依赖这个框架和接口实现的netpoll实例,netpoll才能发挥它的功能。类似于kernel中的vfs,vfs本身并不会去做具体的文件操作,只是为不同的文件系统提供了一个框架。netpoll不依赖于网络协议栈,因此在内核网络及I/O子系统尚未可用时,也可以发送或接收数据包。当然netpoll能够处理的数据包类型也很有限,只有UDP和ARP数据包,并且只能
2013-08-15 10:24:11 4833
原创 实战RPM包制作
在开发中经常会用到一些rpm包,但是一直没有自己手动制作过。今天在制作的时候意外地还解决了自己以前一直困惑的问题,就是怎么制作rpm debuginfo包,类似CentOS官网那样的debuginfo包。原来在制作rpm时如果没有特殊设置就会在RPMS目录下同时生成rpm包及对应的debuginfo包。 下面总结一下制作rpm包的流程以及遇到的一些问题的解决。 1、配置工作路径
2013-08-11 22:10:07 9519
原创 CentOS下利用sshpass不用手动输入密码远程执行命令
在测试的时候要同时操作多台机器,每次都要挨个去执行几乎相同的命令或者修改一些设置,这样很影响工作效率也很烦,所以就想写一个脚本,远程自动去做这些操作。远程执行命令很简单,但是不能在执行命令加上命令,还得手动输入,放在脚本里肯定不行。Google一番看到了这篇文章《ssh免输密码自动登录》,上面介绍了三种方法。我选择的是sshpass,简单方便,内网测试,也不用考虑安全的问题。不过CentOS发行版
2013-08-08 11:10:45 5615
原创 为什么服务器程序在部署时需要调度器?
随着互联网规模的不断扩大,服务器承载的压力也不断增加,对服务的质量要求也越来越高。最理想的情况是,使用低成本的服务器,承载更大的压力,并且7x24小时不中断服务。通常使用的方式就是部署集群,调度器+服务器+存储这样的架构。注意,集群不是单指的调度器,它是一个完整的系统,调度器只是集群的入口,起到负载均衡或内容调度的作用。还有一种方式是在服务器程序中加入集群的功能,使服务器节点之间可以通信,实现基于
2013-08-04 09:06:33 2218
Linux_C高级程序员指南.pdfLinux_C高级程序员指南.pdf
2011-04-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人