Hi, Xiong, [email protected] is the mailing list for nvml discussion.
-Jeff Xiong Zhou <[email protected]> writes: > Hi, > > This happens when testing nvml or pmdk libvmmalloc library: > + dmesg > [12890.676033] traps: test_libvmmallo[15789] general protection > ip:7f3f01481a31 sp:7ffd85f4b7a0 error:0 in > libvmmalloc.so.1.0.0[7f3f0146d000+3e000] > > gdb output: > Program received signal SIGSEGV, Segmentation fault. > 0x00007ffff7bada31 in arena_purge () from /usr/local/lib64/libvmmalloc.so.1 > (gdb) bt > #0 0x00007ffff7bada31 in arena_purge () from > /usr/local/lib64/libvmmalloc.so.1 > #1 0x00007ffff7badcca in arena_dalloc_bin_run () from > /usr/local/lib64/libvmmalloc.so.1 > #2 0x00007ffff7baf0e0 in je_vmem_je_arena_dalloc_bin_locked () from > /usr/local/lib64/libvmmalloc.so.1 > #3 0x00007ffff7bc6d31 in je_vmem_je_tcache_bin_flush_small () from > /usr/local/lib64/libvmmalloc.so.1 > #4 0x00007ffff7bc761e in je_vmem_je_tcache_destroy () from > /usr/local/lib64/libvmmalloc.so.1 > #5 0x00007ffff7bc7895 in je_vmem_je_tcache_thread_cleanup () from > /usr/local/lib64/libvmmalloc.so.1 > #6 0x00007ffff7b9dccc in jemalloc_destructor () from > /usr/local/lib64/libvmmalloc.so.1 > #7 0x00007ffff7deb18a in _dl_fini () at dl-fini.c:253 > #8 0x00007ffff7805b19 in __run_exit_handlers (status=0, listp=0x7ffff7b926c8 > <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true) at exit.c:77 > #9 0x00007ffff7805b67 in __GI_exit (status=<optimized out>) at exit.c:99 > #10 0x00007ffff77ee38c in __libc_start_main (main=0x40072d <main>, argc=1, > ubp_av=0x7fffffffe388, init=<optimized out>, fini=<optimized out>, > rtld_fini=<optimized out>, stack_end=0x7fffffffe378) at > ../csu/libc-start.c:308 > #11 0x0000000000400669 in _start () > > I did not find issue opening entry in github repo, hope it's ok > sending here. > > Thanks, > Xiong > > Full test log: > > # ./nf.sh > + cc -ggdb test_libvmmalloc.c '-DALLOC_SIZE=((size_t)(1UL << 8))' -o > test_libvmmalloc -lvmmalloc > + VMMALLOC_POOL_DIR=/daxmnt/ > + VMMALLOC_POOL_SIZE=1073741824 > + ./test_libvmmalloc > Testing ./test_libvmmalloc, alloc size 256 > ./nf.sh: line 47: 15789 Segmentation fault VMMALLOC_POOL_DIR=$MNT1/ > VMMALLOC_POOL_SIZE=$pshift ./test_libvmmalloc > + ldd -v ./test_libvmmalloc > linux-vdso.so.1 => (0x00007ffe4fdf9000) > libvmmalloc.so.1 => /usr/local/lib64/libvmmalloc.so.1 > (0x00007f786ce1e000) > libc.so.6 => /lib64/libc.so.6 (0x00007f786ca51000) > libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f786c835000) > /lib64/ld-linux-x86-64.so.2 (0x00007f786d060000) > > Version information: > ./test_libvmmalloc: > libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6 > /usr/local/lib64/libvmmalloc.so.1: > ld-linux-x86-64.so.2 (GLIBC_2.3) => > /lib64/ld-linux-x86-64.so.2 > libpthread.so.0 (GLIBC_2.3.4) => /lib64/libpthread.so.0 > libpthread.so.0 (GLIBC_2.3.2) => /lib64/libpthread.so.0 > libpthread.so.0 (GLIBC_2.2.5) => /lib64/libpthread.so.0 > libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6 > libc.so.6 (GLIBC_2.3) => /lib64/libc.so.6 > libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6 > libc.so.6 (GLIBC_2.7) => /lib64/libc.so.6 > libc.so.6 (GLIBC_2.17) => /lib64/libc.so.6 > libc.so.6 (GLIBC_2.3.4) => /lib64/libc.so.6 > libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6 > /lib64/libc.so.6: > ld-linux-x86-64.so.2 (GLIBC_2.3) => > /lib64/ld-linux-x86-64.so.2 > ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => > /lib64/ld-linux-x86-64.so.2 > /lib64/libpthread.so.0: > ld-linux-x86-64.so.2 (GLIBC_2.2.5) => > /lib64/ld-linux-x86-64.so.2 > ld-linux-x86-64.so.2 (GLIBC_2.3) => > /lib64/ld-linux-x86-64.so.2 > ld-linux-x86-64.so.2 (GLIBC_PRIVATE) => > /lib64/ld-linux-x86-64.so.2 > libc.so.6 (GLIBC_2.14) => /lib64/libc.so.6 > libc.so.6 (GLIBC_2.3.2) => /lib64/libc.so.6 > libc.so.6 (GLIBC_PRIVATE) => /lib64/libc.so.6 > libc.so.6 (GLIBC_2.2.5) => /lib64/libc.so.6 > + echo 0 > 0 > + dmesg > [12890.676033] traps: test_libvmmallo[15789] general protection > ip:7f3f01481a31 sp:7ffd85f4b7a0 error:0 in > libvmmalloc.so.1.0.0[7f3f0146d000+3e000] > + set +x > GNU gdb (GDB) Red Hat Enterprise Linux 7.6.1-110.el7 > Copyright (C) 2013 Free Software Foundation, Inc. > License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> > This is free software: you are free to change and redistribute it. > There is NO WARRANTY, to the extent permitted by law. Type "show copying" > and "show warranty" for details. > This GDB was configured as "x86_64-redhat-linux-gnu". > For bug reporting instructions, please see: > <http://www.gnu.org/software/gdb/bugs/>... > Reading symbols from /home/xzhou/fsdax/test_libvmmalloc...done. > (gdb) b main > Breakpoint 1 at 0x40073c: file test_libvmmalloc.c, line 18. > (gdb) r > Starting program: /home/xzhou/fsdax/./test_libvmmalloc > [Thread debugging using libthread_db enabled] > Using host libthread_db library "/lib64/libthread_db.so.1". > > Breakpoint 1, main (argc=1, argv=0x7fffffffe388) at test_libvmmalloc.c:18 > 18 char *buf = NULL; > (gdb) c > Continuing. > Testing /home/xzhou/fsdax/./test_libvmmalloc, alloc size 256 > > Program received signal SIGSEGV, Segmentation fault. > 0x00007ffff7bada31 in arena_purge () from /usr/local/lib64/libvmmalloc.so.1 > (gdb) bt > #0 0x00007ffff7bada31 in arena_purge () from > /usr/local/lib64/libvmmalloc.so.1 > #1 0x00007ffff7badcca in arena_dalloc_bin_run () from > /usr/local/lib64/libvmmalloc.so.1 > #2 0x00007ffff7baf0e0 in je_vmem_je_arena_dalloc_bin_locked () from > /usr/local/lib64/libvmmalloc.so.1 > #3 0x00007ffff7bc6d31 in je_vmem_je_tcache_bin_flush_small () from > /usr/local/lib64/libvmmalloc.so.1 > #4 0x00007ffff7bc761e in je_vmem_je_tcache_destroy () from > /usr/local/lib64/libvmmalloc.so.1 > #5 0x00007ffff7bc7895 in je_vmem_je_tcache_thread_cleanup () from > /usr/local/lib64/libvmmalloc.so.1 > #6 0x00007ffff7b9dccc in jemalloc_destructor () from > /usr/local/lib64/libvmmalloc.so.1 > #7 0x00007ffff7deb18a in _dl_fini () at dl-fini.c:253 > #8 0x00007ffff7805b19 in __run_exit_handlers (status=0, listp=0x7ffff7b926c8 > <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true) at exit.c:77 > #9 0x00007ffff7805b67 in __GI_exit (status=<optimized out>) at exit.c:99 > #10 0x00007ffff77ee38c in __libc_start_main (main=0x40072d <main>, argc=1, > ubp_av=0x7fffffffe388, init=<optimized out>, fini=<optimized out>, > rtld_fini=<optimized out>, stack_end=0x7fffffffe378) at > ../csu/libc-start.c:308 > #11 0x0000000000400669 in _start () > (gdb) c > Continuing. > > Program terminated with signal SIGSEGV, Segmentation fault. > The program no longer exists. > (gdb) q > > # cat nf.sh > #!/bin/bash > > set xfs /dev/pmem0 /daxmnt > > [ $# -ne 3 ] && { echo $0 fst dev mnt; exit 1; } > > #yum install -y libvmmalloc-devel libvmmalloc libvmem-devel > #debuginfo-install glibc libgcc libvmmalloc > > FSTYP=$1 > DEV1=$2 > MNT1=$3 > > mountpoint $MNT1 > /dev/null 2>&1 && umount $MNT1 > mkdir -p $MNT1 > > if [ "$FSTYP" == "ext4" ] ; then > mkfs.ext4 -Fq -b 4096 $DEV1 > elif [ "$FSTYP" == "xfs" ] ; then > mkfs.xfs -fq -b size=4096 $DEV1 > fi > > mount -o dax $DEV1 $MNT1 > > cat > /dev/null <<EOF > for psize in 20 21 25 30 31 32 ; do > for asize in 3 8 13 21 31 32; do > cc test_libvmmalloc.c -DALLOC_SIZE="((size_t)(1UL << $asize))" -o > test_libvmmalloc -lvmmalloc > if [ $? -ne 0 ] ; then > echo "nvml libvmmalloc $asize cc FAIL" > exit 1 > fi > ((pshift=1<<psize)) > echo -ne "\t$psize $asize" > VMMALLOC_POOL_DIR=$MNT1/ VMMALLOC_POOL_SIZE=$pshift > ./test_libvmmalloc && \ > VMMALLOC_POOL_DIR=$MNT1/ VMMALLOC_POOL_SIZE=$pshift ls > /dev/null > $MNT1 > done > done > EOF > > psize=30 > asize=8 > ((pshift=1<<psize)) > dmesg -C > set -x > cc -ggdb test_libvmmalloc.c -DALLOC_SIZE="((size_t)(1UL << $asize))" -o > test_libvmmalloc -lvmmalloc || exit > VMMALLOC_POOL_DIR=$MNT1/ VMMALLOC_POOL_SIZE=$pshift ./test_libvmmalloc > ldd -v ./test_libvmmalloc > echo $? > dmesg > set +x > VMMALLOC_POOL_DIR=$MNT1/ VMMALLOC_POOL_SIZE=$pshift gdb ./test_libvmmalloc > > umount $MNT1 $DEV1 > /dev/null 2>&1 > > # cat test_libvmmalloc.c > #include <stdio.h> > #include <fcntl.h> > #include <errno.h> > #include <stdlib.h> > #include <unistd.h> > #include <string.h> > #include <libvmem.h> > > /* alloc size -- 1 KB */ > #ifndef ALLOC_SIZE > #define ALLOC_SIZE ((size_t)(1 << 10)) > #endif > > int main(int argc, char *argv[]) > { > char *path; > char *ptr; > char *buf = NULL; > > printf("\tTesting %s, alloc size %lu\n", argv[0], ALLOC_SIZE); > > if ((ptr = malloc(ALLOC_SIZE)) == NULL) { > perror("vmem_malloc"); > exit(1); > } > > buf = (char *)malloc(ALLOC_SIZE); > if (buf == NULL) { > perror("a buf malloc"); > free(ptr); > exit(1); > } > memset(buf, 'a', ALLOC_SIZE); > strncpy(ptr, buf, ALLOC_SIZE); > > buf = (char *)realloc(buf, ALLOC_SIZE - 1); > if (buf == NULL) { > perror("b buf malloc"); > free(ptr); > exit(1); > } > memset(buf, 'b', ALLOC_SIZE - 1); > strncpy(ptr, buf, ALLOC_SIZE - 1); > > buf = (char *)realloc(buf, ALLOC_SIZE + 1024); > if (buf == NULL) { > perror("c buf malloc"); > free(ptr); > exit(1); > } > memset(buf, 'c', ALLOC_SIZE + 1024); > strncpy(ptr, buf, ALLOC_SIZE + 1024); > > /* give the memory back */ > free(ptr); > free(buf); > > return 0; > } > # git remote -v > origin https://github.com/pmem/nvml.git (fetch) > origin https://github.com/pmem/nvml.git (push) > # git log --oneline -1 > 2f9a347 Merge pull request #2576 from plebioda/bug-fixing > _______________________________________________ > Linux-nvdimm mailing list > [email protected] > https://lists.01.org/mailman/listinfo/linux-nvdimm _______________________________________________ Linux-nvdimm mailing list [email protected] https://lists.01.org/mailman/listinfo/linux-nvdimm
