POPPUR爱换

 找回密码
 注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

搜索
查看: 3436|回复: 8
打印 上一主题 下一主题

请教Dell服务器IO方面的问题

[复制链接]
跳转到指定楼层
1#
发表于 2011-12-29 14:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
相同的软件环境windows 2008 server 64x ,64位jdk,服务器是dell t610,4cpu 8gb内存, 3块 15k的SAS硬盘做的raid5,我的笔记本是4cpu,4g内存,5400转硬盘一块,我写了一个普通的文件读取程序,每次读50字节,从头读到尾,笔记本需要500毫秒,服务器需要1100毫秒,有高人能解释一下吗



情况是这样的,刚才可能没有说清楚,我现在遇到一个问题,部署的程序在测试的时候在笔记本上开发的,IO速度大概是100兆的文件,50字节一次从头读到尾需要500毫秒,而在服务器上面却需要一倍的时间。不知道是否java对Riad的支持有问题,服务器本地拷贝文件读写峰值分别为500MB/s 和 500MB/s

2#
发表于 2011-12-29 18:52 | 只看该作者
50字节   你开玩笑啊   这个东西你在测试延迟吗?    让阵列卡和南桥比延迟?
回复 支持 反对

使用道具 举报

3#
发表于 2011-12-29 21:36 | 只看该作者
程序改进下吧。
一般来说一次读入较大块区域比如20M进内存,然后在内存中解析,完了再读下一块。
更快的办法还有FileMapping,当然我不认为你java里会能支持到,即便这只是普通的win32 api
回复 支持 反对

使用道具 举报

4#
 楼主| 发表于 2012-1-5 09:50 | 只看该作者
回复2楼能解释下“让阵列卡和南桥比延迟”是啥意思吗,谢谢

回复3楼,程序读取的字节数必须按照两个长度字节来读取,比如 程度字节为00 FF,则读取256个字节,FileMapping也用过,但是没有效果,普通的FileInputStream BufferedInputStream FileChannel都用过,效果基本相同
回复 支持 反对

使用道具 举报

5#
发表于 2012-1-5 11:33 | 只看该作者
你每次多读些,做个缓存不行么?
回复 支持 反对

使用道具 举报

6#
发表于 2012-1-5 12:50 | 只看该作者
本帖最后由 stephenmaxmax 于 2012-1-5 12:54 编辑
baxiaopeng 发表于 2012-1-5 09:50
回复2楼能解释下“让阵列卡和南桥比延迟”是啥意思吗,谢谢

回复3楼,程序读取的字节数必须按照两个长度 ...

那你就整个100M全读进内存。
至少会快10倍不止


FileMapping不管用是不可能的,大概是java支持的不好。

举个例子,.net的线程池底层是由IOCP来实现,但是java不是。
很明显的java对这些native win32 api的东西支持的不好。

ps:本人是win32的程序员,不是搞.net的也不是搞java的,只能提供win32的思路
回复 支持 反对

使用道具 举报

7#
发表于 2012-1-5 13:41 | 只看该作者
确实。每次读取只读区50字节是太过分了点。一般一次最少也要读一个扇区吧?
回复 支持 反对

使用道具 举报

8#
发表于 2012-1-5 15:36 | 只看该作者
"IO速度大概是100兆的文件,50字节一次从头读到尾需要500毫秒"

100MB的文件從頭讀到尾要0.5秒,也就是說速度可達200MB/s,你確定你笔记本的5400转硬盘能有200MB/s的讀取速度?

回复 支持 反对

使用道具 举报

9#
发表于 2012-1-7 00:40 | 只看该作者
你设计的这种每次读取50Byte的程序主要考量IOPS了,尤其是超小I/O块的IOPS,RAID5会明显处于劣势。

要改变状态,需要把每次I/O大小提升到RAID5的stip size的数倍。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

广告投放或合作|网站地图|处罚通告|

GMT+8, 2025-8-18 12:47

Powered by Discuz! X3.4

© 2001-2017 POPPUR.

快速回复 返回顶部 返回列表