Skip to content

Commit 8041716

Browse files
laanwjjanus
authored andcommitted
net: Use actual memory size in receive buffer accounting
Add a method CNetMessage::GetMemoryUsage and use this for accounting of the size of the process receive queue instead of the raw message size. This ensures that allocation and deserialization overhead is taken into account.
1 parent 0200c6e commit 8041716

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

src/net.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,11 @@ size_t CSerializedNetMsg::GetMemoryUsage() const noexcept
126126
return sizeof(*this) + memusage::DynamicUsage(m_type) + memusage::DynamicUsage(data);
127127
}
128128

129+
size_t CNetMessage::GetMemoryUsage() const noexcept
130+
{
131+
return sizeof(*this) + memusage::DynamicUsage(m_type) + m_recv.GetMemoryUsage();
132+
}
133+
129134
void CConnman::AddAddrFetch(const std::string& strDest)
130135
{
131136
LOCK(m_addr_fetches_mutex);
@@ -3770,7 +3775,7 @@ void CNode::MarkReceivedMsgsForProcessing()
37703775
for (const auto& msg : vRecvMsg) {
37713776
// vRecvMsg contains only completed CNetMessage
37723777
// the single possible partially deserialized message are held by TransportDeserializer
3773-
nSizeAdded += msg.m_raw_message_size;
3778+
nSizeAdded += msg.GetMemoryUsage();
37743779
}
37753780

37763781
LOCK(m_msg_process_queue_mutex);
@@ -3787,7 +3792,7 @@ std::optional<std::pair<CNetMessage, bool>> CNode::PollMessage()
37873792
std::list<CNetMessage> msgs;
37883793
// Just take one message
37893794
msgs.splice(msgs.begin(), m_msg_process_queue, m_msg_process_queue.begin());
3790-
m_msg_process_queue_size -= msgs.front().m_raw_message_size;
3795+
m_msg_process_queue_size -= msgs.front().GetMemoryUsage();
37913796
fPauseRecv = m_msg_process_queue_size > m_recv_flood_size;
37923797

37933798
return std::make_pair(std::move(msgs.front()), !m_msg_process_queue.empty());

src/net.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,9 @@ class CNetMessage
245245
CNetMessage(const CNetMessage&) = delete;
246246
CNetMessage& operator=(CNetMessage&&) = default;
247247
CNetMessage& operator=(const CNetMessage&) = delete;
248+
249+
/** Compute total memory usage of this object (own memory + any dynamic memory). */
250+
size_t GetMemoryUsage() const noexcept;
248251
};
249252

250253
/** The Transport converts one connection's sent messages to wire bytes, and received bytes back. */

0 commit comments

Comments
 (0)