Eric Kustarz's Weblog

e-street

All | FileBench | NFS | SETUP | ZFS

20080514 Wednesday May 14, 2008

 vq_max_pending

作为 I/O 调度的一部分,ZFS 有一个字段叫 'zfs_vdev_max_pending'。该字段限制了在每个页虚拟设备 (vdev) 中我们可以向下发送的 I/O 的最大数量。这并不是每个文件系统或每个池的最大量。当前默认值为 35。对于现在的硬盘驱动器来说,这个数字已经很不错了,但是,对于那些实际上由很多的硬盘组成却作为一个单独设备输出到 ZFS 的存储阵列来说,这显然不够。

如果您的 I/O 负荷很大,就像 Bill 在博客 "ZFS vs. The Benchmark" 中描述的那样,那么这个限制是一件好事。

但是,如果您已经创建了一个双设备镜像池,其中每个设备都是一个由 10 个磁盘组成存储阵列,那么您可能会认为 ZFS 没有为您提供足够的 I/O,下面的脚本将告诉您这是否属实:

#!/usr/sbin/dtrace -s

vdev_queue_io_to_issue:return
/arg1 != NULL/
{
        @c["issued I/O"] = count();
}

vdev_queue_io_to_issue:return
/arg1 == NULL/
{
        @c["didn't issue I/O"] = count();
}

vdev_queue_io_to_issue:entry
{
        @avgers["avg pending I/Os"] = avg(args[0]->vq_pending_tree.avl_numnodes);
        @lquant["quant pending I/Os"] = quantize(args[0]->vq_pending_tree.avl_numnodes);
        @c["total times tried to issue I/O"] = count();
}

vdev_queue_io_to_issue:entry
/args[0]->vq_pending_tree.avl_numnodes > 349/
{
        @avgers["avg pending I/Os > 349"] = avg(args[0]->vq_pending_tree.avl_numnodes);
        @quant["quant pending I/Os > 349"] = lquantize(args[0]->vq_pending_tree.avl_numnodes, 33, 1000, 1);
        @c["total times tried to issue I/O where > 349"] = count();
}

/* bail after 5 minutes */
tick-300sec
{
        exit(0);
} 

如果您发现 "avg pending I/Os" 达到了您的 vq_max_pending 限制,您可以适当提高这个限制。过去我们通常需要对每个虚拟设备进行一次这样的操作,但是现在我们有一个方法可以一次性改变对全部虚拟设备的限制。

heavy# mdb -kw
Loading modules: [ unix genunix specfs dtrace cpu.generic cpu_ms.AuthenticAMD.15 uppc pcplusmp scsi_vhci ufs ip hook neti sctp arp usba fctl nca lofs zfs random nfs cpc fcip logindmux ptm sppp ipc ]
> zfs_vdev_max_pending/E
zfs_vdev_max_pending:
zfs_vdev_max_pending:           35              
> zfs_vdev_max_pending/W 0t70
zfs_vdev_max_pending:           0x23            =       0x46
> zfs_vdev_max_pending/E
zfs_vdev_max_pending:
zfs_vdev_max_pending:           70              
>

上述方法将上限从 35 变为了 70。

由于很难让人们自己进行变量调整,我们最好将 'vq_max_pending' 设置为动态集合,请参见 6457709 vdev_knob values should be determined dynamically



(2008-05-14 22:51:52.0/2008-05-14 21:00:00.0) Permalink
Trackback: http://blogs.sun.com/erickustarz/en_US/entry/vq_max_pending1

Comments:

Post a Comment:

Comments are closed for this entry.

« October 2008
SunMonTueWedThuFriSat
   
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
       
Today


XML





Today's Page Hits: 435