1 | #!/usr/bin/env bash
|
2 | #
|
3 | # Usage:
|
4 | # benchmarks/mimalloc.sh <function name>
|
5 |
|
6 | set -o nounset
|
7 | set -o pipefail
|
8 | set -o errexit
|
9 |
|
10 | # Docs: https://github.com/microsoft/mimalloc
|
11 |
|
12 | readonly DIR=~/git/oilshell/mimalloc
|
13 |
|
14 | build-ld-preload() {
|
15 | gcc -Wall -fPIC -shared -o _tmp/ld_preload_hook.so demo/ld_preload_hook.c -ldl
|
16 |
|
17 | gcc -o _tmp/ld_preload_main demo/ld_preload_main.c
|
18 | }
|
19 |
|
20 | #
|
21 | # These work. mimalloc doesn't work?
|
22 | #
|
23 |
|
24 | run-main-hook() {
|
25 | LD_PRELOAD=_tmp/ld_preload_hook.so _tmp/ld_preload_main || true
|
26 | }
|
27 |
|
28 | run-osh-hook() {
|
29 | LD_PRELOAD=_tmp/ld_preload_hook.so _bin/cxx-dbg/osh -c 'echo hi'
|
30 | }
|
31 |
|
32 |
|
33 | #
|
34 | # Mimalloc
|
35 | #
|
36 |
|
37 | build-mimalloc() {
|
38 | pushd $DIR
|
39 |
|
40 | # Unity build!
|
41 | # -fPIC for shared library
|
42 | gcc -O2 -fPIC -I include -o mimalloc.o -c src/static.c
|
43 | ls -l mimalloc.*
|
44 |
|
45 | # -lpthread required
|
46 | gcc -shared -o mimalloc.so mimalloc.o -lpthread
|
47 |
|
48 | popd
|
49 | }
|
50 |
|
51 | build-main() {
|
52 | ### static build of main + mimalloc
|
53 |
|
54 | # Note that alloc.c #includes alloc-override.c
|
55 |
|
56 | gcc -O2 -I $DIR/include -o _tmp/mimalloc.o -c $DIR/src/static.c
|
57 |
|
58 | gcc -O2 -o _tmp/ld_preload_main.o -c demo/ld_preload_main.c
|
59 | file _tmp/ld_preload_main.o
|
60 |
|
61 | #gcc -o _tmp/main _tmp/ld_preload_main.o ../mimalloc/mimalloc.o -lpthread
|
62 | #gcc -o _tmp/main ../mimalloc/mimalloc.o _tmp/ld_preload_main.o -lpthread
|
63 |
|
64 | gcc -o _tmp/main _tmp/mimalloc.o _tmp/ld_preload_main.o -lpthread
|
65 | file _tmp/main
|
66 |
|
67 | nm _tmp/main | grep -i malloc
|
68 |
|
69 | set -x
|
70 | MIMALLOC_VERBOSE=1 _tmp/main
|
71 | }
|
72 |
|
73 | # https://microsoft.github.io/mimalloc/environment.html
|
74 |
|
75 | # Not working, try STATIC linking
|
76 | # https://microsoft.github.io/mimalloc/overrides.html
|
77 |
|
78 | run-main-mim() {
|
79 | # Doesn't show stats?
|
80 | # MIMALLOC_SHOW_STATS=1 LD_PRELOAD=$DIR/mimalloc.so ls
|
81 |
|
82 | # Works
|
83 | MIMALLOC_VERBOSE=1 LD_PRELOAD=$DIR/mimalloc.so \
|
84 | _tmp/ld_preload_main
|
85 | }
|
86 |
|
87 | run-osh-mim() {
|
88 | local osh=_bin/cxx-opt/osh
|
89 |
|
90 | #local osh=_bin/cxx-opt/mycpp/demo/gc_header
|
91 |
|
92 | #local osh=_bin/cxx-dbg/osh
|
93 |
|
94 | ninja $osh
|
95 | #export MIMALLOC_SHOW_STATS=1
|
96 | MIMALLOC_VERBOSE=1 LD_PRELOAD=$DIR/mimalloc.so \
|
97 | $osh "$@"
|
98 | }
|
99 |
|
100 | # No stats?
|
101 | osh-demo() {
|
102 | run-osh-mim -c 'for i in $(seq 1000); do echo $i; done'
|
103 | }
|
104 |
|
105 |
|
106 |
|
107 | "$@"
|