fio 1.22 segfaults when pressing ctrl-c
I'm running fio with the surface scan example, and it just segfault and generate a core if I'm pressing CTRL-C during the test.
[root@max5 examples]# fio surface-scan
write-phase: (g=0): rw=write, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1
verify-phase: (g=1): rw=read, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1 Starting 2 threads
**** I'm pressing CTRL-C ****
fio: terminating on signal 2
Quit (core dumped)
[root@max5 examples]#
Then same from gdb:
[root@max5 examples]# gdb --args fio surface-scan
GNU gdb Red Hat Linux (6.5-25.el5_1.1rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "x86_64-redhat-linux-gnu"...Using host libthread_db library "/lib64/libthread_db.so.1".
(gdb) run
Starting program: /usr/bin/fio surface-scan
[Thread debugging using libthread_db enabled]
[New Thread 46912498286832 (LWP 2158)]
write-phase: (g=0): rw=write, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1
verify-phase: (g=1): rw=read, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1 Starting 2 threads
[New Thread 1084229952 (LWP 2161)]
Jobs: 1 (f=1): [WP] [-.-% done] [ 0/ 57822 kb/s] [eta 00m:00s]
**** I'm pressing CTRL-C ****
Program received signal SIGINT, Interrupt. [Switching to Thread 46912498286832 (LWP 2158)] 0x0000003c23495511 in nanosleep () from /lib64/libc.so.6 (gdb) bt
#0 0x0000003c23495511 in nanosleep () from /lib64/libc.so.6 #1 0x0000003c234c8554 in usleep () from /lib64/libc.so.6 #2 0x0000000000408448 in main (argc=<value optimized out>, argv=<value optimized out>) at fio.c:1394
(gdb)
Signature · 5 lines
Erwan Velu Pre-Sales Engineer Seanodes http://www.seanodes.com +33 (0)1 41 22 13 83
Quoted 42 lines · Erwan Velu
I'm running fio with the surface scan example, and it just segfault and generate a core if I'm pressing CTRL-C during the test.
[root@max5 examples]# fio surface-scan
write-phase: (g=0): rw=write, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1
verify-phase: (g=1): rw=read, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1 Starting 2 threads
**** I'm pressing CTRL-C ****
fio: terminating on signal 2
Quit (core dumped)
[root@max5 examples]#Then same from gdb:
[root@max5 examples]# gdb --args fio surface-scan
GNU gdb Red Hat Linux (6.5-25.el5_1.1rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "x86_64-redhat-linux-gnu"...Using hostlibthread_dblibrary "/lib64/libthread_db.so.1".(gdb) run
Starting program:/usr/bin/fiosurface-scan
[Thread debugging usinglibthread_dbenabled]
[New Thread 46912498286832 (LWP 2158)]
write-phase: (g=0): rw=write, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1
verify-phase: (g=1): rw=read, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1 Starting 2 threads
[New Thread 1084229952 (LWP 2161)]
Jobs: 1 (f=1): [WP] [-.-% done] [ 0/ 57822 kb/s] [eta 00m:00s]**** I'm pressing CTRL-C ****
Program received signal SIGINT, Interrupt. [Switching to Thread 46912498286832 (LWP 2158)]
0x0000003c23495511in nanosleep () from/lib64/libc.so.6(gdb) bt
Quoted 5 lines
#0 0x0000003c23495511 in nanosleep () from /lib64/libc.so.6 #1 0x0000003c234c8554 in usleep () from /lib64/libc.so.6 #2 0x0000000000408448 in main (argc=<value optimized out>, argv=<valueoptimized out>) at fio.c:1394
(gdb)
Can you recreate with the -O2 removed in the Makefile? That'll get us some better debug information. You probably also want to inspect the thread that crashed, you are looking at the main process and that just mainly sleeps and does status dumps every few seconds.
Signature · 1 line
Jens Axboe
Quoted 49 lines · Jens Axboe
Quoted 42 lines · Erwan Velu
I'm running fio with the surface scan example, and it just segfault and generate a core if I'm pressing CTRL-C during the test.
[root@max5 examples]# fio surface-scan
write-phase: (g=0): rw=write, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1
verify-phase: (g=1): rw=read, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1 Starting 2 threads
**** I'm pressing CTRL-C ****
fio: terminating on signal 2
Quit (core dumped)
[root@max5 examples]#Then same from gdb:
[root@max5 examples]# gdb --args fio surface-scan
GNU gdb Red Hat Linux (6.5-25.el5_1.1rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "x86_64-redhat-linux-gnu"...Using hostlibthread_dblibrary "/lib64/libthread_db.so.1".(gdb) run
Starting program:/usr/bin/fiosurface-scan
[Thread debugging usinglibthread_dbenabled]
[New Thread 46912498286832 (LWP 2158)]
write-phase: (g=0): rw=write, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1
verify-phase: (g=1): rw=read, bs=64K-64K/64K-64K, ioengine=sync, iodepth=1 Starting 2 threads
[New Thread 1084229952 (LWP 2161)]
Jobs: 1 (f=1): [WP] [-.-% done] [ 0/ 57822 kb/s] [eta 00m:00s]**** I'm pressing CTRL-C ****
Program received signal SIGINT, Interrupt. [Switching to Thread 46912498286832 (LWP 2158)]
0x0000003c23495511in nanosleep () from/lib64/libc.so.6(gdb) btQuoted 5 lines
#0 0x0000003c23495511 in nanosleep () from /lib64/libc.so.6 #1 0x0000003c234c8554 in usleep () from /lib64/libc.so.6 #2 0x0000000000408448 in main (argc=<value optimized out>, argv=<valueoptimized out>) at fio.c:1394
(gdb)
Quoted 4 lines
Can you recreate with the -O2 removed in the
Makefile? That'll get us some better debug information. You probably also want to inspect the thread that crashed, you are looking at the main process and that just mainly sleeps and does status dumps every few seconds.
OK nevermind, it's because of that main thread getting its own SIGQUIT and not handling it. The below should fix it, I'll release a new version soon.
fio.c +12 -0
@@ -116,6 +116,13 @@ static void sig_alrm(int fio_unused sig) } } +/* +* Happens on thread runs with ctrl-c, ignore our own SIGQUIT +*/ +static void sig_quit (int sig) +{ +} +static void sig_int (int sig) {if (threads) {
@@ -154,6 +161,11 @@ static void set_sig_handlers(void) act.sa_handler = sig_ill; act.sa_flags =SA_RESTART ;sigaction (SIGILL , &act,NULL ); + +memset (&act,0 ,sizeof (act)); + act.sa_handler = sig_quit; + act.sa_flags =SA_RESTART ; +sigaction (SIGQUIT , &act,NULL ); }static inline int should_check_rate (struct thread_data *td)
Signature · 1 line
Jens Axboe