Add config options for socket statistics

1. MBED_CONF_NSAPI_SOCKET_STATS_ENABLE to enable the statistics
2. MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT max sockets statistics cached
pull/8592/head
Deepika 2018-11-16 16:55:36 -06:00 committed by deepikabhavnani
parent a851df66e3
commit f6c1a40b29
16 changed files with 35 additions and 27 deletions

View File

@ -38,7 +38,7 @@ NetworkInterface *net;
Timer tc_bucket; // Timer to limit a test cases run time Timer tc_bucket; // Timer to limit a test cases run time
} }
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
mbed_stats_socket_t tcp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT] = {0}; mbed_stats_socket_t tcp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT] = {0};
#endif #endif
@ -119,7 +119,7 @@ int split2half_rmng_tcp_test_time()
return (tcp_global::TESTS_TIMEOUT - tc_bucket.read()) / 2; return (tcp_global::TESTS_TIMEOUT - tc_bucket.read()) / 2;
} }
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
int fetch_stats() int fetch_stats()
{ {
return SocketStats::mbed_stats_socket_get_each(&tcp_stats[0], MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT); return SocketStats::mbed_stats_socket_get_each(&tcp_stats[0], MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT);

View File

@ -24,7 +24,7 @@ void fill_tx_buffer_ascii(char *buff, size_t len);
nsapi_error_t tcpsocket_connect_to_echo_srv(TCPSocket &sock); nsapi_error_t tcpsocket_connect_to_echo_srv(TCPSocket &sock);
nsapi_error_t tcpsocket_connect_to_discard_srv(TCPSocket &sock); nsapi_error_t tcpsocket_connect_to_discard_srv(TCPSocket &sock);
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
extern mbed_stats_socket_t tcp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT]; extern mbed_stats_socket_t tcp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT];
int fetch_stats(void); int fetch_stats(void);
#endif #endif

View File

