1. 程式人生 > >佇列深度 queue_depth

佇列深度 queue_depth

queue_depth 是AIX 一次可以傳送到磁碟裝置的命令的數量,把命令放在佇列中再傳送給磁碟可以提高I/O 效能。 

AIX 中定義的每個磁碟在ODM 庫中都有queue_depth屬性。這個屬性限制了AIX 可以傳送到裝置的最大命令的數量。通常這個值是由磁碟裝置廠商來確定的,並且數值做為裝置支援包的一部分存放在PdAt 庫中。 

如果在安裝儲存裝置的時候,AIX 沒有找到正確的ODM 定義,它將使用通用的磁碟ODM 定義。通用定義的queue_depth 是1,這意味著AIX 每次只能送一個命令到裝置中,並將降低I/O 效能。 

摘自IBM官方網站!

1、先用檢視所有磁碟每兩秒的IO

# iostat 2


System configuration: lcpu=8 drives=4 ent=2.00 paths=6 vdisks=1


tty:      tin         tout    avg-cpu: % user % sys % idle % iowait physc % entc
          0.0         33.5                9.7  13.2   70.9      6.1   0.5   24.0


Disks:        % tm_act     Kbps      tps    Kb_read   Kb_wrtn
hdisk3          77.0     27674.0     3734.5      55332        16
hdisk2           0.0       0.0       0.0          0         0
hdisk0           0.0       0.0       0.0          0         0
hdisk4           0.0       0.0       0.0          0         0


2、針對IO大的單獨監控
# iostat -D hdisk3 2


System configuration: lcpu=8 drives=4 paths=6 vdisks=1


hdisk3         xfer:  %tm_act      bps      tps      bread      bwrtn    
                        70.5     24.7M   4219.4       24.6M      59.4K
               read:      rps  avgserv  minserv  maxserv   timeouts      fails
                       4212.9      1.2      0.1     24.2           0          0
              write:      wps  avgserv  minserv  maxserv   timeouts      fails
                         6.5      0.7      0.4      1.4           0          0
              queue:  avgtime  mintime  maxtime  avgwqsz    avgsqsz     sqfull
                         0.0      0.0      0.2      0.0        5.0        90.0
--------------------------------------------------------------------------------
hdisk3         xfer:  %tm_act      bps      tps      bread      bwrtn    
                        73.5     33.7M   5223.0       33.7M      30.7K
               read:      rps  avgserv  minserv  maxserv   timeouts      fails
                       5220.5      1.3      0.1     24.2           0          0
              write:      wps  avgserv  minserv  maxserv   timeouts      fails
                         2.5      0.7      0.4      1.4           0          0
              queue:  avgtime  mintime  maxtime  avgwqsz    avgsqsz     sqfull
                         0.0      0.0      0.2      0.0        6.0        110.0
--------------------------------------------------------------------------------
發現sqfull佇列較多


3、檢視此盤的詳細引數
# lsattr -El hdisk3
PCM             PCM/friend/fcpother                                   Path Control Module              False
algorithm       fail_over                                             Algorithm                        True
clr_q           no                                                    Device CLEARS its Queue on error True
dist_err_pcnt   0                                                     Distributed Error Percentage     True
dist_tw_width   50                                                    Distributed Error Sample Time    True
hcheck_cmd      inquiry                                               Health Check Command             True
hcheck_interval 60                                                    Health Check Interval            True
hcheck_mode     nonactive                                             Health Check Mode                True
location                                                              Location Label                   True
lun_id          0x1000000000000                                       Logical Unit Number ID           False
max_transfer    0x40000                                               Maximum TRANSFER Size            True
node_name       0x50060160bb2051bb                                    FC Node Name                     False
pvid            00c5de15e20c62760000000000000000                      Physical volume identifier       False
q_err           yes                                                   Use QERR bit                     True
q_type          simple                                                Queuing TYPE                     True
queue_depth     8                                                    Queue DEPTH                      True
reassign_to     120                                                   REASSIGN time out value          True
reserve_policy  single_path                                           Reserve Policy                   True
rw_timeout      30                                                    READ/WRITE time out value        True
scsi_id         0x50f00                                               SCSI ID                          False
start_timeout   60                                                    START unit time out value        True
unique_id       3521360060160AC9128008E97701A4063E11106RAID 503DGCfcp Unique device identifier         False
ww_name         0x5006016d3b2051bb                                    FC World Wide Name               False


4、修改佇列深度(需要取消掛載才能修改)
# chdev -l hdisk3 -a queue_depth=64


 

********************************************************************

因為H3C的工程師調整了queue_depth的值,變化很大,所以找下資料看下相關的資訊,找到一篇很好的文章,轉下

queue_depth是指hdisk層面上命令佇列的深度
它針對的是hdisk,如果有多路徑軟體的話,它針對的就是多路徑的hdisk,如powerdisk,dlmfdrv。
那如何調整queue_depth?何時調整呢? 

首先我們來講講如何調整:
queue_depth的調整是針對hdisk層面的,對有多路徑的系統對應的是多路徑的盤,比如hdiskpower,dlmfdrv之類的。它是指hdisk層面的命令佇列的長度。
對不同的系統均有不同的預設值。在Aix上面,hds預設是2。
如何判斷是否需要調整queue_depth呢?
在aix5.3上面可以用iostat -D來檢視。
其中sqfull表示的是自系統啟動以來queue_depth超出的次數。

如何檢視queue_depth的值呢?
lsattr”>lsattr -El hdisk100
queue_depth 2 Queue DEPTH True
如何修改queue_depth的值呢?
chdev -l hdisk100 -a queue_depth=10
將queue_depth設定成多少呢?
這裡有個簡單的演算法。
假如說底層raid group 是4d+4d,即8塊盤。
現在15000rpm的fc盤的命令佇列為16。8塊盤總共的
列為16*8=128。
假如說這個raid group上面切了10個lun或ldev,則每個lun上面的queue_depth不要超過128/10=13。這個queue_depth不是越大越好。