History

devlink: add shared buffer configuration

Define userspace API and drivers API for configuration of shared buffers. Four basic objects are defined: shared buffer - attributes are size, number of pools and TCs pool - chunk of sharedbuffer definition, it has some size and either static or dynamic threshold port pool threshold - to set per-port threshold for each pool port tc threshold bind - to bind port and TC to specified pool with threshold.

Jiri Pirko committed 10 years ago

Commit bf797471 parent f38ba953 files · +1044 −0Browse files

Showing the changes to include/uapi/linux/devlink.h (1 of 3 files). Show all

Unified · Split

include/uapi/linux/devlink.h+57−0
@@ -33,6 +33,26 @@ enum devlink_command { · 32 unmodified lines
3333 DEVLINK_CMD_PORT_SPLIT,
3434 DEVLINK_CMD_PORT_UNSPLIT,
3535
36+ DEVLINK_CMD_SB_GET, /* can dump */
37+ DEVLINK_CMD_SB_SET,
38+ DEVLINK_CMD_SB_NEW,
39+ DEVLINK_CMD_SB_DEL,
40+
41+ DEVLINK_CMD_SB_POOL_GET, /* can dump */
42+ DEVLINK_CMD_SB_POOL_SET,
43+ DEVLINK_CMD_SB_POOL_NEW,
44+ DEVLINK_CMD_SB_POOL_DEL,
45+
46+ DEVLINK_CMD_SB_PORT_POOL_GET, /* can dump */
47+ DEVLINK_CMD_SB_PORT_POOL_SET,
48+ DEVLINK_CMD_SB_PORT_POOL_NEW,
49+ DEVLINK_CMD_SB_PORT_POOL_DEL,
50+
51+ DEVLINK_CMD_SB_TC_POOL_BIND_GET, /* can dump */
52+ DEVLINK_CMD_SB_TC_POOL_BIND_SET,
53+ DEVLINK_CMD_SB_TC_POOL_BIND_NEW,
54+ DEVLINK_CMD_SB_TC_POOL_BIND_DEL,
55+
3656 /* add new commands above here */
3757
3858 __DEVLINK_CMD_MAX,
@@ -46,6 +66,31 @@ enum devlink_port_type { · 7 unmodified lines
4666 DEVLINK_PORT_TYPE_IB,
4767 };
4868
69+enum devlink_sb_pool_type {
70+ DEVLINK_SB_POOL_TYPE_INGRESS,
71+ DEVLINK_SB_POOL_TYPE_EGRESS,
72+};
73+
74+/* static threshold - limiting the maximum number of bytes.
75+ * dynamic threshold - limiting the maximum number of bytes
76+ * based on the currently available free space in the shared buffer pool.
77+ * In this mode, the maximum quota is calculated based
78+ * on the following formula:
79+ * max_quota = alpha / (1 + alpha) * Free_Buffer
80+ * While Free_Buffer is the amount of none-occupied buffer associated to
81+ * the relevant pool.
82+ * The value range which can be passed is 0-20 and serves
83+ * for computation of alpha by following formula:
84+ * alpha = 2 ^ (passed_value - 10)
85+ */
86+
87+enum devlink_sb_threshold_type {
88+ DEVLINK_SB_THRESHOLD_TYPE_STATIC,
89+ DEVLINK_SB_THRESHOLD_TYPE_DYNAMIC,
90+};
91+
92+#define DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX 20
93+
4994 enum devlink_attr {
5095 /* don't change the order or add anything between, this is ABI! */
5196 DEVLINK_ATTR_UNSPEC,
@@ -62,6 +107,18 @@ enum devlink_attr { · 10 unmodified lines
62107 DEVLINK_ATTR_PORT_IBDEV_NAME, /* string */
63108 DEVLINK_ATTR_PORT_SPLIT_COUNT, /* u32 */
64109 DEVLINK_ATTR_PORT_SPLIT_GROUP, /* u32 */
110+ DEVLINK_ATTR_SB_INDEX, /* u32 */
111+ DEVLINK_ATTR_SB_SIZE, /* u32 */
112+ DEVLINK_ATTR_SB_INGRESS_POOL_COUNT, /* u16 */
113+ DEVLINK_ATTR_SB_EGRESS_POOL_COUNT, /* u16 */
114+ DEVLINK_ATTR_SB_INGRESS_TC_COUNT, /* u16 */
115+ DEVLINK_ATTR_SB_EGRESS_TC_COUNT, /* u16 */
116+ DEVLINK_ATTR_SB_POOL_INDEX, /* u16 */
117+ DEVLINK_ATTR_SB_POOL_TYPE, /* u8 */
118+ DEVLINK_ATTR_SB_POOL_SIZE, /* u32 */
119+ DEVLINK_ATTR_SB_POOL_THRESHOLD_TYPE, /* u8 */
120+ DEVLINK_ATTR_SB_THRESHOLD, /* u32 */
121+ DEVLINK_ATTR_SB_TC_INDEX, /* u16 */
65122
66123 /* add new attributes above here, update the policy in devlink.c */
67124