Archive

Archive for the ‘工具介绍’ Category

调研内核调用栈方便的工具 kmalloc-top

December 14th, 2011 1 comment

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: 调研内核调用栈方便的工具 kmalloc-top

我们在研究内核的时候,看了内核代码后,就想着某个函数被谁谁调用。 调用路径有很多条,有热门的,有偏门的,但从代码不大容易看出。 如果我们能和gdb那样在函数上设个断点,看下内核函数的调用栈就清楚了。 但是如何统计热门路线呢?用systemtap就可以,参看这里这里

但是用systemtap写统计的时候,用到统计功能的话,如果你的采样点非常多,超过systemtap规定的上线,systemtap会选择罢工,直接推出,很不爽。

kmalloc-top就是为了解决这个问题写的一个perl脚本,原本用来调查内核中kmalloc的使用情况的,在一个繁忙的内核中,kmallo每秒会被调用成千上万次,明显会超过处理的上限。 所以kmalloc-top的方法是stap部分只负责收集堆栈信息,收集一个就写到标准输出一个,然后由perl脚本来进一步分析统计。

脚本位于:/usr/local/share/doc/systemtap/examples/memory/kmalloc-top
Read more…

Post Footer automatically generated by wp-posturl plugin for wordpress.

Categories: Linux, 工具介绍 Tags: ,

Flashcache新添加驱逐空闲脏页参数

December 10th, 2011 1 comment

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: Flashcache新添加驱逐空闲脏页参数

我在之前的博文提过Flashcache的cache是以set为单位管理的,每个set默认2M。 当单个set里面的脏页数量超过dirty_thresh_pct的时候,就会启动背景工作队列来把超过设置的脏页回写到后备磁盘去。 这里有别的同学对flashcache设计文档的翻译.

参看dirty_thresh_pct的文档解释:

dev.flashcache..dirty_thresh_pct = 20
Flashcache will attempt to keep the dirty blocks in each set
under this %. A lower dirty threshold increases disk writes,
and reduces block overwrites, but increases the blocks
available for read caching.

Flashcache之所以这样做的目的是当它在处理用户IO请求需要cache块的时候,保证马上可以拿的出来。因为读写的时候,如果需要的cache块不能满足的话,flashcache选择简单的绕过cache机制,直接走uncache io, 同时启动页面回收,一下子收回超过设置部分的页面,对性能有很大的损失。
特别是顺序写的时候,写一圈,再回绕在写的场合,性能特别差,就是这个原因。

那么如何保持一定量的可用cache块就很重要。通常cache数据都有冷热点,而且和时间很大关系。flashcache对冷热的判断是透过LRU类似的算法来判断的,这个是基于使用频度的维度。但是缺乏时间维度的判断。

新版本的flashcache引入了fallow_delay参数来解决这个问题,如果一个脏页超过fallow_delay秒,默认15分钟,都没有重新被访问到,那么数据就会被回写。 回写后,作为候选页面可以被新的cache重新利用。
Read more…

Post Footer automatically generated by wp-posturl plugin for wordpress.

vmtouch-系统pagecache查看和操纵器

December 8th, 2011 4 comments

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: vmtouch-系统pagecache查看和操纵器

今天看到dbanote这篇博文介绍的技术清单,里面列到了很多有意思的技术。其中提到了一个小工具vmtouch,主页见这里

vmtouch – the Virtual Memory Toucher
Portable file system cache diagnostics and control
vmtouch is a tool for learning about and controlling the file system cache of unix and unix-like systems. It is BSD licensed so you can basically do whatever you want with it.

我之前写过不少之类的博文,但是基本都是用systemtap,工具也零碎,现在vmtouch比较系统的把功能整合在一起,源码写的虽然简单,但是用到了还是挺管用的。

顺手贴了下vmtouch的使用:
Read more…

Post Footer automatically generated by wp-posturl plugin for wordpress.

Categories: Linux, 工具介绍 Tags: ,

关于ramdisk

December 5th, 2011 Comments off

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: 关于ramdisk

ramdisk是Linux内核带的一个以内存为后备的虚拟设备,以块设备方式提供。 具体功能参见Documentation/ramdisk.txt,代码参见drivers/block/brd.c.

内核在启动的时候会预设几个ramdisk, 初始大小通常为128K的块设备,方便有需要的用户。

$ uname -r
2.6.32-131.0.15.el6.x86_64
$ ls /dev/ram0 -al
brw-rw---- 1 root disk 1, 0 2011-12-02 11:41 /dev/ram0
$ sudo blockdev --getsize /dev/ram0
131072

在实践中ramdisk有如下几个用途:
1. ramdisk的代码写的非常简洁,很容易让你明白块设备如何编写。
Read more…

Post Footer automatically generated by wp-posturl plugin for wordpress.

Categories: Linux, 工具介绍 Tags:

lscpu – CPU architecture information查看器

December 5th, 2011 Comments off

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: lscpu – CPU architecture information查看器

很多时候我们要了解CPU的型号,NUMA架构, L1,L2,L3 Cache大小等信息, 为服务器程序的编写和设置做决策。
Linux下除了 /proc/cpuinfo提供的信息以外,还有intel自己的工具: 参间 CPU拓扑结构的调查: http://blog.yufeng.info/archives/666

但是这些都不是很方便, 同样来自util-linux-ng包的lscpu很清晰的告诉你上面的信息. RHEL 6.1 已经预先安装好了。

