[Xenomai-git] Philippe Gerum : testsuite/smokey: add test suite for memory allocators
Module: xenomai-3 Branch: next Commit: 25534016c780ee56a87610a0c269ae4a263a725c URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=25534016c780ee56a87610a0c269ae4a263a725c Author: Philippe Gerum Date: Sun Apr 22 18:20:04 2018 +0200 testsuite/smokey: add test suite for memory allocators --- configure.ac|4 + testsuite/smokey/Makefile.am| 17 +- testsuite/smokey/memcheck/Makefile.am |8 + testsuite/smokey/memcheck/memcheck.c| 884 +++ testsuite/smokey/memcheck/memcheck.h| 65 ++ testsuite/smokey/memory-heapmem/Makefile.am |9 + testsuite/smokey/memory-heapmem/heapmem.c | 51 ++ testsuite/smokey/memory-pshared/Makefile.am |9 + testsuite/smokey/memory-pshared/pshared.c | 121 testsuite/smokey/memory-tlsf/Makefile.am| 10 + testsuite/smokey/memory-tlsf/tlsf.c | 123 11 files changed, 1300 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index ec2d7cb..c0ef1df 100644 --- a/configure.ac +++ b/configure.ac @@ -931,6 +931,10 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ + testsuite/smokey/memcheck/Makefile \ + testsuite/smokey/memory-heapmem/Makefile \ + testsuite/smokey/memory-tlsf/Makefile \ + testsuite/smokey/memory-pshared/Makefile \ testsuite/smokey/fpu-stress/Makefile \ testsuite/smokey/net_udp/Makefile \ testsuite/smokey/net_packet_dgram/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index c6fe70b..d7a71fe 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -5,6 +5,10 @@ CCLD = $(top_srcdir)/scripts/wrap-link.sh $(CC) smokey_SOURCES = main.c +# Make sure to list modules from the most dependent to the +# least. e.g. net_common should appear after all net_* modules, +# memcheck should appear after all heapmem-* modules. + COBALT_SUBDIRS = \ arith \ bufp\ @@ -12,6 +16,9 @@ COBALT_SUBDIRS = \ fpu-stress \ iddp\ leaks \ + memory-heapmem \ + memory-tlsf \ + memcheck\ net_packet_dgram\ net_packet_raw \ net_udp \ @@ -31,11 +38,19 @@ COBALT_SUBDIRS =\ vdso-access \ xddp +if XENO_PSHARED +COBALT_SUBDIRS += memory-pshared +endif + if CONFIG_XENO_LIBS_DLOPEN COBALT_SUBDIRS += dlopen endif -MERCURY_SUBDIRS = +MERCURY_SUBDIRS = memory-heapmem memory-tlsf +if XENO_PSHARED +MERCURY_SUBDIRS += memory-pshared +endif +MERCURY_SUBDIRS += memcheck DIST_SUBDIRS = $(COBALT_SUBDIRS) $(MERCURY_SUBDIRS) diff --git a/testsuite/smokey/memcheck/Makefile.am b/testsuite/smokey/memcheck/Makefile.am new file mode 100644 index 000..482314a --- /dev/null +++ b/testsuite/smokey/memcheck/Makefile.am @@ -0,0 +1,8 @@ +noinst_LIBRARIES = libmemcheck.a +noinst_HEADERS = memcheck.h + +AM_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include + +libmemcheck_a_SOURCES = memcheck.c diff --git a/testsuite/smokey/memcheck/memcheck.c b/testsuite/smokey/memcheck/memcheck.c new file mode 100644 index 000..3f18477 --- /dev/null +++ b/testsuite/smokey/memcheck/memcheck.c @@ -0,0 +1,884 @@ +/* + * Copyright (C) 2018 Philippe Gerum + * + * SPDX-License-Identifier: MIT + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include "memcheck.h" + +enum pattern { + alphabet_series, + digit_series, + binary_series, +}; + +struct chunk { + void *ptr; + enum pattern pattern; +}; + +struct runstats { + size_t heap_size; + size_t user_size; + size_t block_size; + int nrblocks; + long alloc_avg_ns; + long alloc_max_ns; + long free_avg_ns; + long free_max_ns; + int flags; + double overhead; + double fragmentation; + struct runstats *next; +}; + +static struct runstats *statistics; + +static int nrstats; + +static int max_results = 4; + +static inline long diff_ts(struct timespec *left, struct timespec *right) +{ + return (long long)(left->tv_sec - right->tv_sec) * ONE_BILLION + + left->tv_nsec - right->tv_nsec; +} + +static inline void swap(void *left, void *right, const size_t size) +{ + char trans[size]; + + memcpy(trans, left, size); + memcpy(left, right, size); + memcpy(right, trans, size); +} + +static void random_shuffle(void *vbase, size_t nmemb, const size_t size) +{ + struct { + char x[size]; + } __attribute__((packed)) *base = vbase; + unsigned int j, k; + double u; + + for(j = nmemb; j > 0; j--) { + u = (double)random() / RAND_MAX; + k = (unsigned int)(j * u)
[Xenomai-git] Philippe Gerum : testsuite/smokey: add test suite for memory allocators
Module: xenomai-3 Branch: wip/heapmem Commit: f71ced70e583c12913b278460256e0ae5ce71697 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=f71ced70e583c12913b278460256e0ae5ce71697 Author: Philippe Gerum Date: Sun Apr 22 18:20:04 2018 +0200 testsuite/smokey: add test suite for memory allocators --- configure.ac|4 + testsuite/smokey/Makefile.am| 17 +- testsuite/smokey/memcheck/Makefile.am |8 + testsuite/smokey/memcheck/memcheck.c| 884 +++ testsuite/smokey/memcheck/memcheck.h| 65 ++ testsuite/smokey/memory-heapmem/Makefile.am |9 + testsuite/smokey/memory-heapmem/heapmem.c | 51 ++ testsuite/smokey/memory-pshared/Makefile.am |9 + testsuite/smokey/memory-pshared/pshared.c | 121 testsuite/smokey/memory-tlsf/Makefile.am| 10 + testsuite/smokey/memory-tlsf/tlsf.c | 123 11 files changed, 1300 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index ec2d7cb..c0ef1df 100644 --- a/configure.ac +++ b/configure.ac @@ -931,6 +931,10 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ + testsuite/smokey/memcheck/Makefile \ + testsuite/smokey/memory-heapmem/Makefile \ + testsuite/smokey/memory-tlsf/Makefile \ + testsuite/smokey/memory-pshared/Makefile \ testsuite/smokey/fpu-stress/Makefile \ testsuite/smokey/net_udp/Makefile \ testsuite/smokey/net_packet_dgram/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index c6fe70b..d7a71fe 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -5,6 +5,10 @@ CCLD = $(top_srcdir)/scripts/wrap-link.sh $(CC) smokey_SOURCES = main.c +# Make sure to list modules from the most dependent to the +# least. e.g. net_common should appear after all net_* modules, +# memcheck should appear after all heapmem-* modules. + COBALT_SUBDIRS = \ arith \ bufp\ @@ -12,6 +16,9 @@ COBALT_SUBDIRS = \ fpu-stress \ iddp\ leaks \ + memory-heapmem \ + memory-tlsf \ + memcheck\ net_packet_dgram\ net_packet_raw \ net_udp \ @@ -31,11 +38,19 @@ COBALT_SUBDIRS =\ vdso-access \ xddp +if XENO_PSHARED +COBALT_SUBDIRS += memory-pshared +endif + if CONFIG_XENO_LIBS_DLOPEN COBALT_SUBDIRS += dlopen endif -MERCURY_SUBDIRS = +MERCURY_SUBDIRS = memory-heapmem memory-tlsf +if XENO_PSHARED +MERCURY_SUBDIRS += memory-pshared +endif +MERCURY_SUBDIRS += memcheck DIST_SUBDIRS = $(COBALT_SUBDIRS) $(MERCURY_SUBDIRS) diff --git a/testsuite/smokey/memcheck/Makefile.am b/testsuite/smokey/memcheck/Makefile.am new file mode 100644 index 000..482314a --- /dev/null +++ b/testsuite/smokey/memcheck/Makefile.am @@ -0,0 +1,8 @@ +noinst_LIBRARIES = libmemcheck.a +noinst_HEADERS = memcheck.h + +AM_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include + +libmemcheck_a_SOURCES = memcheck.c diff --git a/testsuite/smokey/memcheck/memcheck.c b/testsuite/smokey/memcheck/memcheck.c new file mode 100644 index 000..3f18477 --- /dev/null +++ b/testsuite/smokey/memcheck/memcheck.c @@ -0,0 +1,884 @@ +/* + * Copyright (C) 2018 Philippe Gerum + * + * SPDX-License-Identifier: MIT + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include "memcheck.h" + +enum pattern { + alphabet_series, + digit_series, + binary_series, +}; + +struct chunk { + void *ptr; + enum pattern pattern; +}; + +struct runstats { + size_t heap_size; + size_t user_size; + size_t block_size; + int nrblocks; + long alloc_avg_ns; + long alloc_max_ns; + long free_avg_ns; + long free_max_ns; + int flags; + double overhead; + double fragmentation; + struct runstats *next; +}; + +static struct runstats *statistics; + +static int nrstats; + +static int max_results = 4; + +static inline long diff_ts(struct timespec *left, struct timespec *right) +{ + return (long long)(left->tv_sec - right->tv_sec) * ONE_BILLION + + left->tv_nsec - right->tv_nsec; +} + +static inline void swap(void *left, void *right, const size_t size) +{ + char trans[size]; + + memcpy(trans, left, size); + memcpy(left, right, size); + memcpy(right, trans, size); +} + +static void random_shuffle(void *vbase, size_t nmemb, const size_t size) +{ + struct { + char x[size]; + } __attribute__((packed)) *base = vbase; + unsigned int j, k; + double u; + + for(j = nmemb; j > 0; j--) { + u = (double)random() / RAND_MAX; + k = (unsigned int)
[Xenomai-git] Philippe Gerum : testsuite/smokey: add test suite for memory allocators
Module: xenomai-3 Branch: wip/heapmem Commit: ebfcb36320e00906fd2bf4b8058bb33620788547 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=ebfcb36320e00906fd2bf4b8058bb33620788547 Author: Philippe Gerum Date: Sun Apr 22 18:20:04 2018 +0200 testsuite/smokey: add test suite for memory allocators --- configure.ac|4 + testsuite/smokey/Makefile.am| 17 +- testsuite/smokey/memcheck/Makefile.am |8 + testsuite/smokey/memcheck/memcheck.c| 884 +++ testsuite/smokey/memcheck/memcheck.h| 65 ++ testsuite/smokey/memory-heapmem/Makefile.am |9 + testsuite/smokey/memory-heapmem/heapmem.c | 51 ++ testsuite/smokey/memory-pshared/Makefile.am |9 + testsuite/smokey/memory-pshared/pshared.c | 121 testsuite/smokey/memory-tlsf/Makefile.am| 10 + testsuite/smokey/memory-tlsf/tlsf.c | 123 11 files changed, 1300 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index ec2d7cb..c0ef1df 100644 --- a/configure.ac +++ b/configure.ac @@ -931,6 +931,10 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ + testsuite/smokey/memcheck/Makefile \ + testsuite/smokey/memory-heapmem/Makefile \ + testsuite/smokey/memory-tlsf/Makefile \ + testsuite/smokey/memory-pshared/Makefile \ testsuite/smokey/fpu-stress/Makefile \ testsuite/smokey/net_udp/Makefile \ testsuite/smokey/net_packet_dgram/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index c6fe70b..d7a71fe 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -5,6 +5,10 @@ CCLD = $(top_srcdir)/scripts/wrap-link.sh $(CC) smokey_SOURCES = main.c +# Make sure to list modules from the most dependent to the +# least. e.g. net_common should appear after all net_* modules, +# memcheck should appear after all heapmem-* modules. + COBALT_SUBDIRS = \ arith \ bufp\ @@ -12,6 +16,9 @@ COBALT_SUBDIRS = \ fpu-stress \ iddp\ leaks \ + memory-heapmem \ + memory-tlsf \ + memcheck\ net_packet_dgram\ net_packet_raw \ net_udp \ @@ -31,11 +38,19 @@ COBALT_SUBDIRS =\ vdso-access \ xddp +if XENO_PSHARED +COBALT_SUBDIRS += memory-pshared +endif + if CONFIG_XENO_LIBS_DLOPEN COBALT_SUBDIRS += dlopen endif -MERCURY_SUBDIRS = +MERCURY_SUBDIRS = memory-heapmem memory-tlsf +if XENO_PSHARED +MERCURY_SUBDIRS += memory-pshared +endif +MERCURY_SUBDIRS += memcheck DIST_SUBDIRS = $(COBALT_SUBDIRS) $(MERCURY_SUBDIRS) diff --git a/testsuite/smokey/memcheck/Makefile.am b/testsuite/smokey/memcheck/Makefile.am new file mode 100644 index 000..482314a --- /dev/null +++ b/testsuite/smokey/memcheck/Makefile.am @@ -0,0 +1,8 @@ +noinst_LIBRARIES = libmemcheck.a +noinst_HEADERS = memcheck.h + +AM_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include + +libmemcheck_a_SOURCES = memcheck.c diff --git a/testsuite/smokey/memcheck/memcheck.c b/testsuite/smokey/memcheck/memcheck.c new file mode 100644 index 000..3f18477 --- /dev/null +++ b/testsuite/smokey/memcheck/memcheck.c @@ -0,0 +1,884 @@ +/* + * Copyright (C) 2018 Philippe Gerum + * + * SPDX-License-Identifier: MIT + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include "memcheck.h" + +enum pattern { + alphabet_series, + digit_series, + binary_series, +}; + +struct chunk { + void *ptr; + enum pattern pattern; +}; + +struct runstats { + size_t heap_size; + size_t user_size; + size_t block_size; + int nrblocks; + long alloc_avg_ns; + long alloc_max_ns; + long free_avg_ns; + long free_max_ns; + int flags; + double overhead; + double fragmentation; + struct runstats *next; +}; + +static struct runstats *statistics; + +static int nrstats; + +static int max_results = 4; + +static inline long diff_ts(struct timespec *left, struct timespec *right) +{ + return (long long)(left->tv_sec - right->tv_sec) * ONE_BILLION + + left->tv_nsec - right->tv_nsec; +} + +static inline void swap(void *left, void *right, const size_t size) +{ + char trans[size]; + + memcpy(trans, left, size); + memcpy(left, right, size); + memcpy(right, trans, size); +} + +static void random_shuffle(void *vbase, size_t nmemb, const size_t size) +{ + struct { + char x[size]; + } __attribute__((packed)) *base = vbase; + unsigned int j, k; + double u; + + for(j = nmemb; j > 0; j--) { + u = (double)random() / RAND_MAX; + k = (unsigned int)
[Xenomai-git] Philippe Gerum : testsuite/smokey: add test suite for memory allocators
Module: xenomai-3 Branch: wip/heapmem Commit: e3019ac600cf0f3b202cf1b454b463b7cef074ff URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=e3019ac600cf0f3b202cf1b454b463b7cef074ff Author: Philippe Gerum Date: Sun Apr 22 18:20:04 2018 +0200 testsuite/smokey: add test suite for memory allocators --- configure.ac|4 + testsuite/smokey/Makefile.am| 17 +- testsuite/smokey/memcheck/Makefile.am |8 + testsuite/smokey/memcheck/memcheck.c| 884 +++ testsuite/smokey/memcheck/memcheck.h| 65 ++ testsuite/smokey/memory-heapmem/Makefile.am |9 + testsuite/smokey/memory-heapmem/heapmem.c | 51 ++ testsuite/smokey/memory-pshared/Makefile.am |9 + testsuite/smokey/memory-pshared/pshared.c | 121 testsuite/smokey/memory-tlsf/Makefile.am| 10 + testsuite/smokey/memory-tlsf/tlsf.c | 123 11 files changed, 1300 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index ec2d7cb..c0ef1df 100644 --- a/configure.ac +++ b/configure.ac @@ -931,6 +931,10 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ + testsuite/smokey/memcheck/Makefile \ + testsuite/smokey/memory-heapmem/Makefile \ + testsuite/smokey/memory-tlsf/Makefile \ + testsuite/smokey/memory-pshared/Makefile \ testsuite/smokey/fpu-stress/Makefile \ testsuite/smokey/net_udp/Makefile \ testsuite/smokey/net_packet_dgram/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index c6fe70b..d7a71fe 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -5,6 +5,10 @@ CCLD = $(top_srcdir)/scripts/wrap-link.sh $(CC) smokey_SOURCES = main.c +# Make sure to list modules from the most dependent to the +# least. e.g. net_common should appear after all net_* modules, +# memcheck should appear after all heapmem-* modules. + COBALT_SUBDIRS = \ arith \ bufp\ @@ -12,6 +16,9 @@ COBALT_SUBDIRS = \ fpu-stress \ iddp\ leaks \ + memory-heapmem \ + memory-tlsf \ + memcheck\ net_packet_dgram\ net_packet_raw \ net_udp \ @@ -31,11 +38,19 @@ COBALT_SUBDIRS =\ vdso-access \ xddp +if XENO_PSHARED +COBALT_SUBDIRS += memory-pshared +endif + if CONFIG_XENO_LIBS_DLOPEN COBALT_SUBDIRS += dlopen endif -MERCURY_SUBDIRS = +MERCURY_SUBDIRS = memory-heapmem memory-tlsf +if XENO_PSHARED +MERCURY_SUBDIRS += memory-pshared +endif +MERCURY_SUBDIRS += memcheck DIST_SUBDIRS = $(COBALT_SUBDIRS) $(MERCURY_SUBDIRS) diff --git a/testsuite/smokey/memcheck/Makefile.am b/testsuite/smokey/memcheck/Makefile.am new file mode 100644 index 000..482314a --- /dev/null +++ b/testsuite/smokey/memcheck/Makefile.am @@ -0,0 +1,8 @@ +noinst_LIBRARIES = libmemcheck.a +noinst_HEADERS = memcheck.h + +AM_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include + +libmemcheck_a_SOURCES = memcheck.c diff --git a/testsuite/smokey/memcheck/memcheck.c b/testsuite/smokey/memcheck/memcheck.c new file mode 100644 index 000..3f18477 --- /dev/null +++ b/testsuite/smokey/memcheck/memcheck.c @@ -0,0 +1,884 @@ +/* + * Copyright (C) 2018 Philippe Gerum + * + * SPDX-License-Identifier: MIT + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include "memcheck.h" + +enum pattern { + alphabet_series, + digit_series, + binary_series, +}; + +struct chunk { + void *ptr; + enum pattern pattern; +}; + +struct runstats { + size_t heap_size; + size_t user_size; + size_t block_size; + int nrblocks; + long alloc_avg_ns; + long alloc_max_ns; + long free_avg_ns; + long free_max_ns; + int flags; + double overhead; + double fragmentation; + struct runstats *next; +}; + +static struct runstats *statistics; + +static int nrstats; + +static int max_results = 4; + +static inline long diff_ts(struct timespec *left, struct timespec *right) +{ + return (long long)(left->tv_sec - right->tv_sec) * ONE_BILLION + + left->tv_nsec - right->tv_nsec; +} + +static inline void swap(void *left, void *right, const size_t size) +{ + char trans[size]; + + memcpy(trans, left, size); + memcpy(left, right, size); + memcpy(right, trans, size); +} + +static void random_shuffle(void *vbase, size_t nmemb, const size_t size) +{ + struct { + char x[size]; + } __attribute__((packed)) *base = vbase; + unsigned int j, k; + double u; + + for(j = nmemb; j > 0; j--) { + u = (double)random() / RAND_MAX; + k = (unsigned int)
[Xenomai-git] Philippe Gerum : testsuite/smokey: add test suite for memory allocators
Module: xenomai-3 Branch: wip/heapmem Commit: a2c232d73b0ffdae8235a9c3f68728f68500fad4 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=a2c232d73b0ffdae8235a9c3f68728f68500fad4 Author: Philippe Gerum Date: Sun Apr 22 18:20:04 2018 +0200 testsuite/smokey: add test suite for memory allocators --- configure.ac|4 + testsuite/smokey/Makefile.am| 17 +- testsuite/smokey/memcheck/Makefile.am |8 + testsuite/smokey/memcheck/memcheck.c| 851 +++ testsuite/smokey/memcheck/memcheck.h| 65 ++ testsuite/smokey/memory-heapmem/Makefile.am |9 + testsuite/smokey/memory-heapmem/heapmem.c | 51 ++ testsuite/smokey/memory-pshared/Makefile.am |9 + testsuite/smokey/memory-pshared/pshared.c | 125 testsuite/smokey/memory-tlsf/Makefile.am| 10 + testsuite/smokey/memory-tlsf/tlsf.c | 123 11 files changed, 1271 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 59ea776..61ebcbe 100644 --- a/configure.ac +++ b/configure.ac @@ -930,6 +930,10 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ + testsuite/smokey/memcheck/Makefile \ + testsuite/smokey/memory-heapmem/Makefile \ + testsuite/smokey/memory-tlsf/Makefile \ + testsuite/smokey/memory-pshared/Makefile \ testsuite/smokey/fpu-stress/Makefile \ testsuite/smokey/net_udp/Makefile \ testsuite/smokey/net_packet_dgram/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index c6fe70b..d7a71fe 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -5,6 +5,10 @@ CCLD = $(top_srcdir)/scripts/wrap-link.sh $(CC) smokey_SOURCES = main.c +# Make sure to list modules from the most dependent to the +# least. e.g. net_common should appear after all net_* modules, +# memcheck should appear after all heapmem-* modules. + COBALT_SUBDIRS = \ arith \ bufp\ @@ -12,6 +16,9 @@ COBALT_SUBDIRS = \ fpu-stress \ iddp\ leaks \ + memory-heapmem \ + memory-tlsf \ + memcheck\ net_packet_dgram\ net_packet_raw \ net_udp \ @@ -31,11 +38,19 @@ COBALT_SUBDIRS =\ vdso-access \ xddp +if XENO_PSHARED +COBALT_SUBDIRS += memory-pshared +endif + if CONFIG_XENO_LIBS_DLOPEN COBALT_SUBDIRS += dlopen endif -MERCURY_SUBDIRS = +MERCURY_SUBDIRS = memory-heapmem memory-tlsf +if XENO_PSHARED +MERCURY_SUBDIRS += memory-pshared +endif +MERCURY_SUBDIRS += memcheck DIST_SUBDIRS = $(COBALT_SUBDIRS) $(MERCURY_SUBDIRS) diff --git a/testsuite/smokey/memcheck/Makefile.am b/testsuite/smokey/memcheck/Makefile.am new file mode 100644 index 000..482314a --- /dev/null +++ b/testsuite/smokey/memcheck/Makefile.am @@ -0,0 +1,8 @@ +noinst_LIBRARIES = libmemcheck.a +noinst_HEADERS = memcheck.h + +AM_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include + +libmemcheck_a_SOURCES = memcheck.c diff --git a/testsuite/smokey/memcheck/memcheck.c b/testsuite/smokey/memcheck/memcheck.c new file mode 100644 index 000..b38dcc8 --- /dev/null +++ b/testsuite/smokey/memcheck/memcheck.c @@ -0,0 +1,851 @@ +/* + * Copyright (C) 2018 Philippe Gerum + * + * SPDX-License-Identifier: MIT + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include "memcheck.h" + +enum pattern { + alphabet_series, + digit_series, + binary_series, +}; + +struct chunk { + void *ptr; + enum pattern pattern; +}; + +struct runstats { + size_t heap_size; + size_t user_size; + size_t block_size; + int nrblocks; + long alloc_avg_ns; + long alloc_max_ns; + long free_avg_ns; + long free_max_ns; + int flags; + double overhead; + double fragmentation; + struct runstats *next; +}; + +static struct runstats *statistics; + +static int nrstats; + +static int max_results = 4; + +static inline long diff_ts(struct timespec *left, struct timespec *right) +{ + return (long long)(left->tv_sec - right->tv_sec) * ONE_BILLION + + left->tv_nsec - right->tv_nsec; +} + +static inline void swap(void *left, void *right, const size_t size) +{ + char trans[size]; + + memcpy(trans, left, size); + memcpy(left, right, size); + memcpy(right, trans, size); +} + +static void random_shuffle(void *vbase, size_t nmemb, const size_t size) +{ + struct { + char x[size]; + } __attribute__((packed)) *base = vbase; + unsigned int j, k; + double u; + + for(j = nmemb; j > 0; j--) { + u = (double)random() / RAND_MAX; + k = (unsigned int)
[Xenomai-git] Philippe Gerum : testsuite/smokey: add test suite for memory allocators
Module: xenomai-3 Branch: wip/heapmem Commit: 4756348e6de8693b957540fda92bb10f21ec16f6 URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=4756348e6de8693b957540fda92bb10f21ec16f6 Author: Philippe Gerum Date: Sun Apr 22 18:20:04 2018 +0200 testsuite/smokey: add test suite for memory allocators --- configure.ac|4 + testsuite/smokey/Makefile.am| 17 +- testsuite/smokey/memcheck/Makefile.am |8 + testsuite/smokey/memcheck/memcheck.c| 851 +++ testsuite/smokey/memcheck/memcheck.h| 65 ++ testsuite/smokey/memory-heapmem/Makefile.am |9 + testsuite/smokey/memory-heapmem/heapmem.c | 51 ++ testsuite/smokey/memory-pshared/Makefile.am |9 + testsuite/smokey/memory-pshared/pshared.c | 125 testsuite/smokey/memory-tlsf/Makefile.am| 10 + testsuite/smokey/memory-tlsf/tlsf.c | 123 11 files changed, 1271 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 59ea776..61ebcbe 100644 --- a/configure.ac +++ b/configure.ac @@ -930,6 +930,10 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ + testsuite/smokey/memcheck/Makefile \ + testsuite/smokey/memory-heapmem/Makefile \ + testsuite/smokey/memory-tlsf/Makefile \ + testsuite/smokey/memory-pshared/Makefile \ testsuite/smokey/fpu-stress/Makefile \ testsuite/smokey/net_udp/Makefile \ testsuite/smokey/net_packet_dgram/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index c6fe70b..d7a71fe 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -5,6 +5,10 @@ CCLD = $(top_srcdir)/scripts/wrap-link.sh $(CC) smokey_SOURCES = main.c +# Make sure to list modules from the most dependent to the +# least. e.g. net_common should appear after all net_* modules, +# memcheck should appear after all heapmem-* modules. + COBALT_SUBDIRS = \ arith \ bufp\ @@ -12,6 +16,9 @@ COBALT_SUBDIRS = \ fpu-stress \ iddp\ leaks \ + memory-heapmem \ + memory-tlsf \ + memcheck\ net_packet_dgram\ net_packet_raw \ net_udp \ @@ -31,11 +38,19 @@ COBALT_SUBDIRS =\ vdso-access \ xddp +if XENO_PSHARED +COBALT_SUBDIRS += memory-pshared +endif + if CONFIG_XENO_LIBS_DLOPEN COBALT_SUBDIRS += dlopen endif -MERCURY_SUBDIRS = +MERCURY_SUBDIRS = memory-heapmem memory-tlsf +if XENO_PSHARED +MERCURY_SUBDIRS += memory-pshared +endif +MERCURY_SUBDIRS += memcheck DIST_SUBDIRS = $(COBALT_SUBDIRS) $(MERCURY_SUBDIRS) diff --git a/testsuite/smokey/memcheck/Makefile.am b/testsuite/smokey/memcheck/Makefile.am new file mode 100644 index 000..482314a --- /dev/null +++ b/testsuite/smokey/memcheck/Makefile.am @@ -0,0 +1,8 @@ +noinst_LIBRARIES = libmemcheck.a +noinst_HEADERS = memcheck.h + +AM_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include + +libmemcheck_a_SOURCES = memcheck.c diff --git a/testsuite/smokey/memcheck/memcheck.c b/testsuite/smokey/memcheck/memcheck.c new file mode 100644 index 000..b38dcc8 --- /dev/null +++ b/testsuite/smokey/memcheck/memcheck.c @@ -0,0 +1,851 @@ +/* + * Copyright (C) 2018 Philippe Gerum + * + * SPDX-License-Identifier: MIT + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include "memcheck.h" + +enum pattern { + alphabet_series, + digit_series, + binary_series, +}; + +struct chunk { + void *ptr; + enum pattern pattern; +}; + +struct runstats { + size_t heap_size; + size_t user_size; + size_t block_size; + int nrblocks; + long alloc_avg_ns; + long alloc_max_ns; + long free_avg_ns; + long free_max_ns; + int flags; + double overhead; + double fragmentation; + struct runstats *next; +}; + +static struct runstats *statistics; + +static int nrstats; + +static int max_results = 4; + +static inline long diff_ts(struct timespec *left, struct timespec *right) +{ + return (long long)(left->tv_sec - right->tv_sec) * ONE_BILLION + + left->tv_nsec - right->tv_nsec; +} + +static inline void swap(void *left, void *right, const size_t size) +{ + char trans[size]; + + memcpy(trans, left, size); + memcpy(left, right, size); + memcpy(right, trans, size); +} + +static void random_shuffle(void *vbase, size_t nmemb, const size_t size) +{ + struct { + char x[size]; + } __attribute__((packed)) *base = vbase; + unsigned int j, k; + double u; + + for(j = nmemb; j > 0; j--) { + u = (double)random() / RAND_MAX; + k = (unsigned int)
[Xenomai-git] Philippe Gerum : testsuite/smokey: add test suite for memory allocators
Module: xenomai-3 Branch: wip/heapmem Commit: ecdc9770b12be89517135c003e1611378f744b6c URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=ecdc9770b12be89517135c003e1611378f744b6c Author: Philippe Gerum Date: Sun Apr 22 18:20:04 2018 +0200 testsuite/smokey: add test suite for memory allocators --- configure.ac|4 + testsuite/smokey/Makefile.am| 17 +- testsuite/smokey/memcheck/Makefile.am |8 + testsuite/smokey/memcheck/memcheck.c| 851 +++ testsuite/smokey/memcheck/memcheck.h| 65 ++ testsuite/smokey/memory-heapmem/Makefile.am |9 + testsuite/smokey/memory-heapmem/heapmem.c | 51 ++ testsuite/smokey/memory-pshared/Makefile.am |9 + testsuite/smokey/memory-pshared/pshared.c | 125 testsuite/smokey/memory-tlsf/Makefile.am| 10 + testsuite/smokey/memory-tlsf/tlsf.c | 123 11 files changed, 1271 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 59ea776..61ebcbe 100644 --- a/configure.ac +++ b/configure.ac @@ -930,6 +930,10 @@ AC_CONFIG_FILES([ \ testsuite/smokey/timerfd/Makefile \ testsuite/smokey/tsc/Makefile \ testsuite/smokey/leaks/Makefile \ + testsuite/smokey/memcheck/Makefile \ + testsuite/smokey/memory-heapmem/Makefile \ + testsuite/smokey/memory-tlsf/Makefile \ + testsuite/smokey/memory-pshared/Makefile \ testsuite/smokey/fpu-stress/Makefile \ testsuite/smokey/net_udp/Makefile \ testsuite/smokey/net_packet_dgram/Makefile \ diff --git a/testsuite/smokey/Makefile.am b/testsuite/smokey/Makefile.am index c6fe70b..d7a71fe 100644 --- a/testsuite/smokey/Makefile.am +++ b/testsuite/smokey/Makefile.am @@ -5,6 +5,10 @@ CCLD = $(top_srcdir)/scripts/wrap-link.sh $(CC) smokey_SOURCES = main.c +# Make sure to list modules from the most dependent to the +# least. e.g. net_common should appear after all net_* modules, +# memcheck should appear after all heapmem-* modules. + COBALT_SUBDIRS = \ arith \ bufp\ @@ -12,6 +16,9 @@ COBALT_SUBDIRS = \ fpu-stress \ iddp\ leaks \ + memory-heapmem \ + memory-tlsf \ + memcheck\ net_packet_dgram\ net_packet_raw \ net_udp \ @@ -31,11 +38,19 @@ COBALT_SUBDIRS =\ vdso-access \ xddp +if XENO_PSHARED +COBALT_SUBDIRS += memory-pshared +endif + if CONFIG_XENO_LIBS_DLOPEN COBALT_SUBDIRS += dlopen endif -MERCURY_SUBDIRS = +MERCURY_SUBDIRS = memory-heapmem memory-tlsf +if XENO_PSHARED +MERCURY_SUBDIRS += memory-pshared +endif +MERCURY_SUBDIRS += memcheck DIST_SUBDIRS = $(COBALT_SUBDIRS) $(MERCURY_SUBDIRS) diff --git a/testsuite/smokey/memcheck/Makefile.am b/testsuite/smokey/memcheck/Makefile.am new file mode 100644 index 000..482314a --- /dev/null +++ b/testsuite/smokey/memcheck/Makefile.am @@ -0,0 +1,8 @@ +noinst_LIBRARIES = libmemcheck.a +noinst_HEADERS = memcheck.h + +AM_CPPFLAGS = \ + @XENO_USER_CFLAGS@ \ + -I$(top_srcdir)/include + +libmemcheck_a_SOURCES = memcheck.c diff --git a/testsuite/smokey/memcheck/memcheck.c b/testsuite/smokey/memcheck/memcheck.c new file mode 100644 index 000..9244fd8 --- /dev/null +++ b/testsuite/smokey/memcheck/memcheck.c @@ -0,0 +1,851 @@ +/* + * Copyright (C) 2018 Philippe Gerum + * + * SPDX-License-Identifier: MIT + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include "memcheck.h" + +enum pattern { + alphabet_series, + digit_series, + binary_series, +}; + +struct chunk { + void *ptr; + enum pattern pattern; +}; + +struct runstats { + size_t heap_size; + size_t user_size; + size_t block_size; + int nrblocks; + long alloc_avg_ns; + long alloc_max_ns; + long free_avg_ns; + long free_max_ns; + int flags; + double overhead; + double fragmentation; + struct runstats *next; +}; + +static struct runstats *statistics; + +static int nrstats; + +static int max_results = 4; + +static inline long diff_ts(struct timespec *left, struct timespec *right) +{ + return (long long)(left->tv_sec - right->tv_sec) * ONE_BILLION + + left->tv_nsec - right->tv_nsec; +} + +static inline void swap(void *left, void *right, const size_t size) +{ + char trans[size]; + + memcpy(trans, left, size); + memcpy(left, right, size); + memcpy(right, trans, size); +} + +static void random_shuffle(void *vbase, size_t nmemb, const size_t size) +{ + struct { + char x[size]; + } __attribute__((packed)) *base = vbase; + unsigned int j, k; + double u; + + for(j = nmemb; j > 0; j--) { + u = (double)random() / RAND_MAX; + k = (unsigned int)