aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Fischer <florian.fl.fischer@fau.de>2019-10-16 18:31:53 +0200
committerFlorian Fischer <florian.fl.fischer@fau.de>2019-10-16 18:31:53 +0200
commit451632863ec751c66ecf989975ab32bdbb8cb750 (patch)
treeeca1b682efec8a5496739940a83234600ddfe2c8
parentf075d76ed72f1f3472e997456fa5287b344059d3 (diff)
downloadallocbench-451632863ec751c66ecf989975ab32bdbb8cb750.tar.gz
allocbench-451632863ec751c66ecf989975ab32bdbb8cb750.zip
improve analysis: add cycles portions and fix top10 percentages
-rw-r--r--src/benchmarks/cfrac.py19
-rw-r--r--src/benchmarks/espresso.py12
2 files changed, 21 insertions, 10 deletions
diff --git a/src/benchmarks/cfrac.py b/src/benchmarks/cfrac.py
index 2829b77..0a0a8d5 100644
--- a/src/benchmarks/cfrac.py
+++ b/src/benchmarks/cfrac.py
@@ -16,10 +16,15 @@
# along with allocbench. If not, see <http://www.gnu.org/licenses/>.
"""cfrac is a single threaded implementation of the continued fraction factorization algorithm.
-It uses many small short-lived allocations. Factorizing 175451865205073170563711388363274837927895
-results in 43044885 allocator calls (malloc: 21522444, free: 21522441).
+It uses many small short-lived allocations.
+Factorizing 175451865205073170563711388363274837927895 results in
+43044885 allocator calls (malloc: 21522444, free: 21522441).
-Top 10 allocation sizes 1.00% of all allocations
+Allocator portion of total cycles measured using perf record/report:
+malloc 4.33%
+free 7.74%
+
+Top 10 allocation sizes 99.95% of all allocations
1. 18 B occurred 8172763 times
2. 28 B occurred 3781894 times
3. 10 B occurred 2989673 times
@@ -30,14 +35,16 @@ Top 10 allocation sizes 1.00% of all allocations
8. 14 B occurred 170914 times
9. 30 B occurred 21149 times
10. 44 B occurred 15922 times
-allocations <= 64 21522432
-allocations <= 1024 21522436
-allocations <= 4096 21522443
+
+allocations <= 64 21522432 100.00%
+allocations <= 1024 21522436 100.00%
+allocations <= 4096 21522443 100.00%
Histogram of sizes:
0 - 15 3363764 15.63% *******
16 - 31 18132778 84.25% ******************************************
32 - 47 25888 0.12%
+...
The relevant non functional allocator properties are the raw speed of the
API function as well as memory placement strategies with good data locality.
diff --git a/src/benchmarks/espresso.py b/src/benchmarks/espresso.py
index 4ffd843..68e474c 100644
--- a/src/benchmarks/espresso.py
+++ b/src/benchmarks/espresso.py
@@ -22,7 +22,11 @@ The file "largest.espresso" shipped with mimalloc-bench and allocbench generates
a workload with 3367364 allocator calls (malloc: 1659385, free: 1691851, realloc: 16128).
About 87% of all allocations are smaller than 64 Byte, the common cache line size.
-Top 10 allocation sizes 0.91% of all allocations
+Allocator portion of total cycles measured using perf record/report:
+malloc 8.64%
+free 5.04%
+
+Top 10 allocation sizes 90.73% of all allocations
1. 48 B occurred 615622 times
2. 16 B occurred 533267 times
3. 56 B occurred 235944 times
@@ -34,9 +38,9 @@ Top 10 allocation sizes 0.91% of all allocations
9. 272 B occurred 14644 times
10. 96 B occurred 13175 times
-allocations <= 64 1442648
-allocations <= 1024 1657509
-allocations <= 4096 1667112
+allocations <= 64 1442648 86.10%
+allocations <= 1024 1657509 98.93%
+allocations <= 4096 1667112 99.50%
The relevant non functional allocator properties are the raw speed of the
API function as well as memory placement strategies with good data locality.