免费注册 查看新帖 |

Chinaunix

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

Linux系统里,磁盘缓冲区的大小有限制吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-14 11:03 |只看该作者 |倒序浏览
比如我有2G的内存,系统当前使用了20M内存,然后对一个大小为1G的文件进行频繁的读写操作,并且假设此时系统没有其他的操作,
那么磁盘缓冲区会缓冲这个文件的所有磁盘块吗?
如果是的话,此时的文件读写速度是不是就近似于读写内存的速度了?

论坛徽章:
0
2 [报告]
发表于 2009-06-14 16:16 |只看该作者
原帖由 almeydifer 于 2009-6-14 11:03 发表
比如我有2G的内存,系统当前使用了20M内存,然后对一个大小为1G的文件进行频繁的读写操作,并且假设此时系统没有其他的操作,
那么磁盘缓冲区会缓冲这个文件的所有磁盘块吗?
如果是的话,此时的文件读写速度 ...

应该是可以的,我机器4g内存,做cache的有超过2g。
另外,可以考虑mmap,直接映射的进程的地址空间。

论坛徽章:
0
3 [报告]
发表于 2009-06-14 18:15 |只看该作者
我现在在用IOZONE测试硬盘的读写速度,
配置是2G内存,7200RPM的硬盘,纯粹的硬盘的读写速度大约是70MB/s,使用4G大小的文件测试的,
问题是:
随着文件的大小的增加,硬盘读的速度处于下降趋势,这个好像大家直觉上都是正常的,
但是这个硬盘的读速度随着测试文件大小的增加而下降,到底是因为:
1)内存用于磁盘块缓冲的数目是有限的造成的,测试文件一部分处于内存中,一部分在硬盘上?
2)还是文件系统一次读的块的文件数据有限造成的?
3)还是两者都有呢?

论坛徽章:
0
4 [报告]
发表于 2009-06-14 18:27 |只看该作者

这是我测试的结果,块大小=4KB,
可以看到,当文件大小小于2G时(测试机器也就是2G的内存),大约维持1G左右的读速度,比起纯粹的内存读写速度要慢很多,这是因为文件系统的读路径上面的开销造成的吗?
当文件大小=2G时,速度急转直下,但是仍然高于纯粹的硬盘读速度,此时的测试数据约100MB左右,当文件为4G时,文件系统的读速度为纯粹的硬盘读速度了,也就是说此时磁盘缓冲块没起啥作用了。

[ 本帖最后由 almeydifer 于 2009-6-14 19:22 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2009-06-14 18:48 |只看该作者
我觉得hd主要是是测试了文件系统的性能,并不是测试硬盘的读写速度吧。
得看软件是怎么设计的了。要是纯粹测试硬盘的速度,应该不用操作系统,直接读写才行。

这个我觉得跟缓存关系比较大。有详细清楚文件系统的吗?

论坛徽章:
0
6 [报告]
发表于 2009-06-14 19:28 |只看该作者
[root@domain0 ~]# df -lh
Filesystem            Size  Used   Avail     Use%          Mounted on
/dev/sda10          95G   21G    70G          23%            /
tmpfs                 944M     0      944M          0%          /dev/shm


[root@domain0 ~]# fdisk -l

Disk /dev/sda: 500.1 GB, 500107862016 bytes
255 heads, 63 sectors/track, 60801 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x427d600f

   Device Boot      Start         End      Blocks                Id                      System
/dev/sda1   *           1        1913    15366141             7                  HPFS/NTFS
/dev/sda2            1914       60801   473017860         f             W95 Ext'd (LBA)
/dev/sda5            1914        4463    20482843+        7                HPFS/NTFS
/dev/sda6            4464       17211   102398278+      7             HPFS/NTFS
/dev/sda7           17212       33784   133122591       7             HPFS/NTFS
/dev/sda8           33785       37608    30716248+     7             HPFS/NTFS
/dev/sda9           37609       43982    51199123+     7             HPFS/NTFS
/dev/sda10          43983       56730   102398278+    83                Linux



[root@domain0 ~]# fdisk -l /dev/sda10

Disk /dev/sda10: 104.8 GB, 104855837184 bytes
255 heads, 63 sectors/track, 12747 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000

Disk /dev/sda10 doesn't contain a valid partition table


[root@domain0 ~]# tune2fs -l /dev/sda10
tune2fs 1.40.2 (12-Jul-2007)
Filesystem volume name:   /
Last mounted on:          <not available>
Filesystem UUID:          c7857f4c-6ca3-4d64-b55f-a7835c0b3ac9
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_file
Filesystem flags:         signed directory hash
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              25624576
Block count:              25599569
Reserved block count:     1279978
Free blocks:              19453887
Free inodes:              25409260
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      1017
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         32768
Inode blocks per group:   1024
Filesystem created:       Wed May 13 22:41:26 2009
Last mount time:          Sun Jun 14 15:41:40 2009
Last write time:          Sun Jun 14 15:41:40 2009
Mount count:              84
Maximum mount count:      -1
Last checked:             Wed May 13 22:41:26 2009
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:                  128
Journal inode:            8
Default directory hash:   tea
Directory Hash Seed:      6a076a22-281a-48ec-b8c1-d08a1f614712
Journal backup:           inode blocks

[ 本帖最后由 almeydifer 于 2009-6-14 20:26 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP