From d4e362cd76b49822c798d9be84330e5e05490213 Mon Sep 17 00:00:00 2001 From: SChernykh Date: Sat, 7 May 2022 12:29:45 +0200 Subject: [PATCH] TCPServer: optimized Client struct size --- src/log.h | 2 +- src/stratum_server.cpp | 4 ++-- src/stratum_server.h | 2 +- src/tcp_server.h | 10 +++++----- src/tcp_server.inl | 12 +++++++----- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/log.h b/src/log.h index c664cb3..21a0fa6 100644 --- a/src/log.h +++ b/src/log.h @@ -443,7 +443,7 @@ struct log::Stream::Entry> const int len = std::min(data.m_len, log::Stream::BUF_SIZE); if (s.m_pos < len) { - memset(buf + s.m_pos, ' ', len - s.m_pos); + memset(buf + s.m_pos, ' ', static_cast(len) - s.m_pos); s.m_pos = len; } diff --git a/src/stratum_server.cpp b/src/stratum_server.cpp index 1dfd854..2502151 100644 --- a/src/stratum_server.cpp +++ b/src/stratum_server.cpp @@ -806,9 +806,9 @@ void StratumServer::on_after_share_found(uv_work_t* req, int /*status*/) StratumServer::StratumClient::StratumClient() : m_rpcId(0) + , m_perConnectionJobId(0) , m_connectedTime(0) , m_jobs{} - , m_perConnectionJobId(0) , m_customDiff{} , m_customUser{} { @@ -824,9 +824,9 @@ void StratumServer::StratumClient::reset() { Client::reset(); m_rpcId = 0; + m_perConnectionJobId = 0; m_connectedTime = 0; memset(m_jobs, 0, sizeof(m_jobs)); - m_perConnectionJobId = 0; m_customDiff = {}; memset(m_customUser, 0, sizeof(m_customUser)); } diff --git a/src/stratum_server.h b/src/stratum_server.h index 70ab944..1a97279 100644 --- a/src/stratum_server.h +++ b/src/stratum_server.h @@ -52,6 +52,7 @@ public: bool process_submit(rapidjson::Document& doc, uint32_t id); uint32_t m_rpcId; + uint32_t m_perConnectionJobId; uint64_t m_connectedTime; uv_mutex_t m_jobsLock; @@ -63,7 +64,6 @@ public: uint64_t target; } m_jobs[4]; - uint32_t m_perConnectionJobId; difficulty_type m_customDiff; char m_customUser[32]; }; diff --git a/src/tcp_server.h b/src/tcp_server.h index d902d91..d1732ec 100644 --- a/src/tcp_server.h +++ b/src/tcp_server.h @@ -70,6 +70,8 @@ public: void init_addr_string(bool is_v6, const sockaddr_storage* peer_addr); + alignas(8) char m_readBuf[READ_BUF_SIZE]; + TCPServer* m_owner; // Used to maintain connected clients list @@ -77,18 +79,16 @@ public: Client* m_next; uv_tcp_t m_socket; - uv_connect_t m_connectRequest; bool m_isV6; bool m_isIncoming; + bool m_readBufInUse; + uint32_t m_numRead; + raw_ip m_addr; int m_port; char m_addrString[64]; - bool m_readBufInUse; - char m_readBuf[READ_BUF_SIZE]; - uint32_t m_numRead; - std::atomic m_resetCounter{ 0 }; }; diff --git a/src/tcp_server.inl b/src/tcp_server.inl index 88d4276..7109151 100644 --- a/src/tcp_server.inl +++ b/src/tcp_server.inl @@ -376,8 +376,11 @@ bool TCPServer::connect_to_peer_nolock(Client* cl return false; } - client->m_connectRequest.data = client; - err = uv_tcp_connect(&client->m_connectRequest, &client->m_socket, addr, on_connect); + uv_connect_t* connect_request = reinterpret_cast(client->m_readBuf); + memset(connect_request, 0, sizeof(uv_connect_t)); + + connect_request->data = client; + err = uv_tcp_connect(connect_request, &client->m_socket, addr, on_connect); if (err) { LOGERR(1, "failed to initiate tcp connection, error " << uv_err_name(err)); m_pendingConnections.erase(client->m_addr); @@ -831,14 +834,13 @@ void TCPServer::Client::reset() m_prev = nullptr; m_next = nullptr; memset(&m_socket, 0, sizeof(m_socket)); - memset(&m_connectRequest, 0, sizeof(m_connectRequest)); m_isV6 = false; m_isIncoming = false; + m_readBufInUse = false; + m_numRead = 0; m_addr = {}; m_port = -1; m_addrString[0] = '\0'; - m_readBufInUse = false; - m_numRead = 0; } template