Linux高速缓存使用率调查
浏览:2858次 出处信息
Linux的高速缓存pagecache对性能的影响至关重要,但是实际系统中我们的利用率如何呢,特别是具体到每个设备的利用情况。
从下图我们可以很清楚的看到:
我们知道IO请求由vfs发起,经过pagecache缓存,挡不住的就落实到io设备去,那么统计这个利用率就很简单。 我们只要知道挡不住的IO的比例就好了。
我写了个systemtap脚本来解决这个问题:
$ uname -r
2.6.18-164.el5
$ sudo rpm -i kernel-debuginfo-common-2.6.18-164.el5.x86_64.rpm
$ sudo rpm -i kernel-debuginfo-2.6.18-164.el5.x86_64.rpm
$ cat >pcmr.stp
global io_stat, blk_stat
global RD_CNT=2, WR_CNT=3
probe vfs.read.return {
if ($return>0 && devname!="N/A") {
io_stat[devname, 0] += $return
io_stat[devname, RD_CNT] ++;
}
}
probe ioblock.request {
blk_stat[devname, rw] += size
blk_stat[devname, rw+RD_CNT] ++;
}
probe vfs.write.return {
if ($return>0 && devname!="N/A") {
io_stat[devname, 1] += $return
io_stat[devname, WR_CNT] ++;
}
}
global _io,_blk
probe timer.ms(5000) {
foreach ([devname, action] in io_stat)
{
_io[action] += io_stat[devname, action];
_blk[action] += blk_stat[devname, action]
}
if (_io[0] + _io[1]) {
printf("\\n%-25s, %s%db/%d, %s%db/%d, %s%db/%d, %s%db/%d, %s%d%%\\n\\n",
ctime(gettimeofday_s()),
"IO Read:", _io[0], _io[RD_CNT],
"IO Write:", _io[1],_io[WR_CNT],
"Blk Read:", _blk[0], _blk[RD_CNT],
"Blk Write:", _blk[1],_blk[WR_CNT],
"PCMR:", (_blk[0]+_blk[1]) * 100 / (_io[0] + _io[1]))
delete _io
delete _blk
/* print header */
printf("%8s %2s %19s %19s %5s\\n",
"DEVICE","T", "IO", "BLK", "PCMR")
}
/* print top ten I/O */
foreach ([devname, action] in io_stat- limit 10)
if(action < RD_CNT)
printf("%8s %2s %11db/%6d %11db/%6d %4d%%\\n",
devname, action?"W":"R",
io_stat[devname, action],io_stat[devname, action+RD_CNT],
blk_stat[devname, action],blk_stat[devname, action+RD_CNT],
(blk_stat[devname, action] * 100) / io_stat[devname, action]
)
/* clear data */
delete io_stat
delete blk_stat
}
probe begin
{
println("::");
}
CTRL+D
我们来演示下:
$ sudo stap pcmr.stp
::
...
Wed Jun 1 09:16:16 2011 , IO Read:551320328b/124024, IO Write:0b/0, Blk Read:103219200b/17536, Blk Write:0b/0, PCMR:18%
DEVICE T IO BLK PCMR
fioa R 493284566b/119460 103219200b/ 17536 20%
sda2 R 41100816b/ 624 0b/ 0 0%
sda5 R 16934946b/ 3940 0b/ 0 0%
Wed Jun 1 09:16:21 2011 , IO Read:554808170b/123568, IO Write:2295b/9, Blk Read:101883904b/17296, Blk Write:135168b/33, PCMR:18%
DEVICE T IO BLK PCMR
fioa R 491003095b/118908 101543936b/ 17259 20%
sda3 R 42119596b/ 136 0b/ 0 0%
sda5 R 17730097b/ 4061 163840b/ 18 0%
sda1 R 2399374b/ 33 0b/ 0 0%
sda2 R 1543938b/ 424 176128b/ 19 11%
sda6 R 12070b/ 6 0b/ 0 0%
sda3 W 2295b/ 9 135168b/ 33 5889%
...
参数我们来解释下:
IO Read: vfs层面看到的IO读/次数
IO Write: vfs层面看到的IO写/次数
Blk Read: 块层面看到的IO读/次数
Blk Write: 块层面看到的IO写/次数
PCMR: pagecache miss rate =100 * blk / io, 由于文件读写是以page为单位,所以可能>100%
第一行是汇总统计,每隔5秒打印一次。
总结: PCMR越小越好,说明高速缓存利用率高。
建议继续学习:
- 浅析http协议、cookies和session机制、浏览器缓存 (阅读:16709)
- 分布式缓存系统 Memcached 入门 (阅读:15577)
- 强制刷新本地 DNS 缓存记录 (阅读:10122)
- php缓存与加速分析与汇总 (阅读:7287)
- Web应用的缓存设计模式 (阅读:7037)
- 浏览器缓存机制 (阅读:6604)
- 谈冷热数据 (阅读:6542)
- 使用memc-nginx和srcache-nginx构建高效透明的缓存机制 (阅读:6467)
- 缓存设计的一些思考 (阅读:6415)
- 系统架构的一些思考 (阅读:6331)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:curl快速实现网速测试
后一篇:SSH无密码登录 >>
文章信息
- 作者:Yu Feng 来源: Erlang非业余研究
- 标签: 缓存 高速缓存
- 发布时间:2011-06-01 23:38:35
建议继续学习
近3天十大热文
-
[899] WordPress插件开发 -- 在插件使用 -
[135] 解决 nginx 反向代理网页首尾出现神秘字 -
[56] 整理了一份招PHP高级工程师的面试题 -
[55] Innodb分表太多或者表分区太多,会导致内 -
[53] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] 全站换域名时利用nginx和javascri -
[52] CloudSMS:免费匿名的云短信 -
[52] 海量小文件存储 -
[52] 用 Jquery 模拟 select -
[51] 分享一个JQUERY颜色选择插件

