Skip to content

Commit b54cb8e

Browse files
Improve max_allocations calculation on SHM transport (#5659)
* Refs #22841. Improve max_allocations calculation. Signed-off-by: Miguel Company <[email protected]> * Refs #22841. Consider a mean message size of half the max message size. Signed-off-by: Miguel Company <[email protected]> * Refs #22841. Move `shm_default_segment_size` to global scope. Signed-off-by: Miguel Company <[email protected]> * Refs #22841. Move `SharedMemTransportDescriptor` constants. Signed-off-by: Miguel Company <[email protected]> * Refs #22841. Change calculation of `mean_message_size`. Signed-off-by: Miguel Company <[email protected]> --------- Signed-off-by: Miguel Company <[email protected]>
1 parent 3d7dcab commit b54cb8e

File tree

4 files changed

+32
-22
lines changed

4 files changed

+32
-22
lines changed

include/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.hpp

+10-5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#ifndef FASTDDS_RTPS_TRANSPORT_SHARED_MEM__SHAREDMEMTRANSPORTDESCRIPTOR_HPP
2121
#define FASTDDS_RTPS_TRANSPORT_SHARED_MEM__SHAREDMEMTRANSPORTDESCRIPTOR_HPP
2222

23+
#include <cstdint>
2324
#include <string>
2425

2526
#include <fastdds/rtps/attributes/ThreadSettings.hpp>
@@ -48,6 +49,10 @@ class TransportInterface;
4849
*/
4950
struct SharedMemTransportDescriptor : public PortBasedTransportDescriptor
5051
{
52+
static constexpr uint32_t shm_default_segment_size = 0;
53+
static constexpr uint32_t shm_default_port_queue_capacity = 512;
54+
static constexpr uint32_t shm_default_healthy_check_timeout_ms = 1000;
55+
5156
//! Destructor
5257
virtual ~SharedMemTransportDescriptor() = default;
5358

@@ -154,13 +159,13 @@ struct SharedMemTransportDescriptor : public PortBasedTransportDescriptor
154159

155160
private:
156161

157-
uint32_t segment_size_;
158-
uint32_t port_queue_capacity_;
159-
uint32_t healthy_check_timeout_ms_;
160-
std::string rtps_dump_file_;
162+
uint32_t segment_size_ = shm_default_segment_size;
163+
uint32_t port_queue_capacity_ = shm_default_port_queue_capacity;
164+
uint32_t healthy_check_timeout_ms_ = shm_default_healthy_check_timeout_ms;
165+
std::string rtps_dump_file_ {""};
161166

162167
//! Thread settings for the transport dump thread
163-
ThreadSettings dump_thread_;
168+
ThreadSettings dump_thread_ {};
164169

165170
};
166171

src/cpp/rtps/transport/shared_mem/SharedMemTransport.cpp

+13-4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// limitations under the License.
1414

1515
#include <algorithm>
16+
#include <cstdint>
1617
#include <cstring>
1718
#include <thread>
1819
#include <utility>
@@ -26,6 +27,7 @@
2627
#include <fastdds/rtps/common/Locator.hpp>
2728
#include <fastdds/rtps/transport/SenderResource.hpp>
2829
#include <fastdds/rtps/transport/TransportInterface.hpp>
30+
#include <fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.hpp>
2931

3032
#include <rtps/messages/CDRMessage.hpp>
3133
#include <rtps/messages/MessageReceiver.h>
@@ -45,6 +47,9 @@ namespace eprosima {
4547
namespace fastdds {
4648
namespace rtps {
4749

50+
// TODO(Adolfo): Calculate this value from UDP sockets buffers size.
51+
static constexpr uint32_t shm_default_segment_size = 512 * 1024;
52+
4853
TransportInterface* SharedMemTransportDescriptor::create_transport() const
4954
{
5055
return new SharedMemTransport(*this);
@@ -271,8 +276,6 @@ bool SharedMemTransport::init(
271276
const uint32_t& max_msg_size_no_frag)
272277
{
273278
(void) max_msg_size_no_frag;
274-
// TODO(Adolfo): Calculate this value from UDP sockets buffers size.
275-
static constexpr uint32_t shm_default_segment_size = 512 * 1024;
276279

277280
if (configuration_.segment_size() == 0)
278281
{
@@ -301,8 +304,14 @@ bool SharedMemTransport::init(
301304
{
302305
return false;
303306
}
304-
shared_mem_segment_ = shared_mem_manager_->create_segment(configuration_.segment_size(),
305-
configuration_.port_queue_capacity());
307+
constexpr uint32_t mean_message_size =
308+
shm_default_segment_size / SharedMemTransportDescriptor::shm_default_port_queue_capacity;
309+
uint32_t max_allocations = configuration_.segment_size() / mean_message_size;
310+
if (configuration_.port_queue_capacity() > max_allocations)
311+
{
312+
max_allocations = configuration_.port_queue_capacity();
313+
}
314+
shared_mem_segment_ = shared_mem_manager_->create_segment(configuration_.segment_size(), max_allocations);
306315

307316
// Memset the whole segment to zero in order to force physical map of the buffer
308317
auto buffer = shared_mem_segment_->alloc_buffer(configuration_.segment_size(),

src/cpp/rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp

-8
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,11 @@ namespace eprosima {
2323
namespace fastdds {
2424
namespace rtps {
2525

26-
static constexpr uint32_t shm_default_segment_size = 0;
27-
static constexpr uint32_t shm_default_port_queue_capacity = 512;
28-
static constexpr uint32_t shm_default_healthy_check_timeout_ms = 1000;
29-
3026
//*********************************************************
3127
// SharedMemTransportDescriptor
3228
//*********************************************************
3329
SharedMemTransportDescriptor::SharedMemTransportDescriptor()
3430
: PortBasedTransportDescriptor(shm_default_segment_size, s_maximumInitialPeersRange)
35-
, segment_size_(shm_default_segment_size)
36-
, port_queue_capacity_(shm_default_port_queue_capacity)
37-
, healthy_check_timeout_ms_(shm_default_healthy_check_timeout_ms)
38-
, rtps_dump_file_("")
3931
{
4032
maxMessageSize = s_maximumMessageSize;
4133
}

test/mock/rtps/SharedMemTransportDescriptor/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.hpp

+9-5
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,12 @@ class TransportInterface;
3737
*
3838
* @ingroup TRANSPORT_MODULE
3939
*/
40-
typedef struct SharedMemTransportDescriptor : public PortBasedTransportDescriptor
40+
struct SharedMemTransportDescriptor : public PortBasedTransportDescriptor
4141
{
42+
static constexpr uint32_t shm_default_segment_size = 0;
43+
static constexpr uint32_t shm_default_port_queue_capacity = 512;
44+
static constexpr uint32_t shm_default_healthy_check_timeout_ms = 1000;
45+
4246
virtual ~SharedMemTransportDescriptor()
4347
{
4448

@@ -130,13 +134,13 @@ typedef struct SharedMemTransportDescriptor : public PortBasedTransportDescripto
130134

131135
private:
132136

133-
uint32_t segment_size_;
134-
uint32_t port_queue_capacity_;
135-
uint32_t healthy_check_timeout_ms_;
137+
uint32_t segment_size_ = shm_default_segment_size;
138+
uint32_t port_queue_capacity_ = shm_default_port_queue_capacity;
139+
uint32_t healthy_check_timeout_ms_ = shm_default_healthy_check_timeout_ms;
136140
std::string rtps_dump_file_;
137141
ThreadSettings dump_thread_;
138142

139-
}SharedMemTransportDescriptor;
143+
};
140144

141145
} // namespace rtps
142146
} // namespace fastdds

0 commit comments

Comments
 (0)