Managing Fibre Channel initiator requests
Why you need to manage initiator requests
Each physical port on the target HBA in the storage system has a fixed number of command blocks for incoming initiator requests. When initiators send large numbers of requests, they can monopolize the command blocks and prevent other initiators from accessing the command blocks at that port.
With an igroup throttle, you can perform the following tasks:
- Limit the number of concurrent I/O requests an initiator can send to the storage system.
- Prevent initiators from flooding a port and preventing other initiators from accessing a LUN.
- Ensure that specific initiators have guaranteed access to the queue resources.
How Data ONTAP manages initiator requests
When you use igroup throttles, Data ONTAP calculates the total amount of command blocks available and allocates the appropriate number to reserve for an igroup, based on the percentage you specify when you create a throttle for that igroup. Data ONTAP does not allow you to reserve more than 99 percent of all the resources. The remaining command blocks are always unreserved and are available for use by igroups without throttles.
How to manage initiator requests
You use igroup throttles to specify what percentage of the queue resources they can reserve for their use. For example, if you set an igroup's throttle to be 20 percent, 20 percent of the queue resources available at the storage system's ports are reserved for the initiators in that igroup. The remaining 80 percent of the queue resources are unreserved. In another example, if you have four hosts and they are in separate igroups, you might set the igroup throttle of the most critical host at 30 percent, the least critical at 10 percent, and the remaining two at 20 percent, leaving 20 percent of the resources unreserved.
How to use igroup throttles
When you create igroup throttles, you can use them to ensure that critical initiators are guaranteed access to the queue resources and that less-critical initiators are not flooding the queue resources. You can perform the following tasks:
Creating up an igroup throttle
To create an igroup throttle, complete the following step.
Step
|
Action
|
|
1
|
Enter the following command:
igroup set igroup_name throttle_reserve percentage
Example
igroup set aix-igroup1 throttle_reserve 20
Result
The igroup throttle is created for aix-igroup1, and it persists through reboots.
|
Destroying an igroup throttle
To destroy an igroup throttle, complete the following step.
Step
|
Action
|
|
1
|
Enter the following command:
igroup set igroup_name throttle_reserve 0
|
Defining whether an igroup can borrow resources
To define whether an igroup can borrow queue resources from the unreserved pool, complete the following step with the appropriate option (yes or no). The default when you create an igroup throttle is no.
Step
|
Action
|
|
1
|
Enter the following command:
igroup set igroup_name throttle_borrow {yes | no}
Example
igroup set aix-igroup1 throttle_borrow yes
Result
When you set the throttle_borrow setting to yes, the percentage of queue resources used by the initiators in the igroup might be exceeded if resources are available.
|
Displaying throttle information
To display information about the throttles assigned to igroups, complete the following step.
Step
|
Action
|
|
1
|
Enter the following command:
igroup show -t
Sample output
name reserved exceeds borrows
aix-igroup1 20% 0 N/A
aix-igroup2 10% 0 0
Explanation of output
The exceeds column displays the number of times the initiator sends more requests than the throttle allows. The borrows column displays the number of times the throttle is exceeded and the storage system uses queue resources from the unreserved pool. In the borrows column, "N/A" indicates that the igroup throttle_borrow option is set to no.
|
Displaying igroup throttle usage
To display real-time information about how many command blocks the initiator in the igroup is using and the number of command blocks reserved for the igroup on the specified port, complete the following step.
Step
|
Action
|
|
1
|
Enter the following command:
igroup show -t -i interval -c count [igroup|-a]
-t displays information on igroup throttles.
-i interval displays statistics for the throttles over an interval in seconds.
-c count determines how many intervals are shown.
igroup is the name of a specific group for which you want to show statistics.
-a displays statistics for all igroups, including idle igroups.
Example
igroup show -t -i 1
Result
The following is a sample display:
name reserved 4a 4b 5a 5b
igroup1 20% 45/98 0/98 0/98 0/98
iqroup2 10% 0/49 0/49 17/49 0/49
unreserved 87/344 0/344 112/344 0/344
The first number under the port name indicates the number of command blocks the initiator is using. The second number under the port name indicates the number of command blocks reserved for the igroup on that port.
In this example, the display indicates that igroup1 is using 45 of the 98 reserved command blocks on adapter 4a, and igroup2 is using 17 of the 49 reserved command blocks on adapter 5a.
Igroups without throttles are counted as unreserved.
|
Displaying LUN statistics on exceeding throttles
To display statistics about I/O requests for LUNs that exceed the igroup throttle, complete the following steps.
Step
|
Action
|
|
1
|
Enter the following command:
lun stats -o -i time_in_seconds
-i time_in_seconds is the interval over which performance statistics are reported. For example, -i 1 reports statistics each second.
-o displays additional statistics, including the number of QFULL messages.
Example
lun stats -o -i 1 /vol/vol1/lun2
Result
The output displays performance statistics, including the QFULL column. This column indicates the number of initiator requests that exceeded the number allowed by the igroup throttle, and, as a result, received the SCSI Queue Full response.
|
|
2
|
Display the total count of QFULLS sent for each LUN by entering the following command:
lun stats -o lun_path
|
How a cluster failover affects igroup throttles
Throttles manage physical ports, so during a cluster takeover, their behavior varies according to the FCP cfmode that is in effect, as shown in the following table.
FCP cfmode
|
How igroup throttles behave when failover occurs
|
|
standby
|
Throttles apply to the A ports:
- A ports have local throttles
- B ports have partner throttles
|
|
partner
|
Throttles apply to the appropriate ports:
- A ports have local throttles
- B ports have partner throttles
|
|
mixed, dual_fabric, or single_image
|
Throttles apply to all ports and are divided by two when the cluster is in takeover.
|
Displaying igroup throttle usage after takeover
To display information about how many command blocks the initiator in the igroup is using and the number of command blocks reserved for the igroup on the specified port after a takeover occurs, complete the following step.
Step
|
Action
|
|
1
|
Enter the following command:
igroup show -t
Example
igroup show -t
Result
The following is a sample display:
name reserved exceeds borrows
aix-igroup1 20% 0 N/A (Reduced by takeover to 10%)
aix-igroup2 10% 0 0 (Reduced by takeover to 5%)
|
Copyright © 1994-2005, Network Appliance, Inc. All rights
reserved.
Part No. 210-01094_B0
File: c7ig-f3.htm
Last updated: 08-Dec-2005 13:25:30