免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2364 | 回复: 6
打印 上一主题 下一主题

[求助]两个跟磁盘读写状态有关的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-06-19 11:18 |只看该作者 |倒序浏览
我的C程序中需要判断磁盘读写状态,以下是其中的2个问题。

问题一
在写文件时,一般会碰到2种类型缓冲。
1)文件系统调用的缓冲(buffer cache)
2)磁盘的高速缓冲(cache)

sync()将buffer cache写到磁盘还是磁盘的高速缓冲?
如果是写到磁盘的高速缓冲,有没有方法让它直接写道磁盘。

问题二
如何得知磁盘正在作写操作。

iostat命令可以知道若干秒内磁盘的读写状态。

情况1
$iostat -x 1 sda

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda              28.28     0.00   62.63    0.00  1341.41     0.00    21.42     0.53    8.42   5.23  32.73

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          31.68    0.00   10.89   57.43    0.00    0.00

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda              82.18  1160.40  159.41   37.62  5869.31  4213.86    51.18     2.81    9.49   4.90  96.53

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          28.00    0.00    8.00   19.00    0.00   45.00

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda              22.00   844.00   37.00   61.00  2832.00 12184.00   153.22     6.10   70.56   3.74  36.70


情况2(似乎不对,这段时间应该没有写操作,我测试了好几十次)
$ iostat -x sda
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          15.41    1.50    3.56    4.29    0.00   75.24

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               3.60    15.77   15.40    5.37   569.38   169.21    35.56     0.84   40.41   2.96   6.15

$ iostat -x sda
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          15.41    1.50    3.56    4.29    0.00   75.24

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               3.60    15.77   15.40    5.37   569.31   169.19    35.56     0.84   40.41   2.96   6.14

$ iostat -x sda
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          15.41    1.50    3.56    4.29    0.00   75.24

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               3.60    15.76   15.39    5.37   569.24   169.17    35.56     0.84   40.41   2.96   6.14


听说Solaris的DTrace在这方面很强,开源的systemtap似乎也不错。
有没有简单的方法判断磁盘是否在写操作.。kprobe?

谢谢!

[ 本帖最后由 westgarden 于 2008-6-19 13:17 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2008-06-19 11:23 |只看该作者
1,描述你的“原始需求”先。
2,iostat 或者其它任何统计类的命令如 top 等等,第一个结果通常都是不准的,因此你在“情况2"中 iostat 命令的用法不对。结果自然不对。
3,恭喜你!你已经开始着手解决一些只能定性不能定量的问题了,这一类问题的特点是,不要对结果报太大希望,因为很多时候都是无功而返。(尤其是不要理所当然地认为 BBS 上的人们有义务在若干分钟内回答你的问题)

[ 本帖最后由 flw 于 2008-6-19 12:34 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-06-19 11:43 |只看该作者
1)文件系统调用的缓冲(buffer cache)

请问楼主你这里的buffer cache是什么东西? 用户态的数据难道不是直接write到磁盘高速缓存?

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
4 [报告]
发表于 2008-06-19 12:33 |只看该作者
近距离同时接触flw flw2

论坛徽章:
0
5 [报告]
发表于 2008-06-19 13:08 |只看该作者

回复 #3 flw2 的帖子

论坛徽章:
0
6 [报告]
发表于 2008-06-19 13:23 |只看该作者

回复 #1 westgarden 的帖子

1. sync() 是直接写到磁盘.
2. 看一下源码.

论坛徽章:
0
7 [报告]
发表于 2008-06-19 13:25 |只看该作者
谢谢system888net !
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP