Skip to contentSkip to conversation

Build issue on arm: undefined reference to `get_cpu_clock'

DISCUSSION Michael Opdenacker 2 participants 7 messages Aug 10, 2010 – Aug 16, 2010

lore
Share & tools
lore
#0 lore raw

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 in
arch/arch-ia64.h
arch/arch-x86.h
arch/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
#1 lore raw
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 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 in
arch/arch-ia64.h
arch/arch-x86.h
arch/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.
#2 lore raw

Hi Jens,

Quoted 6 lines · Jens Axboe
Quoted 5 lines · Michael Opdenacker

The get_cpu_clock function is only defined in
arch/arch-ia64.h
arch/arch-x86.h
arch/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
#3 lore raw
Quoted 15 lines · Michael Opdenacker

Hi Jens,

Quoted 12 lines · Jens Axboe
Quoted 11 lines · Michael Opdenacker

The get_cpu_clock function is only defined in
arch/arch-ia64.h
arch/arch-x86.h
arch/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.

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.
#4 lore raw
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_clock function is only defined in
arch/arch-ia64.h
arch/arch-x86.h
arch/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.

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
#5 lore raw

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
#6 lore raw
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