From 809b69ea4a90455445c34bbad7d8e5fea5cf3462 Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Tue, 17 Sep 2019 12:41:47 +0200 Subject: Optimizations for statsclient - this dramatically improves performance for stats data collection - memory allocation is now done only when stat dirs change - updating prepared stat dir does not need to allocate memory - created integration test for testing stats client - added NumWorkerThreads and VectorRatePerWorker to SystemStats - added ReduceSimpleCounterStatIndex, ReduceCombinedCounterStatIndex for aggregating specific index Change-Id: I702731a69024ab5dd0832bb5cfe2773a987359e5 Signed-off-by: Ondrej Fabry --- api/stats.go | 66 ++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 38 insertions(+), 28 deletions(-) (limited to 'api') diff --git a/api/stats.go b/api/stats.go index e254eae..2850b5f 100644 --- a/api/stats.go +++ b/api/stats.go @@ -14,13 +14,24 @@ package api +// StatsProvider provides methods for retrieving statistics. +type StatsProvider interface { + GetSystemStats(*SystemStats) error + GetNodeStats(*NodeStats) error + GetInterfaceStats(*InterfaceStats) error + GetErrorStats(*ErrorStats) error + GetBufferStats(*BufferStats) error +} + // SystemStats represents global system statistics. type SystemStats struct { - VectorRate float64 - InputRate float64 - LastUpdate float64 - LastStatsClear float64 - Heartbeat float64 + VectorRate uint64 + NumWorkerThreads uint64 + VectorRatePerWorker []uint64 + InputRate uint64 + LastUpdate uint64 + LastStatsClear uint64 + Heartbeat uint64 } // NodeStats represents per node statistics. @@ -49,19 +60,18 @@ type InterfaceCounters struct { InterfaceIndex uint32 InterfaceName string // requires VPP 19.04+ - RxPackets uint64 - RxBytes uint64 - RxErrors uint64 - TxPackets uint64 - TxBytes uint64 - TxErrors uint64 + Rx InterfaceCounterCombined + Tx InterfaceCounterCombined - RxUnicast [2]uint64 // packets[0], bytes[1] - RxMulticast [2]uint64 // packets[0], bytes[1] - RxBroadcast [2]uint64 // packets[0], bytes[1] - TxUnicastMiss [2]uint64 // packets[0], bytes[1] - TxMulticast [2]uint64 // packets[0], bytes[1] - TxBroadcast [2]uint64 // packets[0], bytes[1] + RxErrors uint64 + TxErrors uint64 + + RxUnicast InterfaceCounterCombined + RxMulticast InterfaceCounterCombined + RxBroadcast InterfaceCounterCombined + TxUnicast InterfaceCounterCombined + TxMulticast InterfaceCounterCombined + TxBroadcast InterfaceCounterCombined Drops uint64 Punts uint64 @@ -69,6 +79,13 @@ type InterfaceCounters struct { IP6 uint64 RxNoBuf uint64 RxMiss uint64 + Mpls uint64 +} + +// InterfaceCounterCombined defines combined counters for interfaces. +type InterfaceCounterCombined struct { + Packets uint64 + Bytes uint64 } // ErrorStats represents statistics per error counter. @@ -79,7 +96,8 @@ type ErrorStats struct { // ErrorCounter represents error counter. type ErrorCounter struct { CounterName string - Value uint64 + + Value uint64 } // BufferStats represents statistics per buffer pool. @@ -89,17 +107,9 @@ type BufferStats struct { // BufferPool represents buffer pool. type BufferPool struct { - PoolName string + PoolName string + Cached float64 Used float64 Available float64 } - -// StatsProvider provides the methods for getting statistics. -type StatsProvider interface { - GetSystemStats() (*SystemStats, error) - GetNodeStats() (*NodeStats, error) - GetInterfaceStats() (*InterfaceStats, error) - GetErrorStats(names ...string) (*ErrorStats, error) - GetBufferStats() (*BufferStats, error) -} -- cgit 1.2.3-korg