Subject: Re: [RFC PATCH net-next v4 2/6] devlink: Extend devlink-rate api with queues and new parameters

From: "Wilczynski, Michal" <[email-masked]>
Date: Thu, 22 Sep 2022 13:44:14 +0200

On 9/22/2022 1:33 AM, Jakub Kicinski wrote:
> On Thu, 15 Sep 2022 20:41:52 +0200 Wilczynski, Michal wrote:
>> In our use case we are trying to find a way to expose hardware Tx
>> scheduler tree that is defined per port to user. Obviously if the
>> tree is defined per physical port, all the scheduling nodes will
>> reside on the same tree.
> Can you give some examples of what the resulting hierarchy would look
> like?

Hi,
Below I'll paste the output of how initially the topology looks like for our
hardware.
If the devlink_port objects are present (as in switchdev mode), there
should also be vport nodes represented. It is NOT a requirement for
a queue to have a vport as it's ancestor.

In this example we have two VF's created with 16 queues per VF,
and 72 PF queues.

User is free to reassign queues to other parents and delete the nodes, 
example:
# Add new node
devlink port function rate add pci/0000:4b:00.0/node_custom parent node_199
# Reassign queue
devlink port function rate set pci/0000:4b:00.0/queue/100 parent node_custom

node_0 represents a port and doesn't have any parent.

