Archive

Archive for the ‘Linux’ Category

blktrace 深度了解linux系统的IO运作

February 22nd, 2011 23 comments

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

本文链接地址: blktrace 深度了解linux系统的IO运作

我们在Linux上总是要保存数据的,数据要么保存在文件系统里(如ext3),要么就在裸设备里面。我们在使用这些数据的时候都是通过文件这个抽象来访问的,操作系统会把我们需要的数据给我们,我们通常无需和块设备打交道。

从下图我们可以很清楚的看到:

我们会发现IO是个层次很深的子系统,有很复杂的数据流动线路。

至于操作系统如何去存储和获取这些数据对我们完全是黑盒子的,这通常不是问题。但是如果我们的IO很密集,我们就需要搞清楚IO具体是如何运作的,免的滥用IO和导致设计问题。

这时候你就需要blktrace这样的工具。

blktrace is a block layer IO tracing mechanism which provides detailed information about request queue operations up to user space.

它的作者Jens Axboe, 是内核IO模块的维护者,目前就职于FusionIO, 是个很nice的家伙,同时他还是著名IO评测工具fio的作者。

相关的文档:
users guide: http://pdfedit.petricek.net/bt/file_download.php?file_id=17&type=bug

HP的人写的指南: http://www.gelato.org/pdf/apr2006/gelato_ICE06apr_blktrace_brunelle_hp.pdf

CU上的小伙子写的: http://linux.chinaunix.net/bbs/viewthread.php?tid=1115851&extra=&ordertype=2

目前blktrace在大部分的Linux发行版都支持的,我们可以轻松的安装使用:
Read more…

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

ftrace和它的前端工具trace-cmd(深入了解Linux系统的利器)

February 21st, 2011 Comments off

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

本文链接地址: ftrace和它的前端工具trace-cmd(深入了解Linux系统的利器)

最近在调查lockless的ring_buffer的时候,发现了ftrace.

ftrace是 Linux 内核中提供的一种调试工具。使用 ftrace 可以对内核中发生的事情进行跟踪,这在调试 bug 或者分析内核时非常有用.

什么是ftrace: 请参考http://lwn.net/Articles/322666/

什么是trace-cmd – command line reader for ftrace: 请参考http://lwn.net/Articles/341902/

trace-cmd配置: 请参考 http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_MRG/1.3/html/Realtime_Tuning_Guide/sect-Realtime_Tuning_Guide-Realtime_Specific_Tuning-Latency_Tracing_Using_trace_cmd.html

ftrace在2.6.28-rc2以后的Linux内核都支持的, 当然包括RHEL6(2.6.32), 我粗粗的演示下ubuntu 10.10下的使用:
Read more…

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

Categories: Linux, 工具介绍 Tags: , ,

ioprofile调查应用IO情况的利器

January 16th, 2011 2 comments

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

本文链接地址: ioprofile调查应用IO情况的利器

我们在做IO密集型的应用程序的时候,比如MySQL数据库,通常系统的表现取决于workload的类型。 比如我们要调优,我们就必须非常清楚的知道数据的访问规律,收集到足够的数据,用来做调优的依据。

有很多工具可以收集系统层面的,设备层面的,进程层面的IO数据,但是没有一个现成的工具可以回答我们比如应用打开了多少文件,文件的读和写的比例是多少,调用了多少次sync, 每次的数据大小是多少,调用了多少次,每次用了多少时间, 是顺序操作还是随机操作,是那个线程发起的操作。

当然如果你对系统足够熟悉的话,你可以用systemtap来编写脚本获取这些数据,也不是什么难事。但是大部分的同学没有足够的耐心去做这个。

这时候Percona同样来救助了。他提供了一整套工具来协助定位MySQL服务器的问题。这套工具适合于大部分的IO服务器。

Aspersa is a collection of open-source system utilities primarily designed to ease the work of Percona consultants. This manual is the primary documentation for Aspersa tools. Please contribute your improvements.

项目地址: http://code.google.com/p/aspersa/
ioprofile的使用文档: http://aspersa.googlecode.com/svn/html/ioprofile.html

它依赖于strace和lsof来做统计,所以在运行的时候会对目标系统产生一定的性能影响,不过还好,你可以指定收集数据的时间。

现在我们来试验下效果:
Read more…

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

Categories: Linux, 工具介绍 Tags: , , , ,

洞悉Linux系统软硬件配置

January 6th, 2011 14 comments

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

本文链接地址: 洞悉Linux系统软硬件配置

我们在做服务器的时候,老大扔给你一台机器,要你在上面开发。通常服务器软件是非常依赖于系统的软硬件的,软件通常是要紧贴硬件的特性,如果我们不能了解机器的硬件,我们就无法高效的开发。

