Linux下Fio和Blktrace模拟块设备的访问模式
原创文章,转载请注明: 转载自系统技术非业余研究
本文链接地址: Linux下Fio和Blktrace模拟块设备的访问模式
我们在做块设备调优的时候, 我们关心的是块设备是如何被访问的,也就是访问模式(比如说每次从什么地方读,每次读多少块,热点在哪里等),至于每次读写的什么数据我们并不关心. 这些模式当然可以自己去构造,但是如果能把真实应用的访问模式记录下来,并且在调优的时候能重放,我们就可以一遍又一遍的调试直到达到最佳的性能.
这个事情听起来貌似很麻烦,对吧? 幸运的是fio配合blktrace可以作这样的事情. 流程是blktrace负责录制真实应用对设备的访问模式, fio负责读入这些模式, 同时重放模拟对设备的访问.
背景资料:
blktrace使用可以参看这里
fio使用可以参看这里
在做演示前需要强调的是: 对设备的读写是模拟它的模式, 所以会破坏原来的数据,请谨慎, 我也是用虚拟的设备作演示的:
我们要演示的设备是 /dev/ram0, 设备大小128M:
Read more…
Post Footer automatically generated by wp-posturl plugin for wordpress.
再谈systemtap在ubuntu 10.10下的安装
原创文章,转载请注明: 转载自系统技术非业余研究
本文链接地址: 再谈systemtap在ubuntu 10.10下的安装
NinGoo的这篇文章写的很明白了:http://www.ningoo.net/html/2010/use_systemtap_on_ubuntu.html
原始出处:http://sourceware.org/systemtap/wiki/SystemtapOnUbuntu
安装的时候有几个地方需要注意:
在做步骤2的时候:
Read more…
Post Footer automatically generated by wp-posturl plugin for wordpress.
iotop统计linux下per进程的IO活动
原创文章,转载请注明: 转载自系统技术非业余研究
本文链接地址: iotop统计linux下per进程的IO活动
Linux下的IO统计工具如iostat, nmon等大多数是只能统计到per设备的读写情况, 如果你想知道每个进程是如何使用IO的就比较麻烦.
当然如果你会systemtap, 或者blktrace这些事情难不到你, 但是没专用工具总不是很舒服的. 幸运的是Linux 2.6.20内核以后提供了基于每个进程的IO记账功能,所以就有了类似iotop这样方便的工具.
官网地址: http://guichaz.free.fr/iotop/
Iotop is a Python program with a top like UI used to show of behalf of which process is the I/O going on.
在RHEL6或者ubuntu下使用就非常简单, 我简单的演示下ubuntu10下使用:
安装先:
$ apt-get install iotop
直接运行就好:
$iotop
它还支持累加方式显示IO情况,挺方便的,具体参考man iotop
玩的开心.
Post Footer automatically generated by wp-posturl plugin for wordpress.
Linux下新系统调用sync_file_range
原创文章,转载请注明: 转载自系统技术非业余研究
本文链接地址: Linux下新系统调用sync_file_range
我们在做数据库程序或者IO密集型的程序的时候,通常在更新的时候,比如说数据库程序,希望更新有一定的安全性,我们会在更新操作结束的时候调用fsync或者fdatasync来flush数据到持久设备去。而且通常是以页面为单位,16K一次或者4K一次。 安全性保证了,但是性能就有很大的损害。而且我们更新的时候,通常是更新文件的某一个页面,那么由于是更新覆盖操作,对文件系统的元数据来讲的话,无需变更,所以我们通常不大关心元数据是否写入。 当更新非常频繁的时候,我们时候能够有其他方法减少性能损失。sync_file_range同学出场了。
Linux下系统调用sync_file_range只在内核2.6.17及更高版本是可用的, 我们常用的RHEL 5U4是支持的。
这篇文章有他的介绍: http://lwn.net/Articles/178199/
也可以man sync_file_range下他的具体作用, 但是请注意,sync_file_range是不可移植的。
sync_file_range – sync a file segment with disk
sync_file_range() permits fine control when synchronising the open file referred to by the file descriptor fd with disk.
offset is the starting byte of the file range to be synchronised. nbytes specifies the length of the range to be synchronised, in bytes; if nbytes is zero, then all bytes from offset through to the end of file are synchronised. Synchronisation is in units of the system page size: offset is rounded down to a page boundary; (offset+nbytes-1) is rounded up to a page boundary.
sync_file_range可以让我们在做多个更新后,一次性的刷数据,这样大大提高IO的性能。 具体的实现在fs/sync.c里面,有兴趣的同学可以围观下。
著名的fio测试工具支持sync_file_range来做sync操作,我们在决定在我们的应用中使用该syscall之前不妨先fio测试一把。
祝大家玩的开心。
Post Footer automatically generated by wp-posturl plugin for wordpress.
itop更方便的了解Linux下中断情况
原创文章,转载请注明: 转载自系统技术非业余研究
本文链接地址: itop更方便的了解Linux下中断情况
乘着公司搬家的功夫,写点东西!
在作网络程序的时候, 经常需要了解interrupts和软中断的平衡情况, 需要知道每秒有多少中断发生,发生在哪个cpu上.
Linux下中断来源可以从 /proc/interrupts 中了解到:
$ cat /proc/interrupts CPU0 CPU1 0: 247701 250313 IO-APIC-edge timer 1: 501 567 IO-APIC-edge i8042 3: 1 1 IO-APIC-edge 8: 1 0 IO-APIC-edge rtc0 9: 256 240 IO-APIC-fasteoi acpi 12: 1134 1149 IO-APIC-edge i8042 16: 629 554 IO-APIC-fasteoi nvidia 17: 21313 20869 IO-APIC-fasteoi firewire_ohci, eth1 18: 0 0 IO-APIC-fasteoi mmc0 19: 51822 50079 IO-APIC-fasteoi ata_piix, ata_piix 20: 5605 5255 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb3, uhci_hcd:usb6 21: 0 0 IO-APIC-fasteoi uhci_hcd:usb4, uhci_hcd:usb7 22: 33 33 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb5, uhci_hcd:usb8 45: 337 247 PCI-MSI-edge eth0 46: 441 447 PCI-MSI-edge hda_intel NMI: 0 0 Non-maskable interrupts LOC: 169176 174899 Local timer interrupts SPU: 0 0 Spurious interrupts PMI: 0 0 Performance monitoring interrupts PND: 0 0 Performance pending work RES: 42289 40236 Rescheduling interrupts CAL: 154 1076 Function call interrupts TLB: 5838 5365 TLB shootdowns TRM: 0 0 Thermal event interrupts THR: 0 0 Threshold APIC interrupts MCE: 0 0 Machine check exceptions MCP: 5 5 Machine check polls ERR: 1 MIS: 0
软中断可以从/proc/softirqs 了解到:
$ cat /proc/softirqs CPU0 CPU1 HI: 0 0 TIMER: 160508 1170976 NET_TX: 2 2 NET_RX: 3303 3165 BLOCK: 50964 49198 BLOCK_IOPOLL: 0 0 TASKLET: 24743 24284 SCHED: 39483 41848 HRTIMER: 34 40 RCU: 92193 92592
总的中断次数可以从vmstat或者dstat了解到:
$ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 3 0 0 44160 327144 876600 0 0 894 584 458 2295 11 5 70 15
itop提供了更方便的方式了解,作者Hunz在源码里面写:
It’s quite simple but it does its job.
虽然简单,但是适用:
Ubutun下可以这样安装: apt-get install itop
$ itop INT NAME RATE MAX 0 [PIC-edge time] 628 Ints/s (max: 628) 1 [PIC-edge i804] 4 Ints/s (max: 4) 17 [PIC-fasteoi fire] 8 Ints/s (max: 22) 19 [PIC-fasteoi ata_] 1 Ints/s (max: 14) 20 [PIC-fasteoi ehci] 25 Ints/s (max: 25) 45 [MSI-edge eth0] 1 Ints/s (max: 1)
他会计算每秒每个中断源中断的次数,看起来比较方便.
祝玩的开心!
Post Footer automatically generated by wp-posturl plugin for wordpress.
blktrace 深度了解linux系统的IO运作
原创文章,转载请注明: 转载自系统技术非业余研究
本文链接地址: 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系统的利器)
原创文章,转载请注明: 转载自系统技术非业余研究
最近在调查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/
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.
Recent Comments