@ -114,7 +114,7 @@ void tcpsocket_echotest_nonblock_receiver(void *receive_bytes)
void TCPSOCKET_ECHOTEST_NONBLOCK() void TCPSOCKET_ECHOTEST_NONBLOCK()
{ {
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
int j = 0; int j = 0;
int count = fetch_stats(); int count = fetch_stats();
for (; j < count; j++) { for (; j < count; j++) {
@ -167,7 +167,7 @@ void TCPSOCKET_ECHOTEST_NONBLOCK()
bytes2send -= sent; bytes2send -= sent;
} }
printf("[Sender#%02d] bytes sent: %d\n", s_idx, pkt_s); printf("[Sender#%02d] bytes sent: %d\n", s_idx, pkt_s);
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
count = fetch_stats(); count = fetch_stats();
for (j = 0; j < count; j++) { for (j = 0; j < count; j++) {
if ((tcp_stats[j].state == SOCK_OPEN) && (tcp_stats[j].proto == NSAPI_TCP)) { if ((tcp_stats[j].state == SOCK_OPEN) && (tcp_stats[j].proto == NSAPI_TCP)) {

View File

@ -26,7 +26,7 @@ using namespace utest::v1;
void TCPSOCKET_OPEN_CLOSE_REPEAT() void TCPSOCKET_OPEN_CLOSE_REPEAT()
{ {
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
int count = fetch_stats(); int count = fetch_stats();
for (int j = 0; j < count; j++) { for (int j = 0; j < count; j++) {
TEST_ASSERT_EQUAL(SOCK_CLOSED, tcp_stats[j].state); TEST_ASSERT_EQUAL(SOCK_CLOSED, tcp_stats[j].state);
@ -42,7 +42,7 @@ void TCPSOCKET_OPEN_CLOSE_REPEAT()
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->close()); TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->close());
} }
delete sock; delete sock;
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
count = fetch_stats(); count = fetch_stats();
for (int j = 0; j < count; j++) { for (int j = 0; j < count; j++) {
TEST_ASSERT_EQUAL(SOCK_CLOSED, tcp_stats[j].state); TEST_ASSERT_EQUAL(SOCK_CLOSED, tcp_stats[j].state);

View File

@ -70,7 +70,7 @@ void TCPSOCKET_OPEN_LIMIT()
break; break;
} }
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
int count = fetch_stats(); int count = fetch_stats();
int open_count = 0; int open_count = 0;
for (int j = 0; j < count; j++) { for (int j = 0; j < count; j++) {

View File

@ -37,7 +37,7 @@ namespace {
NetworkInterface *net; NetworkInterface *net;
} }
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
mbed_stats_socket_t udp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT] = {0}; mbed_stats_socket_t udp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT] = {0};
#endif #endif
@ -80,7 +80,7 @@ void fill_tx_buffer_ascii(char *buff, size_t len)
} }
} }
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
int fetch_stats() int fetch_stats()
{ {
return SocketStats::mbed_stats_socket_get_each(&udp_stats[0], MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT); return SocketStats::mbed_stats_socket_get_each(&udp_stats[0], MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT);

View File

@ -22,7 +22,7 @@ NetworkInterface *get_interface();
void drop_bad_packets(UDPSocket &sock, int orig_timeout); void drop_bad_packets(UDPSocket &sock, int orig_timeout);
void fill_tx_buffer_ascii(char *buff, size_t len); void fill_tx_buffer_ascii(char *buff, size_t len);
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
extern mbed_stats_socket_t udp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT]; extern mbed_stats_socket_t udp_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT];
int fetch_stats(void); int fetch_stats(void);
#endif #endif

View File

@ -121,7 +121,7 @@ void udpsocket_echotest_nonblock_receiver(void *receive_bytes)
void UDPSOCKET_ECHOTEST_NONBLOCK() void UDPSOCKET_ECHOTEST_NONBLOCK()
{ {
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
int j = 0; int j = 0;
int count = fetch_stats(); int count = fetch_stats();
for (; j < count; j++) { for (; j < count; j++) {
@ -183,7 +183,7 @@ void UDPSOCKET_ECHOTEST_NONBLOCK()
} }
free(stack_mem); free(stack_mem);
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
TEST_ASSERT_EQUAL(1, fetch_stats()); TEST_ASSERT_EQUAL(1, fetch_stats());
TEST_ASSERT_EQUAL(NSAPI_UDP, udp_stats[0].proto); TEST_ASSERT_EQUAL(NSAPI_UDP, udp_stats[0].proto);
TEST_ASSERT(udp_stats[0].sent_bytes != 0); TEST_ASSERT(udp_stats[0].sent_bytes != 0);

View File

@ -26,7 +26,7 @@ using namespace utest::v1;
void UDPSOCKET_OPEN_CLOSE_REPEAT() void UDPSOCKET_OPEN_CLOSE_REPEAT()
{ {
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
int count = fetch_stats(); int count = fetch_stats();
for (int j = 0; j < count; j++) { for (int j = 0; j < count; j++) {
TEST_ASSERT_EQUAL(SOCK_CLOSED, udp_stats[j].state); TEST_ASSERT_EQUAL(SOCK_CLOSED, udp_stats[j].state);
@ -42,7 +42,7 @@ void UDPSOCKET_OPEN_CLOSE_REPEAT()
TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->close()); TEST_ASSERT_EQUAL(NSAPI_ERROR_OK, sock->close());
} }
delete sock; delete sock;
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
count = fetch_stats(); count = fetch_stats();
for (int j = 0; j < count; j++) { for (int j = 0; j < count; j++) {
TEST_ASSERT_EQUAL(SOCK_CLOSED, udp_stats[j].state); TEST_ASSERT_EQUAL(SOCK_CLOSED, udp_stats[j].state);

View File

@ -70,7 +70,7 @@ void UDPSOCKET_OPEN_LIMIT()
if (!socket_list_head) { if (!socket_list_head) {
break; break;
} }
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
int count = fetch_stats(); int count = fetch_stats();
int open_count = 0; int open_count = 0;
for (int j = 0; j < count; j++) { for (int j = 0; j < count; j++) {

View File

@ -24,7 +24,7 @@
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
SingletonPtr<PlatformMutex> SocketStats::_mutex; SingletonPtr<PlatformMutex> SocketStats::_mutex;
mbed_stats_socket_t SocketStats::_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT] = {0}; mbed_stats_socket_t SocketStats::_stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT] = {0};
uint32_t SocketStats::_size = 0; uint32_t SocketStats::_size = 0;
@ -44,7 +44,7 @@ size_t SocketStats::mbed_stats_socket_get_each(mbed_stats_socket_t *stats, size_
{ {
MBED_ASSERT(stats != NULL); MBED_ASSERT(stats != NULL);
size_t i = 0; size_t i = 0;
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
memset(stats, 0, count * sizeof(mbed_stats_socket_t)); memset(stats, 0, count * sizeof(mbed_stats_socket_t));
_mutex->lock(); _mutex->lock();
for (uint32_t j = 0; j < count; j++) { for (uint32_t j = 0; j < count; j++) {
@ -64,7 +64,7 @@ SocketStats::SocketStats()
void SocketStats::stats_new_socket_entry(const Socket *const reference_id) void SocketStats::stats_new_socket_entry(const Socket *const reference_id)
{ {
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
_mutex->lock(); _mutex->lock();
if (get_entry_position(reference_id) >= 0) { if (get_entry_position(reference_id) >= 0) {
// Duplicate entry // Duplicate entry
@ -98,7 +98,7 @@ void SocketStats::stats_new_socket_entry(const Socket *const reference_id)
void SocketStats::stats_update_socket_state(const Socket *const reference_id, socket_state state) void SocketStats::stats_update_socket_state(const Socket *const reference_id, socket_state state)
{ {
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
_mutex->lock(); _mutex->lock();
int position = get_entry_position(reference_id); int position = get_entry_position(reference_id);
if (position >= 0) { if (position >= 0) {
@ -113,7 +113,7 @@ void SocketStats::stats_update_socket_state(const Socket *const reference_id, so
void SocketStats::stats_update_peer(const Socket *const reference_id, const SocketAddress &peer) void SocketStats::stats_update_peer(const Socket *const reference_id, const SocketAddress &peer)
{ {
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
_mutex->lock(); _mutex->lock();
int position = get_entry_position(reference_id); int position = get_entry_position(reference_id);
if ((position >= 0) && (!_stats[position].peer)) { if ((position >= 0) && (!_stats[position].peer)) {
@ -125,7 +125,7 @@ void SocketStats::stats_update_peer(const Socket *const reference_id, const Sock
void SocketStats::stats_update_proto(const Socket *const reference_id, nsapi_protocol_t proto) void SocketStats::stats_update_proto(const Socket *const reference_id, nsapi_protocol_t proto)
{ {
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
_mutex->lock(); _mutex->lock();
int position = get_entry_position(reference_id); int position = get_entry_position(reference_id);
if (position >= 0) { if (position >= 0) {
@ -137,7 +137,7 @@ void SocketStats::stats_update_proto(const Socket *const reference_id, nsapi_pro
void SocketStats::stats_update_sent_bytes(const Socket *const reference_id, size_t sent_bytes) void SocketStats::stats_update_sent_bytes(const Socket *const reference_id, size_t sent_bytes)
{ {
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
_mutex->lock(); _mutex->lock();
int position = get_entry_position(reference_id); int position = get_entry_position(reference_id);
if ((position >= 0) && (sent_bytes > 0)) { if ((position >= 0) && (sent_bytes > 0)) {
@ -149,7 +149,7 @@ void SocketStats::stats_update_sent_bytes(const Socket *const reference_id, size
void SocketStats::stats_update_recv_bytes(const Socket *const reference_id, size_t recv_bytes) void SocketStats::stats_update_recv_bytes(const Socket *const reference_id, size_t recv_bytes)
{ {
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
_mutex->lock(); _mutex->lock();
int position = get_entry_position(reference_id); int position = get_entry_position(reference_id);
if ((position >= 0) && (recv_bytes > 0)) { if ((position >= 0) && (recv_bytes > 0)) {

View File

@ -17,7 +17,6 @@
#ifndef SOCKET_STATS_H #ifndef SOCKET_STATS_H
#define SOCKET_STATS_H #define SOCKET_STATS_H
#include "platform/mbed_stats.h"
#include "platform/SingletonPtr.h" #include "platform/SingletonPtr.h"
#include "platform/PlatformMutex.h" #include "platform/PlatformMutex.h"
#include "netsocket/Socket.h" #include "netsocket/Socket.h"
@ -99,7 +98,7 @@ public:
/** Update bytes received on socket, which is cumulative count per socket */ /** Update bytes received on socket, which is cumulative count per socket */
void stats_update_recv_bytes(const Socket *const reference_id, size_t recv_bytes); void stats_update_recv_bytes(const Socket *const reference_id, size_t recv_bytes);
#if defined(MBED_NW_STATS_ENABLED) #ifdef MBED_CONF_NSAPI_SOCKET_STATS_ENABLE
private: private:
static mbed_stats_socket_t _stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT]; static mbed_stats_socket_t _stats[MBED_CONF_NSAPI_SOCKET_STATS_MAX_COUNT];
static SingletonPtr<PlatformMutex> _mutex; static SingletonPtr<PlatformMutex> _mutex;

View File

@ -30,6 +30,14 @@
"dns-cache-size": { "dns-cache-size": {
"help": "Number of cached host name resolutions", "help": "Number of cached host name resolutions",
"value": 3 "value": 3
},
"socket-stats-enable": {
"help": "Enable network socket statistics",
"value": false
},
"socket-stats-max-count": {
"help": "Maximum number of socket statistics cached",
"value": 10
} }
}, },
"target_overrides": { "target_overrides": {

View File

@ -36,7 +36,6 @@ extern "C" {
#define MBED_CPU_STATS_ENABLED 1 #define MBED_CPU_STATS_ENABLED 1
#define MBED_HEAP_STATS_ENABLED 1 #define MBED_HEAP_STATS_ENABLED 1
#define MBED_THREAD_STATS_ENABLED 1 #define MBED_THREAD_STATS_ENABLED 1
#define MBED_NW_STATS_ENABLED 1
#endif #endif
/** Maximum memory regions reported by mbed-os memory statistics */ /** Maximum memory regions reported by mbed-os memory statistics */

View File

@ -11,6 +11,7 @@
}, },
"target_overrides": { "target_overrides": {
"*": { "*": {
"nsapi.socket-stats-enable": true,
"target.network-default-interface-type": "ETHERNET" "target.network-default-interface-type": "ETHERNET"
} }
} }

View File

@ -16,6 +16,7 @@
}, },
"target_overrides": { "target_overrides": {
"*": { "*": {
"nsapi.socket-stats-enable": true,
"target.network-default-interface-type": "ETHERNET" "target.network-default-interface-type": "ETHERNET"
} }
} }