POPPUR爱换
标题: 请教Dell服务器IO方面的问题 [打印本页]
作者: baxiaopeng 时间: 2011-12-29 14:45
标题: 请教Dell服务器IO方面的问题
相同的软件环境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
作者: 太虚公 时间: 2011-12-29 18:52
50字节 你开玩笑啊 这个东西你在测试延迟吗? 让阵列卡和南桥比延迟?
作者: stephenmaxmax 时间: 2011-12-29 21:36
程序改进下吧。
一般来说一次读入较大块区域比如20M进内存,然后在内存中解析,完了再读下一块。
更快的办法还有FileMapping,当然我不认为你java里会能支持到,即便这只是普通的win32 api
作者: baxiaopeng 时间: 2012-1-5 09:50
回复2楼能解释下“让阵列卡和南桥比延迟”是啥意思吗,谢谢
回复3楼,程序读取的字节数必须按照两个长度字节来读取,比如 程度字节为00 FF,则读取256个字节,FileMapping也用过,但是没有效果,普通的FileInputStream BufferedInputStream FileChannel都用过,效果基本相同
作者: bugbear 时间: 2012-1-5 11:33
你每次多读些,做个缓存不行么?
作者: stephenmaxmax 时间: 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的思路
作者: huxuan 时间: 2012-1-5 13:41
确实。每次读取只读区50字节是太过分了点。一般一次最少也要读一个扇区吧?
作者: idolclub 时间: 2012-1-5 15:36
"IO速度大概是100兆的文件,50字节一次从头读到尾需要500毫秒"
100MB的文件從頭讀到尾要0.5秒,也就是說速度可達200MB/s,你確定你笔记本的5400转硬盘能有200MB/s的讀取速度?
作者: Kelisky 时间: 2012-1-7 00:40
你设计的这种每次读取50Byte的程序主要考量IOPS了,尤其是超小I/O块的IOPS,RAID5会明显处于劣势。
要改变状态,需要把每次I/O大小提升到RAID5的stip size的数倍。
| 欢迎光临 POPPUR爱换 (https://we.poppur.com/) |
Powered by Discuz! X3.4 |