1
1
#! /bin/bash
2
2
3
+ # How to launch from a colcon workspace:
4
+ # bash ./src/fastdds_statistics_backend/test/performance/memory_usage/run_memory_usage_test.sh --fastdds ./build/fastrtps/examples/cpp/dds/BasicConfigurationExample/BasicConfigurationExample --backend ./build/fastdds_statistics_backend/examples/cpp/HelloWorldExample/HelloWorldExample
5
+
3
6
# ###########################################################
4
7
# Script Arguments
5
8
# ###########################################################
6
9
7
10
WORKSPACE_DIR=$( pwd)
8
11
FASTDDS_EXAMPLE_EXECUTABLE=" ${WORKSPACE_DIR} /BasicConfigurationExample/BasicConfigurationExample"
9
- BACKEND_EXAMPLE_EXECUTABLE=" ${WORKSPACE_DIR} /HelloWorldExampleHelloWorldExample "
12
+ BACKEND_EXAMPLE_EXECUTABLE=" ${WORKSPACE_DIR} /HelloWorldExample/HelloWorldExample "
10
13
11
14
RESULT_PAHT=' ./result'
12
- RESULT_FILE=" memory_usage.csv"
13
- MEASURAMENT_RATE=0.2
15
+ RESULT_FILE=" backend_memory_usage.csv"
14
16
LIBRARIES_TO_MEASURE=" libfastcdr libfastrtps libfastdds_statistics_backend stack heap anon"
15
17
16
- ENTITIES_LOOP_ITERATIONS=2
17
- ENTITIES_LOOP_ELAPSED=10
18
+ ENTITIES_LOOP_ITERATIONS=5
19
+ ENTITIES_LOOP_ELAPSED=30
18
20
ENTITIES_IN_LOOP=3
19
21
STATISTIC_TOPICS=" HISTORY_LATENCY_TOPIC;NETWORK_LATENCY_TOPIC;PUBLICATION_THROUGHPUT_TOPIC;SUBSCRIPTION_THROUGHPUT_TOPIC;RTPS_SENT_TOPIC;RTPS_LOST_TOPIC;HEARTBEAT_COUNT_TOPIC;ACKNACK_COUNT_TOPIC;NACKFRAG_COUNT_TOPIC;GAP_COUNT_TOPIC;DATA_COUNT_TOPIC;RESENT_DATAS_TOPIC;SAMPLE_DATAS_TOPIC;PDP_PACKETS_TOPIC;EDP_PACKETS_TOPIC;DISCOVERY_TOPIC;PHYSICAL_DATA_TOPIC"
20
22
SLEEP_RESIDUAL_TIME=2
21
23
22
24
PUBLICATION_RATE=10
23
- NUMBER_OF_TOPICS=2
25
+ RESET_BACKEND=" "
26
+ BUMP_BACKEND=" "
24
27
28
+ DEBUG=0
25
29
26
30
# ###########################################################
27
31
# Functions needed in script
28
32
# ###########################################################
29
33
34
+ # pmap result:
35
+ # column 1: Initial memory address
36
+ # column 2: Virtual memory
37
+ # column 3: RSS
38
+
30
39
# TODO comment
31
40
get_memory_usage_from_library () {
32
41
# Get arguments
@@ -47,13 +56,16 @@ get_memory_usage_from_library () {
47
56
48
57
LINE_=${line}
49
58
50
- NEW_VALUE_WITH_K_=" $( echo -n " ${LINE_} " | awk ' {print $2}' ) "
59
+ # Column 1 ->
60
+ NEW_VALUE_WITH_K_=" $( echo -n " ${LINE_} " | awk ' {print $3}' ) "
51
61
52
- NEW_VALUE_=" $( echo -n " ${NEW_VALUE_WITH_K_::- 1} " ) "
62
+ # This is only needed without --extended to remove K
63
+ # NEW_VALUE_="$(echo -n "${NEW_VALUE_WITH_K_::-1}")"
64
+ NEW_VALUE_=${NEW_VALUE_WITH_K_}
53
65
54
66
RESULT_=$(( ${RESULT_} + ${NEW_VALUE_} ))
55
67
56
- done <<< " $(pmap ${PID_} | grep ${LIBRARY_NAME_})"
68
+ done <<< " $(pmap ${PID_} --extended | grep ${LIBRARY_NAME_})"
57
69
58
70
fi
59
71
@@ -83,13 +95,16 @@ print_memory_usage () {
83
95
done
84
96
85
97
# Print total
86
- TOTAL_MEMORY_USAGE_=" $( pmap ${PID_} | tail -n 1 | awk ' /[0-9]/K{print $2}' ) "
98
+ # TOTAL_MEMORY_USAGE_="$(pmap ${PID_} | tail -n 1 | awk '/[0-9]/K{print $2}')"
99
+ TOTAL_MEMORY_USAGE_=" $( pmap ${PID_} --extended | tail -n 1 | awk ' {print $4}' ) "
87
100
# If there are lines, analyze them
88
101
if [ ! -z " $PMAP_RESULT_ " ];
89
102
then
90
- echo -n " ${TOTAL_MEMORY_USAGE_::- 1} " >> ${RESULT_FILE_}
103
+ # This is only needed without --extended to remove K
104
+ # echo -n "${TOTAL_MEMORY_USAGE_::-1}" >> ${RESULT_FILE_}
105
+ echo -n " ${TOTAL_MEMORY_USAGE_} " >> ${RESULT_FILE_}
91
106
else
92
- echo -n " - " >> ${RESULT_FILE_}
107
+ echo -n " 0 " >> ${RESULT_FILE_}
93
108
fi
94
109
95
110
echo " " >> ${RESULT_FILE_}
132
147
shift # past argument
133
148
shift # past value
134
149
;;
135
- --measurament-rate)
136
- MEASURAMENT_RATE=" $2 "
137
- shift # past argument
138
- shift # past value
139
- ;;
140
150
--measurament-libraries)
141
151
LIBRARIES_TO_MEASURE=" $2 "
142
152
shift # past argument
149
159
shift # past value
150
160
;;
151
161
--loop-elapsed)
152
- ENTITIES_LOOP_ELAPSE =" $2 "
162
+ ENTITIES_LOOP_ELAPSED =" $2 "
153
163
shift # past argument
154
164
shift # past value
155
165
;;
163
173
shift # past argument
164
174
shift # past value
165
175
;;
166
- --residual-time)
167
- SLEEP_RESIDUAL_TIME=" $2 "
168
- shift # past argument
169
- shift # past value
170
- ;;
171
176
172
177
--publication-rate)
173
178
PUBLICATION_RATE=" $2 "
174
179
shift # past argument
175
180
shift # past value
176
181
;;
177
- --n-topics)
178
- NUMBER_OF_TOPICS=" $2 "
182
+ --reset)
183
+ RESET_BACKEND=" --reset "
184
+ shift # past argument
185
+ ;;
186
+ --bump)
187
+ BUMP_BACKEND=" --bump-file __tmp_backend_test_bump_ "
188
+ shift # past argument
189
+ ;;
190
+
191
+ --debug)
192
+ DEBUG=1
179
193
shift # past argument
180
- shift # past value
181
194
;;
182
195
183
196
* ) # unknown option
@@ -230,13 +243,20 @@ echo "total(KB)" >> ${RESULT_FILE_PATH}
230
243
# ###########################################################
231
244
echo
232
245
echo " ---------------------------------------------------------------------------"
233
- echo " Executing Fast DDS Statistics Backend exaple ${BACKEND_EXAMPLE_EXECUTABLE} "
246
+ echo " Executing Fast DDS Statistics Backend example ${BACKEND_EXAMPLE_EXECUTABLE} "
234
247
echo " ---------------------------------------------------------------------------"
235
248
echo
236
249
237
- ${BACKEND_EXAMPLE_EXECUTABLE} monitor --time=1000 &
238
- # ${BACKEND_EXAMPLE_EXECUTABLE} monitor --time=1000 > /dev/null 2>&1 &
239
- BACKEND_EXAMPLE_PID=$!
250
+ RESET_TIME=$(( ${ENTITIES_LOOP_ELAPSED} + ((${SLEEP_RESIDUAL_TIME} * 2 )* ${ENTITIES_IN_LOOP} )+ (${SLEEP_RESIDUAL_TIME} * 2 )) )
251
+
252
+ if [ $DEBUG -eq 1 ];
253
+ then
254
+ ${BACKEND_EXAMPLE_EXECUTABLE} monitor ${RESET_BACKEND} ${BUMP_BACKEND} --time=${RESET_TIME} &
255
+ BACKEND_EXAMPLE_PID=$!
256
+ else
257
+ ${BACKEND_EXAMPLE_EXECUTABLE} monitor ${RESET_BACKEND} ${BUMP_BACKEND} --time=${RESET_TIME} > /dev/null 2>&1 &
258
+ BACKEND_EXAMPLE_PID=$!
259
+ fi
240
260
241
261
242
262
# ###########################################################
256
276
echo
257
277
258
278
# Excute as many entities as required
279
+ declare -a fastdds_entities_pid=()
259
280
# TODO
260
- FASTDDS_STATISTICS=" ${STATISTIC_TOPICS} " ${FASTDDS_EXAMPLE_EXECUTABLE} publisher --interval ${PUBLICATION_RATE} --topic " TestTopic${i} " > /dev/null 2>&1 &
261
- PUBLISHER_PID=$!
262
- sleep ${SLEEP_RESIDUAL_TIME}
263
- FASTDDS_STATISTICS=" ${STATISTIC_TOPICS} " ${FASTDDS_EXAMPLE_EXECUTABLE} subscriber --topic " TestTopic${i} " > /dev/null 2>&1 &
264
- SUBSCRIBER_PID=$!
265
- sleep ${SLEEP_RESIDUAL_TIME}
281
+ for j in $( seq 1 ${ENTITIES_IN_LOOP} ) ;
282
+ do
283
+ FASTDDS_STATISTICS=" ${STATISTIC_TOPICS} " ${FASTDDS_EXAMPLE_EXECUTABLE} publisher --interval ${PUBLICATION_RATE} --topic " TestTopic${i} " > /dev/null 2>&1 &
284
+ fastdds_entities_pid+=($! )
285
+ sleep ${SLEEP_RESIDUAL_TIME}
266
286
267
- # Store memory usage measure
268
- print_memory_usage " ${BACKEND_EXAMPLE_PID} " " ${LIBRARIES_TO_MEASURE} " " ${RESULT_FILE_PATH} "
287
+ FASTDDS_STATISTICS=" ${STATISTIC_TOPICS} " ${FASTDDS_EXAMPLE_EXECUTABLE} subscriber --topic " TestTopic${i} " > /dev/null 2>&1 &
288
+ fastdds_entities_pid+=($! )
289
+ sleep ${SLEEP_RESIDUAL_TIME}
290
+
291
+ # Store memory usage measure
292
+ print_memory_usage " ${BACKEND_EXAMPLE_PID} " " ${LIBRARIES_TO_MEASURE} " " ${RESULT_FILE_PATH} "
293
+ done
269
294
270
295
# Sleep for some time
271
296
sleep ${ENTITIES_LOOP_ELAPSED}
275
300
276
301
# Kill entities
277
302
echo " Killing Fast DDS Entities"
278
- kill ${PUBLISHER_PID}
279
- kill ${SUBSCRIBER_PID}
303
+ for pid_value in " ${fastdds_entities_pid[@]} "
304
+ do
305
+ echo " Killing PID ${pid_value} "
306
+ kill $pid_value
307
+ done
280
308
281
309
# Store memory usage measure
282
310
sleep ${SLEEP_RESIDUAL_TIME}
283
311
print_memory_usage " ${BACKEND_EXAMPLE_PID} " " ${LIBRARIES_TO_MEASURE} " " ${RESULT_FILE_PATH} "
284
312
313
+ # Wait for data to be removed and store measure
314
+ sleep ${SLEEP_RESIDUAL_TIME}
315
+ print_memory_usage " ${BACKEND_EXAMPLE_PID} " " ${LIBRARIES_TO_MEASURE} " " ${RESULT_FILE_PATH} "
316
+
285
317
done
286
318
287
319
# ###########################################################
0 commit comments