Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11296114
  • 博文数量: 8065
  • 博客积分: 10002
  • 博客等级: 中将
  • 技术积分: 96708
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-16 17:06
文章分类

全部博文(8065)

文章存档

2008年(8065)

分类: 服务器与存储

2008-07-14 14:32:35

们测试存储性能的时候,经常说“主机配置足够高”之类的话,以表示主机端产生IO的速度足够快,完全可以喂饱存储设备。但是,提醒楼主注意主机端的“指令队列深度”,即所谓Queue Depth。在应用、系统和HBA中都有队列深度的设置,只是名字有些不一样而已(IOmeter里面叫Out Standing I/O)。这些队列深度的设置会直接影响主机产生的I/O是否真正喂饱存储的处理能力。而且越是高端产品,影响越明显。一些高端的控制器对I/O指令序列有优化能力,指令队列深,留给控制器的优化空间就大,性能也就会越好。尤其是随机I/O。”
IOmeter只是一个测试软件,outstanding的设置会影响到性能测试结果,但是真正决定性能结果的还是后端存储,比如用的SAS盘还是SATA盘?后端存储的硬盘并行IO多大?应用服务器的内存和CPU多大?还是就是测试的盘有多大?如果测试的磁盘很小,和内存差不多,那基本上是测试内存的性能而不是存储的性能。根据我的测试经验,至少被测试硬盘要大于内存的2倍测试的结果才有意义。
另外,linux上面的outstanding参数一般设置为4就能够跑出最大性能,windows上面的outstanding参数一般设置为32就足够了。
目前的Linux版本(2006版) ,一般来说outstanding确实设置了没有用,无法做到异步测试。即,尽管你设置outstanding为大于1的数,但其实还是和设置为1的效果是一样的。
主要原因有两个,一个是作者在这个版本上,默认使用了O_DIRECT选项,这个选项主要对文件系统的测试有作用,意思就是绕过文件系统的缓存,直接去测试磁盘设备,这样比较真实。但一般测试的是RAW设备(即在挂上来的卷并不格式成文件系统),而这个O_DIRECT和outstanding设置为大于1的数字有冲突,导致大于1并不会起作用。
另一个原因是Linux下的异步操作作者调用的是GLIBC的异步读写函数,而这两个读写函数并不完全是真正的异步读写,它是GLibc模拟出来的,当调用它时,它会在用户空间开一个线程,由这个线程进行同步读写操作。而现在在Linux的2.6内核的版本上已经有了内核级别的异步读写操作,但作者还没有完成这个补丁。
关于这两点,iometer的作者在mail-list上面都已经指出来了。
因此,如果在Linux操作系统上进行测试,有一个办法就是增加dynamo的个数,但这种方法必然会涉及到进程间切换,会影响测试结果。
阅读(3100) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~