Build issue on arm: undefined reference to `get_cpu_clock'
Hello,
Though the arm platform seems to be supported, fio fails to build on the arm platform. Other non Intel platforms should also be impacted.
gettime.o: In function `get_cycles_per_usec':/home/ubuntu/.phoronix-test-suite/installed-tests/fio/fio-1.42/gettime.c:192:
undefined reference to `get_cpu_clock' /home/ubuntu/.phoronix-test-suite/installed-tests/fio/fio-1.42/gettime.c:199:
undefined reference to `get_cpu_clock'
make: *** [fio] Error 1
Unlike in the fio_gettime, where there is an "#ifdef ARCH_HAVE_CPU_CLOCK" statement around the calls to get_cpu_clock(), there are other places where this function is used unconditionally.
The get_cpu_clock function is only defined inarch/arch-ia64.harch/arch-x86.harch/arch-x86_64.h
How are other architectures supported? I don't understand fio can support them without defining the get_cpu_clock() function.
I did my tests on version 1.42, but faced the same issues with the latest git version.
Thank you in advance.
Cheers,
Michael.
Signature · 5 lines
Michael Opdenacker, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com + 33 621 604 642
Quoted 21 lines · Michael Opdenacker
Hello,
Though the arm platform seems to be supported, fio fails to build on the arm platform. Other non Intel platforms should also be impacted.
gettime.o: In function `get_cycles_per_usec':
/home/ubuntu/.phoronix-test-suite/installed-tests/fio/fio-1.42/gettime.c:192:
undefined reference to `get_cpu_clock'/home/ubuntu/.phoronix-test-suite/installed-tests/fio/fio-1.42/gettime.c:199:
undefined reference to `get_cpu_clock'
make: *** [fio] Error 1Unlike in the
fio_gettime, where there is an "#ifdefARCH_HAVE_CPU_CLOCK" statement around the calls toget_cpu_clock(), there are other places where this function is used unconditionally.The
get_cpu_clockfunction is only defined inarch/arch-ia64.harch/arch-x86.harch/arch-x86_64.h
Quoted 5 lines
How are other architectures supported? I don't understand fio can support them without defining the
get_cpu_clock()function.I did my tests on version 1.42, but faced the same issues with the latest git version.
Indeed, dunno what happened there. I'll take a look.
Signature · 4 lines
Jens Axboe Confidentiality Notice: This e-mail message, its contents and any attachments to it are confidential to the intended recipient, and may contain information that is privileged and/or exempt from disclosure under applicable law. If you are not the intended recipient, please immediately notify the sender and destroy the original e-mail message and any attachments (and any copies that may have been made) from your system or otherwise. Any unauthorized use, copying, disclosure or distribution of this information is strictly prohibited.
Hi Jens,
Quoted 6 lines · Jens Axboe
Quoted 5 lines · Michael Opdenacker
The
get_cpu_clockfunction is only defined inarch/arch-ia64.harch/arch-x86.harch/arch-x86_64.h
Quoted 8 lines
Quoted 6 lines
How are other architectures supported? I don't understand fio can support them without defining the
get_cpu_clock()function.I did my tests on version 1.42, but faced the same issues with the latest git version.
Indeed, dunno what happened there. I'll take a look.
I have seen your addition of get_cpu_clock() for the ppc architecture.
By the way, wouldn't it be more portable to use the POSIX clock_gettime() function instead of reading an architecture dependent register? At least, this is recommended on
http://en.wikipedia.org/wiki/Time_Stamp_Counter
Thank you for your support,
Cheers,
Michael.
Signature · 5 lines
Michael Opdenacker, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com + 33 621 604 642
Quoted 15 lines · Michael Opdenacker
Hi Jens,
Quoted 12 lines · Jens Axboe
Quoted 11 lines · Michael Opdenacker
The
get_cpu_clockfunction is only defined inarch/arch-ia64.harch/arch-x86.harch/arch-x86_64.hHow are other architectures supported? I don't understand fio can support them without defining the
get_cpu_clock()function.I did my tests on version 1.42, but faced the same issues with the latest git version.
Quoted 8 lines
Quoted 2 lines
Indeed, dunno what happened there. I'll take a look.
I have seen your addition of
get_cpu_clock()for the ppc architecture.By the way, wouldn't it be more portable to use the POSIX
clock_gettime()function instead of reading an architecture dependent register? At least, this is recommended on
http://en.wikipedia.org/wiki/Time_Stamp_Counter
Of course using clock_gettime() would be more portable. The point of the CPU clock is speed. If you are testing IOPS into the ranges of millions and doing ~5 clock calls per IO, then portability takes a back seat to speed.
But arm needs to work of course, I will commit a patch to fix it as soon as I can.
Signature · 4 lines
Jens Axboe Confidentiality Notice: This e-mail message, its contents and any attachments to it are confidential to the intended recipient, and may contain information that is privileged and/or exempt from disclosure under applicable law. If you are not the intended recipient, please immediately notify the sender and destroy the original e-mail message and any attachments (and any copies that may have been made) from your system or otherwise. Any unauthorized use, copying, disclosure or distribution of this information is strictly prohibited.
Quoted 25 lines · Jens Axboe
Quoted 15 lines · Michael Opdenacker
Hi Jens,
Quoted 12 lines · Jens Axboe
Quoted 11 lines · Michael Opdenacker
The
get_cpu_clockfunction is only defined inarch/arch-ia64.harch/arch-x86.harch/arch-x86_64.hHow are other architectures supported? I don't understand fio can support them without defining the
get_cpu_clock()function.I did my tests on version 1.42, but faced the same issues with the latest git version.
Quoted 8 lines
Quoted 2 lines
Indeed, dunno what happened there. I'll take a look.
I have seen your addition of
get_cpu_clock()for the ppc architecture.By the way, wouldn't it be more portable to use the POSIX
clock_gettime()function instead of reading an architecture dependent register? At least, this is recommended on
http://en.wikipedia.org/wiki/Time_Stamp_Counter
Quoted 7 lines
Of course using
clock_gettime()would be more portable. The point of the CPU clock is speed. If you are testing IOPS into the ranges of millions and doing ~5 clock calls per IO, then portability takes a back seat to speed.But arm needs to work of course, I will commit a patch to fix it as soon as I can.
Committed such a patch, would be nice if you could test. Either git pull or download fio-1.43-rc1 (or latest snap).
Signature · 1 line
Jens Axboe
Hi Jens,
Quoted 6 lines · Jens Axboe
Quoted 6 lines
Of course using
clock_gettime()would be more portable. The point of the CPU clock is speed. If you are testing IOPS into the ranges of millions and doing ~5 clock calls per IO, then portability takes a back seat to speed.
Quoted 6 lines
Quoted 3 lines
But arm needs to work of course, I will commit a patch to fix it as soon as I can.
Committed such a patch, would be nice if you could test. Either git pull or download fio-1.43-rc1 (or latest snap).
Many thanks for the patch!
I had no problem compiling it on ARM, and I ran it with no problem on an example job file:
[random-writers]
ioengine=libaio
iodepth=4
rw=randwrite
bs=32k
direct=0
size=64m
numjobs=4
Now, you may modify the README file to mention that the ARM platform is supported too.
Thanks again,
Cheers,
Michael.
Signature · 5 lines
Michael Opdenacker, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com + 33 621 604 642
Quoted 29 lines · Michael Opdenacker
Hi Jens,
Quoted 6 lines · Jens Axboe
Quoted 6 lines
Of course using
clock_gettime()would be more portable. The point of the CPU clock is speed. If you are testing IOPS into the ranges of millions and doing ~5 clock calls per IO, then portability takes a back seat to speed.Quoted 6 lines
Quoted 3 lines
But arm needs to work of course, I will commit a patch to fix it as soon as I can.
Committed such a patch, would be nice if you could test. Either git pull or download fio-1.43-rc1 (or latest snap).
Many thanks for the patch!
I had no problem compiling it on ARM, and I ran it with no problem on an example job file:
[random-writers]
ioengine=libaio
iodepth=4
rw=randwrite
bs=32k
direct=0
size=64m
numjobs=4
Quoted 2 lines
Now, you may modify the README file to mention that the ARM platform is supported too.
Great, thanks for confirming.
Signature · 1 line
Jens Axboe