mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-11-19 01:42:58 +01:00
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.
This commit is contained in:
parent
047b5e2af1
commit
d22a234ed2
@ -124,6 +124,11 @@ size_t CSerializedNetMsg::GetMemoryUsage() const noexcept
|
||||
return sizeof(*this) + memusage::DynamicUsage(m_type) + memusage::DynamicUsage(data);
|
||||
}
|
||||
|
||||
size_t CNetMessage::GetMemoryUsage() const noexcept
|
||||
{
|
||||
return sizeof(*this) + memusage::DynamicUsage(m_type) + m_recv.GetMemoryUsage();
|
||||
}
|
||||
|
||||
void CConnman::AddAddrFetch(const std::string& strDest)
|
||||
{
|
||||
LOCK(m_addr_fetches_mutex);
|
||||
@ -3769,7 +3774,7 @@ void CNode::MarkReceivedMsgsForProcessing()
|
||||
for (const auto& msg : vRecvMsg) {
|
||||
// vRecvMsg contains only completed CNetMessage
|
||||
// the single possible partially deserialized message are held by TransportDeserializer
|
||||
nSizeAdded += msg.m_raw_message_size;
|
||||
nSizeAdded += msg.GetMemoryUsage();
|
||||
}
|
||||
|
||||
LOCK(m_msg_process_queue_mutex);
|
||||
@ -3786,7 +3791,7 @@ std::optional<std::pair<CNetMessage, bool>> CNode::PollMessage()
|
||||
std::list<CNetMessage> msgs;
|
||||
// Just take one message
|
||||
msgs.splice(msgs.begin(), m_msg_process_queue, m_msg_process_queue.begin());
|
||||
m_msg_process_queue_size -= msgs.front().m_raw_message_size;
|
||||
m_msg_process_queue_size -= msgs.front().GetMemoryUsage();
|
||||
fPauseRecv = m_msg_process_queue_size > m_recv_flood_size;
|
||||
|
||||
return std::make_pair(std::move(msgs.front()), !m_msg_process_queue.empty());
|
||||
|
@ -245,6 +245,9 @@ public:
|
||||
CNetMessage(const CNetMessage&) = delete;
|
||||
CNetMessage& operator=(CNetMessage&&) = default;
|
||||
CNetMessage& operator=(const CNetMessage&) = delete;
|
||||
|
||||
/** Compute total memory usage of this object (own memory + any dynamic memory). */
|
||||
size_t GetMemoryUsage() const noexcept;
|
||||
};
|
||||
|
||||
/** The Transport converts one connection's sent messages to wire bytes, and received bytes back. */
|
||||
|
Loading…
Reference in New Issue
Block a user