比如说想知道Linux的系统的版本,CPU有几个,内存多少大, 机器什么型号,Raid卡什么型号,硬盘有几个,文件系统是什么样子的,网卡什么型号,文件句柄设置什么的,用到虚拟化技术了吗,网络配置什么样的,目前资源使用是如何?

当然如果你足够有经验的话,这些问题难不倒你,但是你获取完全的这些信息是很麻烦的。

这时候Percona 来救助了。他提供了一整套工具来协助定位MySQL服务器的问题。这套工具适合于大部分的IO服务器。

Aspersa is a collection of open-source system utilities primarily designed to ease the work of Percona consultants. This manual is the primary documentation for Aspersa tools. Please contribute your improvements.

项目地址: http://code.google.com/p/aspersa/
summary的使用文档: http://aspersa.googlecode.com/svn/html/summary.html

我们来参观下效果:
Read more…

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

Categories: Linux, 工具介绍 Tags: , , ,

调查服务器响应时间的利器 tcprstat

December 6th, 2010 9 comments

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

本文链接地址: 调查服务器响应时间的利器 tcprstat

我们在做服务器程序的时候,经常要知道一个请求的响应时间,借以优化或者定位问题。 通常的做法是在代码里面加入日志计算时间,这个方法有问题,时间不准确。因为数据从网卡到应用程序,从应用到网卡的时间没有被计算在内。 而且这个时间随着系统的负载有很大的变化。
那同学说,我wireshark, tcpdump抓包人肉统计不行吗。 可以的,只不过我会很同情你,此举需要耐心且不具可持续性。 所以我们希望有个工具能够最少费力的做这个事情。

这时候来自percona的tcprstat来救助了! 这个工具原本开发用来调查mysqld的性能问题,所以不要奇怪它的默认端口是3306, 但是我们可以用这个工具来调查典型的request->response类型的服务器。

什么是tcprstat:
Read more…

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

Linux下pstack的实现

November 28th, 2010 11 comments

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

本文链接地址: Linux下pstack的实现

Linux下有时候我们需要知道一个进程在做什么,比如说程序不正常的时候,他到底在干吗?最直接的方法就是打印出他所有线程的调用栈,这样我们从栈再配合程序代码就知道程序在干吗了。
Linux下这个工具叫做pstack. 使用方法是

# pstack
Usage: pstack <process-id>

当然这个被调查的程序需要有符号信息。 比较雷人的是 这个程序竟然是个shell脚本,核心实现是gdb的 thread apply all bt, 我们可以观摩下他的实现,这个我们做类似的程序提供了一个很好的思路:
Read more…

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

Categories: Linux, 工具介绍, 源码分析 Tags: ,

Erlang内置数据库挑战7000WQPS

November 26th, 2010 3 comments

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

本文链接地址: Erlang内置数据库挑战7000WQPS

在EUC-2010上rickard做了个报告,详细的解读了R14B读写锁优化的有效性,并且给出了benchmark, 详见这里 http://www.erlang.org/~rickard/euc-2010/

优化的效果非常好,读写锁比NPTL内置的有好几倍的提升,我也来体验下。

我的测试是在Dell R815机器上测试的,以下是它的硬件配置.
获取的系统信息脚本这里下载。

# summary.sh
      Date | 2010-11-25 14:18:18 UTC (local TZ: CST +0800)
    Hostname | =i
      Uptime |  9:02,  7 users,  load average: 10.27, 15.74, 11.78
      System | Dell Inc.; PowerEdge R815; vNot Specified (<OUT OF SPEC>)
 Service Tag | 55SSW2X
     Release | Red Hat Enterprise Linux Server release 5.4 (Tikanga)
      Kernel | 2.6.18-164.el5
Architecture | CPU = 64-bit, OS = 64-bit
   Threading | NPTL 2.5
    Compiler | GNU CC version 4.1.2 20080704 (Red Hat 4.1.2-44).
     SELinux | Disabled
# Processor ##################################################
  Processors | physical = 4, cores = 48, virtual = 48, hyperthreading = no
      Speeds | 48x1900.026
      Models | 48xAMD Opteron(tm) Processor 6168
      Caches | 48x512 KB
# Memory #####################################################
       Total | 62.92G
        Free | 57.33G
        Used | physical = 5.60G, swap = 420.00k, virtual = 5.60G
     Buffers | 100.19M
      Caches | 186.92M
        Used | 5.20G
  Swappiness | vm.swappiness = 0
 DirtyPolicy | vm.dirty_ratio = 40, vm.dirty_background_ratio = 10
...

详细的请查看Dell R815机器配置

我的测试是这样的:
Read more…

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