我刚刚构建了一个小型 NAS/SAN 盒,并正在用它进行一些测试。配置如下:
- 2GB 内存
- 2 颗 Opteron 265
- 艾崴DK8N
- 5x500GB SATA 驱动器(1 个备用,其余镜像)= 1TB 可用空间
- Emulex LPC1000DC
- NexentaCore 3.0.2
我首先要测试的是 COMSTAR 在光纤通道上的性能。我创建了一个 700g zvol 并通过 COMSTAR 公开它。启用了写入缓存。我的 FC 启动器是一个装有 Q-Logic QLA2340 卡的 Windows 7 盒子。
一切都很好,除了写入速度。出于某种原因,我只看到~30MB/s,而使用 IOMeter 时,我的读取速度可以达到大约 90MB/s。经过一番搜索,我运行了一个zpool iostat
命令,看到了以下模式:
$ zpool iostat tank 1
tank 88.2G 840G 0 5.47K 0 43.4M
tank 88.2G 840G 0 16.1K 0 128M
tank 88.4G 840G 1 6.69K 8.93K 52.6M
tank 88.4G 840G 52 4.89K 110K 38.3M
tank 88.4G 840G 151 0 280K 0
tank 88.4G 840G 112 0 253K 0
tank 88.4G 840G 1 9.89K 16.0K 78.6M
tank 88.4G 840G 0 14.3K 0 113M
tank 88.6G 839G 150 2.99K 318K 20.2M
tank 88.6G 839G 15 0 45.0K 0
tank 88.6G 839G 3 0 17.8K 0
tank 88.6G 839G 0 0 0 0
tank 88.6G 839G 0 0 0 0
tank 88.6G 839G 0 11.3K 0 89.9M
tank 88.6G 839G 0 13.8K 0 110M
tank 88.8G 839G 90 7.91K 184K 61.0M
tank 88.9G 839G 105 91 220K 140K
tank 88.9G 839G 42 0 84.6K 0
tank 88.9G 839G 0 0 0 0
tank 88.9G 839G 0 6.52K 7.99K 51.8M
tank 88.9G 839G 0 15.6K 1011 124M
tank 88.9G 839G 91 4.30K 193K 31.9M
tank 89.1G 839G 1 9.48K 15.8K 74.7M
tank 89.1G 839G 41 0 99.9K 0
tank 89.1G 839G 166 0 374K 0
tank 89.1G 839G 87 0 162K 0
tank 89.1G 839G 0 0 7.92K 0
它似乎写了很多,然后就停了。
这里发生了什么?
答案1
对于 ZFS 来说,这很正常。它正在合并内存中的写入,然后同时将它们提交到磁盘。这是一个很棒的 wiki,介绍了它正在做什么以及如何对其进行调整:
http://www.solarisinternals.com/wiki/index.php/ZFS_Evil_Tuning_Guide