man lscpu

DESCRIPTION
lscpu gathers CPU architecture information like number of CPUs, threads, cores, sockets, NUMA nodes, information about CPU caches, CPU family,
model, bogoMIPS, byte order and stepping from sysfs and /proc/cpuinfo, and prints it in human-readable format. It supports both online and
offline CPUs. Alternatively, it can print out in parsable format including how different caches are shared by different CPUs, which can also be
fed to other programs.

我们来演示下:

$ uname -r
2.6.32-131.0.15.el6.x86_64
$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                16
On-line CPU(s) list:   0-15
Thread(s) per core:    2
Core(s) per socket:    4
CPU socket(s):         2
NUMA node(s):          2
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 44
Stepping:              2
CPU MHz:               2394.164
BogoMIPS:              4787.83
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              12288K
NUMA node0 CPU(s):     0,2,4,6,8,10,12,14
NUMA node1 CPU(s):     1,3,5,7,9,11,13,15

numa什么的在那里分布很清晰,赞下!

祝玩得开心!

Post Footer automatically generated by wp-posturl plugin for wordpress.

Categories: Linux, 工具介绍 Tags: ,

Linux下方便的块设备查看工具lsblk

December 5th, 2011 3 comments

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: Linux下方便的块设备查看工具lsblk

之前在Linux下看有什么块设备,通常都用fdisk什么的或者直接ls /dev/ 人肉去看看, 很土,不方便。 前二天在江枫的网站上看到了介绍的lsblk,这玩意不错,推荐给大家。
这个工具属于util-linux-ng包,在RHEL 6.1上是安装好的啦,直接用就好。 ubuntu高版本下也有。

这个工具最大的特别是把所有的块设备列出,而且还能显示他们之间的依赖关系,演示下:

$ uname -r
2.6.32-131.0.15.el6.x86_64
$ lsblk
NAME   MAJ:MIN RM   SIZE RO MOUNTPOINT
sda      8:0    0   931G  0 
├─sda1   8:1    0   128M  0 /boot
├─sda2   8:2    0   3.9G  0 /
├─sda3   8:3    0     2G  0 [SWAP]
├─sda4   8:4    0     1K  0 
├─sda5   8:5    0   9.8G  0 /usr
├─sda6   8:6    0   9.8G  0 /var
├─sda7   8:7    0   3.9G  0 /opt
├─sda8   8:8    0   3.9G  0 /tmp
└─sda9   8:9    0 897.6G  0 /home
sdc      8:32   0 148.5G  0 
└─md0    9:0    0   594G  0 /u01
sdd      8:48   0 148.5G  0 
└─md0    9:0    0   594G  0 /u01
sde      8:64   0 148.5G  0 
└─md0    9:0    0   594G  0 /u01
sdb      8:16   0 148.5G  0 
└─md0    9:0    0   594G  0 /u01
sr0     11:0    1  1024M  0 

看出来md0依赖于sdb, sdc,sdd,sde, 而sda1依赖sda,很爽!

祝玩得开心!

Post Footer automatically generated by wp-posturl plugin for wordpress.

Categories: Linux, 工具介绍 Tags: ,

巧用Netcat方便网络程序开发

December 5th, 2011 4 comments

原创文章,转载请注明: 转载自系统技术非业余研究

本文链接地址: 巧用Netcat方便网络程序开发

首先介绍下NC,这个号称网络瑞士军刀的工具。

What is Netcat?

Netcat is a featured networking utility which reads and writes data across network connections, using the TCP/IP protocol.
It is designed to be a reliable “back-end” tool that can be used directly or easily driven by other programs and scripts. At the same time, it is a feature-rich network debugging and exploration tool, since it can create almost any kind of connection you would need and has several interesting built-in capabilities.

It provides access to the following main features:

* Outbound and inbound connections, TCP or UDP, to or from any ports.
* Featured tunneling mode which allows also special tunneling such as UDP to TCP, with the possibility of specifying all network parameters (source port/interface, listening port/interface, and the remote host allowed to connect to the tunnel.
* Built-in port-scanning capabilities, with randomizer.
* Advanced usage options, such as buffered send-mode (one line every N seconds), and hexdump (to stderr or to a specified file) of trasmitted and received data.
* Optional RFC854 telnet codes parser and responder.

项目主页:http://netcat.sourceforge.net/
Wiki: http://en.wikipedia.org/wiki/Netcat

再看下我们如何使用NC:
在RHEL服务器里面NC是标配,无需用户自己安装,手册也很全 man nc就好了。

之前在开发服务端程序的时候经常用nc来发报文,模拟客服端的行为, 省的自己写个客户端的麻烦,比如:

$ echo -n "GET / HTTP/1.0\r\n\r\n" | nc host.example.com 80
$ nc [-C] localhost 25 << EOF
HELO host.example.com
MAIL FROM: <user@host.example.com>
RCPT TO: <user2@host.example.com>
DATA
Body of email.
.
QUIT
EOF

这二天从鸣嵩那里学了招模拟服务端的行为, 在调查自己的客户端的时候很方便,来看下:

#模拟服务端
$ nc -l 1234
hello
#模拟客户端
$ nc 127.0.0.1 1234
hello

NC还有其他的功能,读者自己来挖掘!

祝玩得开心!

Post Footer automatically generated by wp-posturl plugin for wordpress.

Categories: Linux, 工具介绍 Tags: