|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
vim除非你打算真正的学好linux,或者说打算长久时间学习他,而且肯花大量时间vim,否则,最好别碰
作为体系办理员和VPS服务商,常常会碰着服务器大概VPS磁盘IO忙碌的时分,VPSee一般城市用一些工具来检测,个中一个经常使用的工具就是本人写的iotop剧本,能够很便利看到哪一个历程在频仍IO.上周五收到一名网友的邮件和留言,问到这篇文章:怎样检察历程IO读写情形?里的WRITE为何会呈现是0的情形,这是个好成绩,VPSee在这里好好注释一下。起首看看我们怎样才干及时监测分歧历程的IO举动情况。
block_dump
Linux内核里供应了一个block_dump参数用来把block读写(WRITE/READ)情况dump到日记里,如许能够经由过程dmesg命令来检察,详细操纵步骤是:
#sysctlvm.block_dump=1
or
#echo1>/proc/sys/vm/block_dump
然后就能够经由过程dmesg就能够察看到各个历程IO举动的情况了:
#dmesg-c
kjournald(542):WRITEblock222528ondm-0
kjournald(542):WRITEblock222552ondm-0
bash(18498):dirtiedinode5892488(ld-linux-x86-64.so.2)ondm-0
bash(18498):dirtiedinode5892482(ld-2.5.so)ondm-0
dmesg(18498):dirtiedinode11262038(ld.so.cache)ondm-0
dmesg(18498):dirtiedinode5892496(libc.so.6)ondm-0
dmesg(18498):dirtiedinode5892489(libc-2.5.so)ondm-0
成绩
一名仔细的网友提到如许一个成绩:为何会有WRITEblock0的情形呈现呢?VPSee跟踪了一段工夫,发明的确有WRITE0的情形呈现,好比:
#dmesg-c
...
pdflush(23123):WRITEblock0onsdb1
pdflush(23123):WRITEblock16onsdb1
pdflush(23123):WRITEblock104onsdb1
pdflush(23123):WRITEblock40884480onsdb1
...
谜底
本来我们把WRITEblock0,WRITEblock16,WRITEblock104这内里包括的数字了解错了,这些数字不是代表写了几blocks,是代表写到哪一个block,为了寻觅原形,VPSee追到Linux2.6.18内核代码里,在ll_rw_blk.c里找到了谜底:
$vilinux-2.6.18/block/ll_rw_blk.c
voidsubmit_bio(intrw,structbio*bio)
{
intcount=bio_sectors(bio);
BIO_BUG_ON(!bio->bi_size);
BIO_BUG_ON(!bio->bi_io_vec);
bio->bi_rw|=rw;
if(rw&WRITE)
count_vm_events(PGPGOUT,count);
else
count_vm_events(PGPGIN,count);
if(unlikely(block_dump)){
charb[BDEVNAME_SIZE];
printk(KERN_DEBUG"%s(%d):%sblock%Luon%s
",
current->comm,current->pid,
(rw&WRITE)?"WRITE":"READ",
(unsignedlonglong)bio->bi_sector,
bdevname(bio->bi_bdev,b));
}
generic_make_request(bio);
}
很分明从下面代码能够看出WRITEblock0onsdb1,这里的0是bio->bi_sector,是写到哪一个sector,不是WRITE了几blocks的意义。另有,假如block设备被分红多个区的话,这个bi_sector(sectornumber)是从这个分区入手下手计数,好比block0onsdb1就是sdb1分区上的第0个sector入手下手。
</p>
对于开发环境的选择尽量要轻量级和高度可定制,航空母舰级别的工具往往会让你迷惑不解; |
|