Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

I have an ARM-based embedded machine based on S3C2416 board. According to the specifications I have available there should be a 533 MHz ARM9 (ARM926EJ-S according to /proc/cpuinfo), however the software running on it "feels" slow, compared to the same software on my Android phone with a 528MHz ARM CPU.

/proc/cpuinfo tells me that BogoMIPS is 266.24. I know that I should not trust BogoMIPS regarding performance ("Bogo" = bogus), however I would like to get a measurement on the actual CPU speed. On x86, I could use the rdtsc instruction to get the time stamp counter, wait a second (sleep(1)), read the counter again to get an approximation on the CPU speed, and according to my experience, this value was close enough to the real CPU speed.

How can I find the actual CPU speed of given ARM processor?

Update

I found this simple Pi calculator, which I compiled both for my Android phone and the ARM board. The results are as follows:

S3C2416

# cat /proc/cpuinfo
Processor   : ARM926EJ-S rev 5 (v5l)
BogoMIPS    : 266.24
Features    : swp half fastmult edsp java 
...
#./pi_arm 10000
Calculation of PI using FFT and AGM, ver. LG1.1.2-MP1.5.2a.memsave
...
8.50 sec. (real time)

Android

# cat /proc/cpuinfo
Processor   : ARMv6-compatible processor rev 2 (v6l)
BogoMIPS    : 527.56
Features    : swp half thumb fastmult edsp java 
# ./pi_android 10000
Calculation of PI using FFT and AGM, ver. LG1.1.2-MP1.5.2a.memsave
...
5.95 sec. (real time)

So it seems that the ARM926EJ-S is slower than my Android phone, but not twice slower as I would expect by the BogoMIPS figures. I am still unsure about the clock speed of the ARM9 CPU.

share|improve this question
    
elinux.org/S3C2416 says 400MHz? –  ta.speot.is Mar 29 '12 at 12:21
    
Yes, that's the original, I should have got a newer model with 533MHz CPU, that is why I'm checking if I got what I should have... –  MiKy Mar 29 '12 at 12:27
    
266.24*2=532.48 So it seems like it's dead on. My 480MHz ARM CPU gets 239.2, 439.2*2=478.4. –  David Schwartz Mar 29 '12 at 12:38
    
There are many things that can affect the speed of applications besides CPU speed, such as RAM speed, RAM bus width, and speed of storage/NAND. –  ultrasawblade Mar 29 '12 at 13:16
1  
I'm familiar with the S3C2416. It's an indeed an ARM9/ARMv4 design, not a "Cortex" ARMv6 or v7 design. The ARM in your Android smartphone probably is a Cortex, e.g. Cortex A5 design. –  MSalters Mar 29 '12 at 13:45
show 1 more comment

4 Answers 4

up vote 4 down vote accepted

AFAICT the clock of a S3C2416 looks just like that of a S3C2443, or similar processors of its family. The Linux source code for it suggests that there are a number of closely-related clocks.

Choice snippet:

    pll = get_mpll(mpllcon, xtal);
    clk_msysclk.clk.rate = pll;

    fclk = pll / get_fdiv(clkdiv0);
    hclk = s3c2443_prediv_getrate(&clk_prediv);
    hclk /= s3c2443_get_hdiv(clkdiv0);
    pclk = hclk / ((clkdiv0 & S3C2443_CLKDIV0_HALF_PCLK) ? 2 : 1);

    s3c24xx_setup_clocks(fclk, hclk, pclk);

    printk("CPU: MPLL %s %ld.%03ld MHz, cpu %ld.%03ld MHz, mem %ld.%03ld MHz, pclk %ld.%03l MHz\n",
           (mpllcon & S3C2443_PLLCON_OFF) ? "off":"on",
           print_mhz(pll), print_mhz(fclk),
           print_mhz(hclk), print_mhz(pclk));

Update from OP

I have been looking for this output from dmesg, but I could not find anything - the dmesg output was littered with debug messages, and the beginning was missing. Clearly the kernel message buffer was too short to hold all messages until I connect by telnet. By putting /bin/dmesg > /tmp/dmesg.log early in the startup process, I was able to get this output, confirming what I wanted to know:

Linux version 2.6.21 (gcc version 4.2.2)
CPU: ARM926EJ-S revision 5 (ARMv5TEJ)
Machine: SMDK2416
...
CPU S3C2416 EVT3
S3C24XX Clocks, (c) 2004 Simtec Electronics
S3C2416: mpll on 534.000 MHz, cpu 534.000 MHz, mem 133.500 MHz, pclk 66.750 MHz
share|improve this answer
add comment

Try cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq.

On my android this reads 1113600, so this is in MHz.

share|improve this answer
    
Unfortunately ls -l /sys/devices/system/cpu/cpu0/ is giving me zero results. It seems like the board does not support frequency scaling (or the kernel is too old). –  MiKy Mar 29 '12 at 16:02
add comment

With Linux, if you have the hwinfo command, then (as root) issue:
hwinfo --cpu | grep Clock

share|improve this answer
add comment

dmidecode is a useful little tool that dumps what is currently in the DMI table into a format you can read. Doing a dmidecode | grep "Current Speed" (as root or with sudo) will print out the CPU speed that is currently being reported in the DMI.

share|improve this answer
    
That would be great, unfortunately I have a limited environment, i.e. no Python. –  MiKy Mar 29 '12 at 12:35
    
@MiKy: If I see this correctly, dmidecode is C, native. –  Bobby Mar 29 '12 at 12:39
    
Oh, right, I was looking at the Debian dmidecode armel repository, and it listed Python as a dependency. I'll try to compile it and see how it goes. –  MiKy Mar 29 '12 at 12:42
1  
Isn't DMI a BIOS thing, which doesn't exist on ARM platforms? –  ultrasawblade Mar 29 '12 at 13:12
    
The "D" stands for desktop, so chances are that this embedded system won't have it. –  MSalters Mar 29 '12 at 13:48
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.