[ofa-general] QoS RFC
Yevgeny Kliteynik
kliteyn at dev.mellanox.co.il
Thu Aug 2 15:29:37 PDT 2007
Sasha Khapyorsky wrote:
> Hi Yevgeny,
>
> On 15:39 Thu 26 Jul , Yevgeny Kliteynik wrote:
>>>> * Comments may appear only in a separate line
>>> Why? What is wrong with:
>>> port-name: vs1/HCA-1/P1 # my best port
>> I can use this too, but then the pound sign, wherever it will
>> appear, would mean commentary start. No \# or something like this
>> to include it in some other place - I don't want to complicate the
>> syntax. Sounds OK?
>
> Are we planning to use '#' somewhere?
Nope. Anyway, I've implemented the "port-guid: 0x01 # bla bla" comment.
> Anyway this comment is minor.
>
>>>> end-port-groups
>>> I agree that proposed syntax has better for human readability than pure
>>> XML, but isn't stuff like this will be more user-friendly?
>>> Storage "Free Text description" = 0x10001, 0x10002, 0x10003 ;
>>> , or
>>> Storage "Free Text description" { 0x10001, 0x10002, 0x10003 };
>>> , or
>>> Storage "Free Text description": ROUTERS, CAS ;
>> GUID list is a good idea.
>> Not sure about the other stuff. A certain port group can be defined
>> both by guids and by node-types. How about this:
>>
>> port-group
>> name: routers_and_mgt_nodes
>> use: all routers and management nodes
>> node-type: ROUTER
>> port-guid: 0x10001, 0x10002, 0x10003
>> end-port-group
>
> I think it is doable too, like: 0x10001, 0x10002, 0x10003, ROUTER
> Guess it should be easy to parse GUIDs, names and special names (like
> ROUTER) in one line. Not sure it must be so, just thought...
For now let's stay with the separate 'node-type' and 'port-guid' definitions.
I did, however, add some improvements to the file syntax - I added support
for num ranges wherever it makes sense. Example:
port-guid: 0x10001-0x100FF,0x20000
I also added support for list of strings wherever it is needed. Examples:
node-type: ROUTER,SELF
destination: partition1,partition2
>>>> qos-levels
>>>>
>>>> # the first one is just setting SL
>>>> qos-level
>>>> use: for the lowest priority communication
>>>> sl: 15
>>>> packet-life: 16
>>>> end-qos-level
>>>> # the second sets SL and QoS Class
>>>> qos-level
>>>> use: low latency best bandwidth
>>>> sl: 0
>>>> end-qos-level
>>>> # the whole set: SL, MTU-Limit, Rate-Limit, Packet Lifetime, Path
>>>> Bits
>>>> qos-level
>>>> use: just an example
>>>> sl: 0
>>>> mtu-limit: 1
>>>> rate-limit: 1
>>>> packet-life: 12
>>>> # Path Bits can be used e.g. to provide a different routes
>>>> through the
>>>> # subnet to a particular port
>>>> path-bits: 2,4,8-32
>>>> end-qos-level
>>>>
>>>> end-qos-levels
>>>>
>>>>
>>>> # Match rules are scanned in a first-fit manner (like firewall rules
>>>> table)
>>>> qos-match-rules
>>>>
>>>> # matching by single criteria: class (list of values and ranges)
>>>> qos-match-rule
>>>> # just a description
>>>> use: low latency by class 7-9 or 11
>>>> qos-class: 7-9,11
>>>> # number of qos-level to apply to the matching PR/MPR
>>>> qos-level-sn: 1
>>> Isn't it better and less error prone to match qos_level by name and not
>>> by sequential number?
>> qos-level can have name, and then qos-match-rule will refer to this name.
>> But matching qos-level by sequential number makes it really easy to locate
>> the referred qos-level, which is important, as every PR/MPR request would
>> go through this process, so saving some runtime in this area is important
>> IMHO.
>
> Sure, it is important, but I'm not about internal data representation,
> internally this should be fast reference - by index or by directly by
> pointer. But in the file it would be easy for user to have names (numbers
> could be used as names too) instead of just serial numbering on one
> side, so an user will not need to count lines.
OK, we can use names of QoS levels instead of sequential numbers.
Here are the details:
+ in qos-level new mandatory keyword 'name' will be added: "name: single_string"
+ in qos-match-rules, the 'qos-level-sn' keyword will be replaced by 'qos-level-name'
+ qos-level with name "default"/"DEFAULT" is a must.
It is the default level that would be applied to any PR/MPR request that didn't
match any existing match rule
+ any match rule may explicitly refer to the default qos-level by specifying
its name in the qos-level-name
>>>> 9. OpenSM features
>>>> -------------------
>>>> The QoS related functionality to be provided by OpenSM can be split into
>>>> two
>>>> main parts:
>>>>
>>>> 3.1. Fabric Setup
>>>> During fabric initialization the SM should parse the policy and apply its
>>>> settings to the discovered fabric elements. The following actions should
>>>> be
>>>> performed:
>>>> * Parsing of policy
>>>> * Node Group identification. Warning should be provided for each node not
>>>> specified but found.
>>>> * SL2VL settings validation should be checked:
>>>> + A warning will be provided if there are no matching targets for the
>>>> SL2VL
>>>> setting statement.
>>>> + An error message will be printed to the log file if an invalid
>>>> setting is
>>>> found. A setting is invalid if it refers to:
>>>> - Non existing port numbers of the target devices
>>>> - Unsupported VLs for the target device. In the later case the map to
>>>> non existing VLs should be replaced to VL15 i.e. packets will be dropped.
>>> I'm not sure it is optimal. We could have well documented or even
>>> configurable mapping rule instead, then this will not limit devices with
>>> higher capabilities.
>> I'm open for suggestions.
>
> The rule like %(number of OpVLs)? Or even better - configurable mapping
> rule?
>
>>>> * Only PR/MPR fields that have their component mask bit set should be
>>>> compared.
>>>> * For a rule to be "matching" a PR/MPR request all the rule fields should
>>>> be
>>>> "matching" their PR/MPR fields. Such that a PR/MPR request that does
>>>> not have a component mask field set for one of the rule defined fields
>>>> can
>>>> not match that rule.
>>>> * A PR/MPR request that have a component mask bit set for one of the
>>>> fields
>>>> that is not defined by the rule can match the rule.
>>> Aren't last two too restrictive? SA can just to filter-out paths in
>>> response to match rest of the rule. No?
>> Not sure I'm following.
>> The last bullet is not restrictive at all
>
> Right, but mostly I'm about previous bullet - where client _must_ set
> component mask to match all fields.
Look at this this way: when you define a match rule, you specify there
only the parameters that the matching PR/MPR requests *must* comply with.
e.g., if the matching rule has service ID, it means that PR/MPR requests
that match this rule *must* have the matching service id.
Same goes for all the other PR/MPR parameters.
You can define a 'lighter' matching rule that will match more PR/MPR
requests by checking a reduced set of key parameters.
-- Yevgeny
> Sasha
>
More information about the general
mailing list