[root@moradin iproute2-next]# devlink port function rate show
pci/0000:4b:00.0/node_200: type node parent node_198
pci/0000:4b:00.0/node_199: type node parent node_198
pci/0000:4b:00.0/node_198: type node parent vport_2
pci/0000:4b:00.0/node_196: type node parent node_194
pci/0000:4b:00.0/node_195: type node parent node_194
pci/0000:4b:00.0/node_194: type node parent vport_1
pci/0000:4b:00.0/node_185: type node parent node_184
pci/0000:4b:00.0/node_184: type node parent node_0
pci/0000:4b:00.0/node_192: type node parent node_191
pci/0000:4b:00.0/node_191: type node parent node_190
pci/0000:4b:00.0/node_190: type node parent node_16
pci/0000:4b:00.0/node_14: type node parent node_5
pci/0000:4b:00.0/node_5: type node parent node_3
pci/0000:4b:00.0/node_13: type node parent node_4
pci/0000:4b:00.0/node_12: type node parent node_4
pci/0000:4b:00.0/node_11: type node parent node_4
pci/0000:4b:00.0/node_10: type node parent node_4
pci/0000:4b:00.0/node_9: type node parent node_4
pci/0000:4b:00.0/node_8: type node parent node_4
pci/0000:4b:00.0/node_7: type node parent node_4
pci/0000:4b:00.0/node_6: type node parent node_4
pci/0000:4b:00.0/node_4: type node parent node_3
pci/0000:4b:00.0/node_3: type node parent node_16
pci/0000:4b:00.0/node_16: type node parent node_15
pci/0000:4b:00.0/node_15: type node parent node_0
pci/0000:4b:00.0/node_2: type node parent node_1
pci/0000:4b:00.0/node_1: type node parent node_0
pci/0000:4b:00.0/node_0: type node
pci/0000:4b:00.0/queue/0: type queue parent node_6
pci/0000:4b:00.0/queue/9: type queue parent node_6
pci/0000:4b:00.0/queue/18: type queue parent node_6
pci/0000:4b:00.0/queue/27: type queue parent node_6
pci/0000:4b:00.0/queue/36: type queue parent node_6
pci/0000:4b:00.0/queue/45: type queue parent node_6
pci/0000:4b:00.0/queue/54: type queue parent node_6
pci/0000:4b:00.0/queue/63: type queue parent node_6
pci/0000:4b:00.0/queue/1: type queue parent node_7
pci/0000:4b:00.0/queue/10: type queue parent node_7
pci/0000:4b:00.0/queue/19: type queue parent node_7
pci/0000:4b:00.0/queue/28: type queue parent node_7
pci/0000:4b:00.0/queue/37: type queue parent node_7
pci/0000:4b:00.0/queue/46: type queue parent node_7
pci/0000:4b:00.0/queue/55: type queue parent node_7
pci/0000:4b:00.0/queue/64: type queue parent node_7
pci/0000:4b:00.0/queue/2: type queue parent node_8
pci/0000:4b:00.0/queue/11: type queue parent node_8
pci/0000:4b:00.0/queue/20: type queue parent node_8
pci/0000:4b:00.0/queue/29: type queue parent node_8
pci/0000:4b:00.0/queue/38: type queue parent node_8
pci/0000:4b:00.0/queue/47: type queue parent node_8
pci/0000:4b:00.0/queue/56: type queue parent node_8
pci/0000:4b:00.0/queue/65: type queue parent node_8
pci/0000:4b:00.0/queue/3: type queue parent node_9
pci/0000:4b:00.0/queue/12: type queue parent node_9
pci/0000:4b:00.0/queue/21: type queue parent node_9
pci/0000:4b:00.0/queue/30: type queue parent node_9
pci/0000:4b:00.0/queue/39: type queue parent node_9
pci/0000:4b:00.0/queue/48: type queue parent node_9
pci/0000:4b:00.0/queue/57: type queue parent node_9
pci/0000:4b:00.0/queue/66: type queue parent node_9
pci/0000:4b:00.0/queue/4: type queue parent node_10
pci/0000:4b:00.0/queue/13: type queue parent node_10
pci/0000:4b:00.0/queue/22: type queue parent node_10
pci/0000:4b:00.0/queue/31: type queue parent node_10
pci/0000:4b:00.0/queue/40: type queue parent node_10
pci/0000:4b:00.0/queue/49: type queue parent node_10
pci/0000:4b:00.0/queue/58: type queue parent node_10
pci/0000:4b:00.0/queue/67: type queue parent node_10
pci/0000:4b:00.0/queue/5: type queue parent node_11
pci/0000:4b:00.0/queue/14: type queue parent node_11
pci/0000:4b:00.0/queue/23: type queue parent node_11
pci/0000:4b:00.0/queue/32: type queue parent node_11
pci/0000:4b:00.0/queue/41: type queue parent node_11
pci/0000:4b:00.0/queue/50: type queue parent node_11
pci/0000:4b:00.0/queue/59: type queue parent node_11
pci/0000:4b:00.0/queue/68: type queue parent node_11
pci/0000:4b:00.0/queue/6: type queue parent node_12
pci/0000:4b:00.0/queue/15: type queue parent node_12
pci/0000:4b:00.0/queue/24: type queue parent node_12
pci/0000:4b:00.0/queue/33: type queue parent node_12
pci/0000:4b:00.0/queue/42: type queue parent node_12
pci/0000:4b:00.0/queue/51: type queue parent node_12
pci/0000:4b:00.0/queue/60: type queue parent node_12
pci/0000:4b:00.0/queue/69: type queue parent node_12
pci/0000:4b:00.0/queue/7: type queue parent node_13
pci/0000:4b:00.0/queue/16: type queue parent node_13
pci/0000:4b:00.0/queue/25: type queue parent node_13
pci/0000:4b:00.0/queue/34: type queue parent node_13
pci/0000:4b:00.0/queue/43: type queue parent node_13
pci/0000:4b:00.0/queue/52: type queue parent node_13
pci/0000:4b:00.0/queue/61: type queue parent node_13
pci/0000:4b:00.0/queue/70: type queue parent node_13
pci/0000:4b:00.0/queue/8: type queue parent node_14
pci/0000:4b:00.0/queue/17: type queue parent node_14
pci/0000:4b:00.0/queue/26: type queue parent node_14
pci/0000:4b:00.0/queue/35: type queue parent node_14
pci/0000:4b:00.0/queue/44: type queue parent node_14
pci/0000:4b:00.0/queue/53: type queue parent node_14
pci/0000:4b:00.0/queue/62: type queue parent node_14
pci/0000:4b:00.0/queue/71: type queue parent node_14
pci/0000:4b:00.0/queue/104: type queue parent node_192
pci/0000:4b:00.0/queue/105: type queue parent node_192
pci/0000:4b:00.0/1: type vport parent node_185
pci/0000:4b:00.0/queue/72: type queue parent node_195
pci/0000:4b:00.0/queue/74: type queue parent node_195
pci/0000:4b:00.0/queue/76: type queue parent node_195
pci/0000:4b:00.0/queue/78: type queue parent node_195
pci/0000:4b:00.0/queue/80: type queue parent node_195
pci/0000:4b:00.0/queue/82: type queue parent node_195
pci/0000:4b:00.0/queue/84: type queue parent node_195
pci/0000:4b:00.0/queue/86: type queue parent node_195
pci/0000:4b:00.0/queue/73: type queue parent node_196
pci/0000:4b:00.0/queue/75: type queue parent node_196
pci/0000:4b:00.0/queue/77: type queue parent node_196
pci/0000:4b:00.0/queue/79: type queue parent node_196
pci/0000:4b:00.0/queue/81: type queue parent node_196
pci/0000:4b:00.0/queue/83: type queue parent node_196
pci/0000:4b:00.0/queue/85: type queue parent node_196
pci/0000:4b:00.0/queue/87: type queue parent node_196
pci/0000:4b:00.0/2: type vport parent node_185
pci/0000:4b:00.0/queue/88: type queue parent node_199
pci/0000:4b:00.0/queue/90: type queue parent node_199
pci/0000:4b:00.0/queue/92: type queue parent node_199
pci/0000:4b:00.0/queue/94: type queue parent node_199
pci/0000:4b:00.0/queue/96: type queue parent node_199
pci/0000:4b:00.0/queue/98: type queue parent node_199
pci/0000:4b:00.0/queue/100: type queue parent node_199
pci/0000:4b:00.0/queue/102: type queue parent node_199
pci/0000:4b:00.0/queue/89: type queue parent node_200
pci/0000:4b:00.0/queue/91: type queue parent node_200
pci/0000:4b:00.0/queue/93: type queue parent node_200
pci/0000:4b:00.0/queue/95: type queue parent node_200
pci/0000:4b:00.0/queue/97: type queue parent node_200
pci/0000:4b:00.0/queue/99: type queue parent node_200
pci/0000:4b:00.0/queue/101: type queue parent node_200
pci/0000:4b:00.0/queue/103: type queue parent node_200

BR,
Michał