125
125
}
126
126
127
127
print_result_tsv_header () {
128
- printf " Test name\tTest warmup\tTest iterations\tTest requests\tPHP\tPHP Commit hash\tPHP Commit URL\tMin\tMax\tStd dev\tAverage\tAverage diff %%\tMedian\tMedian diff %%\tMemory usage\n" >> " $1 .tsv"
128
+ printf " Test name\tTest warmup\tTest iterations\tTest requests\tPHP\tPHP Commit hash\tPHP Commit URL\tMin\tMax\tStd dev\tAverage\tAverage diff %%\tMedian\tMedian diff %%\tInstruction count\n\ tMemory usage\n" >> " $1 .tsv"
129
129
}
130
130
131
131
print_result_md_header () {
@@ -137,8 +137,8 @@ print_result_md_header () {
137
137
cat << EOF >> "$1 .md"
138
138
### $TEST_NAME - $description (sec)
139
139
140
- | PHP | Min | Max | Std dev | Average | Average diff % | Median | Median diff % | Memory |
141
- |-------------|-------------|-------------|--------------|------------|-----------------|------------|---------------|---------------|
140
+ | PHP | Min | Max | Std dev | Average | Average diff % | Median | Median diff % | Instr count | Memory |
141
+ |-------------|-------------|-------------|--------------|------------|-----------------|------------|---------------|---------------|---------------|
142
142
EOF
143
143
}
144
144
@@ -148,7 +148,8 @@ print_result_value () {
148
148
url=" ${PHP_REPO// .git/ } /commit/$commit_hash "
149
149
150
150
results=" $( cat " $1 " ) "
151
- memory_result=" $( cat " $2 " ) "
151
+ instruction_count=" $( cat " $2 " ) "
152
+ memory_result=" $( cat " $3 " ) "
152
153
153
154
min=" $( min " $results " ) "
154
155
max=" $( max " $results " ) "
@@ -165,14 +166,14 @@ print_result_value () {
165
166
std_dev=" $( std_deviation " $results " ) "
166
167
memory_usage=" $( echo " scale=3;${memory_result} /1024" | bc -l) "
167
168
168
- printf " %s\t%d\t%d\t%d\t%s\t%s\t%s\t%.5f\t%.5f\t%.5f\t%.5f\t%.2f\t%.5f\t%.2f\t%.2f\n" \
169
+ printf " %s\t%d\t%d\t%d\t%s\t%s\t%s\t%.5f\t%.5f\t%.5f\t%.5f\t%.2f\t%.5f\t%.2f\t%d\t% .2f\n" \
169
170
" $TEST_NAME " " $TEST_WARMUP " " $TEST_ITERATIONS " " $TEST_REQUESTS " \
170
171
" $PHP_NAME " " $commit_hash " " $url " \
171
- " $min " " $max " " $std_dev " " $average " " $average_diff " " $median " " $median_diff " " $memory_usage " >> " $3 .tsv"
172
+ " $min " " $max " " $std_dev " " $average " " $average_diff " " $median " " $median_diff " " $instruction_count " " $ memory_usage" >> " $4 .tsv"
172
173
173
- if [ " $4 " -eq " 1" ]; then
174
- printf " |[%s]($url )|%.5f|%.5f|%.5f|%.5f|%.2f%%|%.5f|%.2f%%|%.2f MB|\n" \
175
- " $PHP_NAME " " $min " " $max " " $std_dev " " $average " " $average_diff " " $median " " $median_diff " " $memory_usage " >> " $3 .md"
174
+ if [ " $5 " -eq " 1" ]; then
175
+ printf " |[%s]($url )|%.5f|%.5f|%.5f|%.5f|%.2f%%|%.5f|%.2f%%|%d|% .2f MB|\n" \
176
+ " $PHP_NAME " " $min " " $max " " $std_dev " " $average " " $average_diff " " $median " " $median_diff " " $instruction_count " " $ memory_usage" >> " $4 .md"
176
177
fi
177
178
}
178
179
@@ -209,13 +210,21 @@ run_cgi () {
209
210
last_cpu=" $(( cpu_count- 1 )) "
210
211
211
212
if [ " $1 " = " quiet" ]; then
212
- taskset -c " $last_cpu " $php_source_path /sapi/cgi/php-cgi $opcache -T " $2 ,$3 " " $PROJECT_ROOT /$4 " > /dev/null
213
+ taskset -c " $last_cpu " \
214
+ $php_source_path /sapi/cgi/php-cgi $opcache -T " $2 ,$3 " " $PROJECT_ROOT /$4 " > /dev/null
213
215
elif [ " $1 " = " verbose" ]; then
214
- taskset -c " $last_cpu " $php_source_path /sapi/cgi/php-cgi $opcache -T " $2 ,$3 " " $PROJECT_ROOT /$4 "
216
+ taskset -c " $last_cpu " \
217
+ $php_source_path /sapi/cgi/php-cgi $opcache -T " $2 ,$3 " " $PROJECT_ROOT /$4 "
218
+ elif [ " $1 " = " instruction_count" ]; then
219
+ taskset -c " $last_cpu " \
220
+ valgrind --tool=callgrind --dump-instr=no -- \
221
+ $php_source_path /sapi/cgi/php-cgi $opcache -q -T " $2 ,$3 " " $PROJECT_ROOT /$4 " > /dev/null
215
222
elif [ " $1 " = " memory" ]; then
216
- /usr/bin/time -v taskset -c " $last_cpu " $php_source_path /sapi/cgi/php-cgi $opcache -q -T " $2 ,$3 " " $PROJECT_ROOT /$4 " > /dev/null
223
+ /usr/bin/time -v taskset -c " $last_cpu " \
224
+ $php_source_path /sapi/cgi/php-cgi $opcache -q -T " $2 ,$3 " " $PROJECT_ROOT /$4 " > /dev/null
217
225
else
218
- taskset -c " $last_cpu " $php_source_path /sapi/cgi/php-cgi $opcache -q -T " $2 ,$3 " " $PROJECT_ROOT /$4 "
226
+ taskset -c " $last_cpu " \
227
+ $php_source_path /sapi/cgi/php-cgi $opcache -q -T " $2 ,$3 " " $PROJECT_ROOT /$4 "
219
228
fi
220
229
elif [[ " $INFRA_RUNNER " == " docker" ]]; then
221
230
if [[ " $INFRA_ENVIRONMENT " == " local" ]]; then
@@ -232,19 +241,31 @@ run_cgi () {
232
241
fi
233
242
}
234
243
244
+ format_instruction_count_log_file () {
245
+ result=" $( grep " == Collected : " " $1 " ) "
246
+ echo " $result " > " $1 "
247
+ sed -i" .original" -E " s/==[0-9]+== Collected : //g" " $1 "
248
+ rm " $1 .original"
249
+ }
250
+
251
+ format_memory_log_file () {
252
+ result=" $( grep " Maximum resident set size" " $1 " ) "
253
+ echo " $result " > " $1 "
254
+ sed -i" .original" " s/ Maximum resident set size (kbytes): //g" " $1 "
255
+ rm " $1 .original"
256
+ }
257
+
235
258
run_real_benchmark () {
236
259
# Benchmark
237
260
run_cgi " verbose" " 0" " 1" " $1 " " $2 " " $3 "
261
+ run_cgi " instruction_count" " 10" " 10" " $1 " " $2 " " $3 " 2>&1 | tee -a " $instruction_count_log_file "
238
262
run_cgi " memory" " $TEST_WARMUP " " $TEST_REQUESTS " " $1 " " $2 " " $3 " 2>&1 | tee -a " $memory_log_file "
239
263
for b in $( seq $TEST_ITERATIONS ) ; do
240
264
run_cgi " quiet" " $TEST_WARMUP " " $TEST_REQUESTS " " $1 " " $2 " " $3 " 2>&1 | tee -a " $log_file "
241
265
done
242
266
243
- # Format memory log
244
- result=" $( grep " Maximum resident set size" " $memory_log_file " ) "
245
- echo " $result " > " $memory_log_file "
246
- sed -i" .original" " s/ Maximum resident set size (kbytes): //g" " $memory_log_file "
247
- rm " $memory_log_file .original"
267
+ format_instruction_count_log_file " $instruction_count_log_file "
268
+ format_memory_log_file " $memory_log_file "
248
269
249
270
# Format log
250
271
sed -i" .original" " /^[[:space:]]*$/d" " $log_file "
@@ -255,14 +276,12 @@ run_real_benchmark () {
255
276
256
277
run_micro_benchmark () {
257
278
# Benchmark
279
+ run_cgi " instruction_count" " 2" " 2" " $1 " " " " " 2>&1 | tee -a " $instruction_count_log_file "
258
280
run_cgi " memory" " 0" " $TEST_WARMUP " " $1 " " " " " 2>&1 | tee -a " $memory_log_file "
259
281
run_cgi " normal" " $TEST_WARMUP " " $TEST_ITERATIONS " " $1 " " " " " 2>&1 | tee -a " $log_file "
260
282
261
- # Format memory log
262
- result=" $( grep " Maximum resident set size" " $memory_log_file " ) "
263
- echo " $result " > " $memory_log_file "
264
- sed -i" .original" " s/ Maximum resident set size (kbytes): //g" " $memory_log_file "
265
- rm " $memory_log_file .original"
283
+ format_instruction_count_log_file " $instruction_count_log_file "
284
+ format_memory_log_file " $memory_log_file "
266
285
267
286
# Format log
268
287
results=" $( grep " Total" " $log_file " ) "
@@ -329,6 +348,7 @@ run_benchmark () {
329
348
330
349
log_dir=" $result_dir "
331
350
log_file=" $log_dir /${PHP_ID} .log"
351
+ instruction_count_log_file=" $log_dir /${PHP_ID} .instruction_count.log"
332
352
memory_log_file=" $log_dir /${PHP_ID} .memory.log"
333
353
mkdir -p " $log_dir "
334
354
@@ -338,8 +358,8 @@ run_benchmark () {
338
358
339
359
run_test
340
360
341
- print_result_value " $log_file " " $memory_log_file " " $result_file " " 1"
342
- print_result_value " $log_file " " $memory_log_file " " $final_result_file " " 0"
361
+ print_result_value " $log_file " " $instruction_count_log_file " " $ memory_log_file" " $result_file " " 1"
362
+ print_result_value " $log_file " " $instruction_count_log_file " " $ memory_log_file" " $final_result_file " " 0"
343
363
done
344
364
345
365
echo " " >> " $final_result_file .md"
0 commit comments