From 9346e428365d41b6274a6880b6079cc604ac6fa6 Mon Sep 17 00:00:00 2001 From: Itai Baz Date: Wed, 23 Dec 2015 21:19:12 +0200 Subject: [PATCH 1/3] Port has ingress and egress buffer profile lists + Add RX stats for PG + Add occupancy stats for Queue, PG, pool 1) Port has ingress buffer profile list, can allow profile per ingress pool Same for egress 2) Added PG RX bytes / packets stats 3) Added PG, Queue, Pool current occupany and watermark stats --- inc/saibuffer.h | 113 +++++++++++++++++++++++++++++++++++++++++++----- inc/saiport.h | 9 +++- inc/saiqueue.h | 6 +++ 3 files changed, 116 insertions(+), 12 deletions(-) diff --git a/inc/saibuffer.h b/inc/saibuffer.h index 506bea5ed..15bbeb651 100644 --- a/inc/saibuffer.h +++ b/inc/saibuffer.h @@ -46,6 +46,28 @@ typedef enum _sai_ingress_priority_group_attr_t SAI_INGRESS_PRIORITY_GROUP_ATTR_BUFFER_PROFILE, } sai_ingress_priority_group_attr_t; +/** +* @brief Enum defining statistics for ingress priority group. +*/ +typedef enum _sai_ingress_priority_group_stat_counter_t +{ + /** get/set rx packets count [uint64_t] */ + SAI_INGRESS_PRIORITY_GROUP_STAT_PACKETS = 0x00000000, + + /** get/set rx bytes count [uint64_t] */ + SAI_INGRESS_PRIORITY_GROUP_STAT_BYTES = 0x00000001, + + /** get current pg occupany in bytes [uint64_t] */ + SAI_INGRESS_PRIORITY_GROUP_STAT_CURR_OCCUPANCY_BYTES = 0x00000002, + + /** get watermark pg occupany in bytes [uint64_t] */ + SAI_INGRESS_PRIORITY_GROUP_STAT_WATERMARK_BYTES = 0x00000003, + + /** -- */ + /** Custom range base value */ + SAI_INGRESS_PRIORITY_GROUP_STAT_CUSTOM_RANGE_BASE = 0x10000000 +} sai_ingress_priority_group_stat_counter_t; + /** * @brief Set ingress priority group attribute * @param[in] ingress_pg_id ingress priority group id @@ -74,6 +96,40 @@ typedef sai_status_t(*sai_get_ingress_priority_group_attr_fn)( _Inout_ sai_attribute_t *attr_list ); +/** +* @brief Get ingress priority group statistics counters. +* +* @param[in] ingress_pg_id ingress priority group id +* @param[in] counter_ids specifies the array of counter ids +* @param[in] number_of_counters number of counters in the array +* @param[out] counters array of resulting counter values. +* +* @return SAI_STATUS_SUCCESS on success +* Failure status code on error +*/ +typedef sai_status_t(*sai_get_ingress_priority_group_stats_fn)( + _In_ sai_object_id_t ingress_pg_id, + _In_ const sai_ingress_priority_group_stat_counter_t *counter_ids, + _In_ uint32_t number_of_counters, + _Out_ uint64_t* counters + ); + +/** +* @brief Clear ingress priority group statistics counters. +* +* @param[in] ingress_pg_id ingress priority group id +* @param[in] counter_ids specifies the array of counter ids +* @param[in] number_of_counters number of counters in the array +* +* @return SAI_STATUS_SUCCESS on success +* Failure status code on error +*/ +typedef sai_status_t(*sai_clear_ingress_priority_group_stats_fn)( + _In_ sai_object_id_t ingress_pg_id, + _In_ const sai_ingress_priority_group_stat_counter_t *counter_ids, + _In_ uint32_t number_of_counters + ); + /** * @brief Enum defining buffer pool types. */ @@ -126,6 +182,22 @@ typedef enum _sai_buffer_pool_attr_t } sai_buffer_pool_attr_t; +/** +* @brief Enum defining statistics for buffer pool. +*/ +typedef enum _sai_buffer_pool_stat_counter_t +{ + /** get current pool occupany in bytes [uint64_t] */ + SAI_BUFFER_POOL_STAT_CURR_OCCUPANCY_BYTES = 0x00000000, + + /** get watermark pool occupany in bytes [uint64_t] */ + SAI_BUFFER_POOL_STAT_WATERMARK_BYTES = 0x00000001, + + /** -- */ + /** Custom range base value */ + SAI_BUFFER_POOL_STAT_CUSTOM_RANGE_BASE = 0x10000000 +} sai_buffer_pool_stat_counter_t; + /** * @brief Create buffer pool * @param[out] pool_id buffer pool id @@ -176,6 +248,24 @@ typedef sai_status_t(*sai_get_buffer_pool_attr_fn)( _Inout_ sai_attribute_t *attr_list ); +/** +* @brief Get buffer pool statistics counters. +* +* @param[in] pool_id buffer pool id +* @param[in] counter_ids specifies the array of counter ids +* @param[in] number_of_counters number of counters in the array +* @param[out] counters array of resulting counter values. +* +* @return SAI_STATUS_SUCCESS on success +* Failure status code on error +*/ +typedef sai_status_t(*sai_get_buffer_pool_stats_fn)( + _In_ sai_object_id_t pool_id, + _In_ const sai_buffer_pool_stat_counter_t *counter_ids, + _In_ uint32_t number_of_counters, + _Out_ uint64_t* counters + ); + /** * @brief Enum defining buffer profile attributes. */ @@ -272,16 +362,19 @@ typedef sai_status_t(*sai_get_buffer_profile_attr_fn)( */ typedef struct _sai_buffer_api_t { - sai_create_buffer_pool_fn create_buffer_pool; - sai_remove_buffer_pool_fn remove_buffer_pool; - sai_set_buffer_pool_attr_fn set_buffer_pool_attr; - sai_get_buffer_pool_attr_fn get_buffer_pool_attr; - sai_set_ingress_priority_group_attr_fn set_ingress_priority_group_attr; - sai_get_ingress_priority_group_attr_fn get_ingress_priority_group_attr; - sai_create_buffer_profile_fn create_buffer_profile; - sai_remove_buffer_profile_fn remove_buffer_profile; - sai_set_buffer_profile_attr_fn set_buffer_profile_attr; - sai_get_buffer_profile_attr_fn get_buffer_profile_attr; + sai_create_buffer_pool_fn create_buffer_pool; + sai_remove_buffer_pool_fn remove_buffer_pool; + sai_set_buffer_pool_attr_fn set_buffer_pool_attr; + sai_get_buffer_pool_attr_fn get_buffer_pool_attr; + sai_get_buffer_pool_stats_fn get_buffer_pool_stats; + sai_set_ingress_priority_group_attr_fn set_ingress_priority_group_attr; + sai_get_ingress_priority_group_attr_fn get_ingress_priority_group_attr; + sai_get_ingress_priority_group_stats_fn get_ingress_priority_group_stats; + sai_clear_ingress_priority_group_stats_fn clear_ingress_priority_group_stats; + sai_create_buffer_profile_fn create_buffer_profile; + sai_remove_buffer_profile_fn remove_buffer_profile; + sai_set_buffer_profile_attr_fn set_buffer_profile_attr; + sai_get_buffer_profile_attr_fn get_buffer_profile_attr; } sai_buffer_api_t; /** diff --git a/inc/saiport.h b/inc/saiport.h index feff6d993..caaa44c13 100644 --- a/inc/saiport.h +++ b/inc/saiport.h @@ -410,8 +410,13 @@ typedef enum _sai_port_attr_t * attributes alone valid. Rest will be ignored */ SAI_PORT_ATTR_QOS_SCHEDULER_PROFILE_ID, - /** Buffer profile for port [sai_object_id_t]*/ - SAI_PORT_ATTR_QOS_BUFFER_PROFILE_ID, + /** Ingress buffer profiles for port [sai_object_list_t] + * There can be up to SAI_SWITCH_ATTR_INGRESS_BUFFER_POOL_NUM profiles */ + SAI_PORT_ATTR_QOS_INGRESS_BUFFER_PROFILE_LIST, + + /** Egress buffer profiles for port [sai_object_list_t] + * There can be up to SAI_SWITCH_ATTR_EGRESS_BUFFER_POOL_NUM profiles */ + SAI_PORT_ATTR_QOS_EGRESS_BUFFER_PROFILE_LIST, /** bit vector enable/disable port PFC [sai_uint8_t]. * Valid from bit 0 to bit 7 */ diff --git a/inc/saiqueue.h b/inc/saiqueue.h index 96881d26c..da29d795a 100644 --- a/inc/saiqueue.h +++ b/inc/saiqueue.h @@ -156,6 +156,12 @@ typedef enum _sai_queue_stat_counter_t /** get/set WRED red dropped bytes count [uint64_t] */ SAI_QUEUE_STAT_DISCARD_DROPPED_BYTES = 0x00000017, + /** get current queue occupany in bytes [uint64_t] */ + SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES = 0x00000018, + + /** get watermark queue occupany in bytes [uint64_t] */ + SAI_QUEUE_STAT_WATERMARK_BYTES = 0x00000019, + /* -- */ /* Custom range base value */ SAI_QUEUE_STAT_CUSTOM_RANGE_BASE = 0x10000000 From d31aaccca31bff6d7276b77ebf3124ee0ceffa31 Mon Sep 17 00:00:00 2001 From: Itai Baz Date: Wed, 23 Dec 2015 21:23:10 +0200 Subject: [PATCH 2/3] fix typo --- inc/saibuffer.h | 8 ++++---- inc/saiqueue.h | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/inc/saibuffer.h b/inc/saibuffer.h index 15bbeb651..4af58f8d2 100644 --- a/inc/saibuffer.h +++ b/inc/saibuffer.h @@ -57,10 +57,10 @@ typedef enum _sai_ingress_priority_group_stat_counter_t /** get/set rx bytes count [uint64_t] */ SAI_INGRESS_PRIORITY_GROUP_STAT_BYTES = 0x00000001, - /** get current pg occupany in bytes [uint64_t] */ + /** get current pg occupancy in bytes [uint64_t] */ SAI_INGRESS_PRIORITY_GROUP_STAT_CURR_OCCUPANCY_BYTES = 0x00000002, - /** get watermark pg occupany in bytes [uint64_t] */ + /** get watermark pg occupancy in bytes [uint64_t] */ SAI_INGRESS_PRIORITY_GROUP_STAT_WATERMARK_BYTES = 0x00000003, /** -- */ @@ -187,10 +187,10 @@ typedef enum _sai_buffer_pool_attr_t */ typedef enum _sai_buffer_pool_stat_counter_t { - /** get current pool occupany in bytes [uint64_t] */ + /** get current pool occupancy in bytes [uint64_t] */ SAI_BUFFER_POOL_STAT_CURR_OCCUPANCY_BYTES = 0x00000000, - /** get watermark pool occupany in bytes [uint64_t] */ + /** get watermark pool occupancy in bytes [uint64_t] */ SAI_BUFFER_POOL_STAT_WATERMARK_BYTES = 0x00000001, /** -- */ diff --git a/inc/saiqueue.h b/inc/saiqueue.h index da29d795a..6ef13a4c0 100644 --- a/inc/saiqueue.h +++ b/inc/saiqueue.h @@ -156,10 +156,10 @@ typedef enum _sai_queue_stat_counter_t /** get/set WRED red dropped bytes count [uint64_t] */ SAI_QUEUE_STAT_DISCARD_DROPPED_BYTES = 0x00000017, - /** get current queue occupany in bytes [uint64_t] */ + /** get current queue occupancy in bytes [uint64_t] */ SAI_QUEUE_STAT_CURR_OCCUPANCY_BYTES = 0x00000018, - /** get watermark queue occupany in bytes [uint64_t] */ + /** get watermark queue occupancy in bytes [uint64_t] */ SAI_QUEUE_STAT_WATERMARK_BYTES = 0x00000019, /* -- */ From 56599d711f34db264a4535db3b14b2ddc0770e3b Mon Sep 17 00:00:00 2001 From: Itai Baz Date: Sun, 3 Jan 2016 13:26:52 +0200 Subject: [PATCH 3/3] Split buffer change proposal, leave only statistics change in this commit --- inc/saiport.h | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/inc/saiport.h b/inc/saiport.h index caaa44c13..feff6d993 100644 --- a/inc/saiport.h +++ b/inc/saiport.h @@ -410,13 +410,8 @@ typedef enum _sai_port_attr_t * attributes alone valid. Rest will be ignored */ SAI_PORT_ATTR_QOS_SCHEDULER_PROFILE_ID, - /** Ingress buffer profiles for port [sai_object_list_t] - * There can be up to SAI_SWITCH_ATTR_INGRESS_BUFFER_POOL_NUM profiles */ - SAI_PORT_ATTR_QOS_INGRESS_BUFFER_PROFILE_LIST, - - /** Egress buffer profiles for port [sai_object_list_t] - * There can be up to SAI_SWITCH_ATTR_EGRESS_BUFFER_POOL_NUM profiles */ - SAI_PORT_ATTR_QOS_EGRESS_BUFFER_PROFILE_LIST, + /** Buffer profile for port [sai_object_id_t]*/ + SAI_PORT_ATTR_QOS_BUFFER_PROFILE_ID, /** bit vector enable/disable port PFC [sai_uint8_t]. * Valid from bit 0 to bit 7 */