Làm thế nào để có được tốc độ xung nhịp CPU ARM trong Linux?


16

Tôi có một máy nhúng dựa trên ARM dựa trên bảng S3C2416. Theo thông số kỹ thuật tôi có sẵn, nên có ARM9 533 MHz (ARM926EJ-S theo /proc/cpuinfo), tuy nhiên phần mềm chạy trên nó "cảm thấy" chậm, so với phần mềm tương tự trên điện thoại Android của tôi với CPU ARM 528 MHz.

/proc/cpuinfonói với tôi rằng BogoMIPS là 266,24. Tôi biết rằng tôi không nên tin tưởng vào BogoMIPS về hiệu năng ("Bogo" = không có thật), tuy nhiên tôi muốn có được một phép đo về tốc độ CPU thực tế. Trên x86, tôi có thể sử dụng rdtschướng dẫn để lấy bộ đếm thời gian, đợi một giây (ngủ (1)), đọc lại bộ đếm để có được xấp xỉ về tốc độ CPU và theo kinh nghiệm của tôi, giá trị này đủ gần với tốc độ CPU thực.

Làm cách nào để tìm tốc độ CPU thực tế của bộ xử lý ARM đã cho?

Cập nhật

Tôi tìm thấy máy tính Pi đơn giản này , tôi đã biên dịch cả cho điện thoại Android và bo mạch ARM. Kết quả như sau:

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)

Vì vậy, có vẻ như ARM926EJ-S chậm hơn điện thoại Android của tôi, nhưng không chậm hơn hai lần như tôi mong đợi bởi các số liệu của BogoMIPS. Tôi vẫn không chắc chắn về tốc độ xung nhịp của CPU ARM9.



Vâng, đó là bản gốc, đáng lẽ tôi phải có một model mới hơn với CPU
533 MHz

1
266.24*2=532.48Vì vậy, có vẻ như nó đã chết. CPU ARM 480 MHz của tôi có được 239.2 , 439.2*2=478.4.
David Schwartz

Có nhiều thứ có thể ảnh hưởng đến tốc độ của các ứng dụng bên cạnh tốc độ CPU, chẳng hạn như tốc độ RAM, chiều rộng bus RAM và tốc độ lưu trữ / NAND.
LawrenceC

1
Tôi quen thuộc với S3C2416. Đây thực sự là một thiết kế ARM9 / ARMv4, không phải là thiết kế "Cortex" ARMv6 hay v7. ARM trong điện thoại thông minh Android của bạn có thể là một Cortex, ví dụ như thiết kế Cortex A5.
MSalters

Câu trả lời:


4

AFAICT đồng hồ của S3C2416 trông giống như của S3C2443 hoặc các bộ xử lý tương tự của gia đình. Các mã nguồn Linux cho nó gợi ý rằng có một số đồng hồ chặt chẽ liên quan đến.

Đoạn trích lựa chọn:

    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));

Cập nhật từ OP

Tôi đã tìm kiếm đầu ra này từ dmesg, nhưng tôi không thể tìm thấy bất cứ điều gì - dmesgđầu ra bị lấp đầy bởi các thông báo gỡ lỗi, và sự khởi đầu bị thiếu. Rõ ràng bộ đệm thông điệp kernel quá ngắn để giữ tất cả các tin nhắn cho đến khi tôi kết nối bằng telnet. Bằng cách đặt /bin/dmesg > /tmp/dmesg.logsớm trong quá trình khởi động, tôi đã có thể nhận được đầu ra này, xác nhận những gì tôi muốn biết:

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

9

Hãy thử cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq.

Trên Android của tôi, nó đọc 1113600, vì vậy đây là kHz .


Thật không may ls -l /sys/devices/system/cpu/cpu0/là cho tôi kết quả bằng không. Có vẻ như bảng không hỗ trợ mở rộng tần số (hoặc kernel quá cũ).
MiKy

1
Tôi tin rằng đó là KHz theo kernel.org/doc/Documentation/cpu-freq/user-guide.txt
Gabe

Một phần của cây bị thiếu trong Debian 3.16.7-ckt25-2. cpufreqbị thiếu dưới /sys/devices/system/cpu/cpu0/(và các cpu khác). Đây là một bo mạch ARMv8 / Aarch64 Mustang đầu tiên, nhưng tôi không chắc liệu đó có phải là một phần của vấn đề không. Một HiKey ARMv8 / Aarch64 chạy 3.18.0-linaro-hikey có cây.
ngày

Không tồn tại trên Raspberry Pi 3 B + chạy Debian 64 bit. Bạn có cần một gói để có được nó?
Jon Harrop

1

Với Linux, nếu bạn có hwinfolệnh thì vấn đề (là root):
hwinfo --cpu | grep Clock


Đây là một công cụ SuSE và thường không có sẵn theo mặc định trên các bản phân phối khác.
Evi1M4chine

Đối với Debian Jessie: "Gói hwinfo không khả dụng, nhưng được gọi bằng gói khác."
ngày

HWiNFO có sẵn trong Debian: packages.debian.org/sid/admin/hwinfo
David Lechner

Mặc dù đồng hồ trên CPU ARM926EJ-S sắp hết sản phẩm
David Lechner

Làm trống trên Raspberry Pi 3 B + cũng chạy Debian 64 bit.
Jon Harrop

-1

dmidecodelà một công cụ nhỏ hữu ích giúp chuyển những gì hiện có trong DMIbảng thành định dạng bạn có thể đọc. Làm một dmidecode | grep "Current Speed"(như root hoặc với sudo) sẽ in ra tốc độ CPU hiện đang được báo cáo trong DMI.


Điều đó thật tuyệt, thật không may, tôi có một môi trường hạn chế, tức là không có Python.
MiKy

@MiKy: Nếu tôi thấy điều này một cách chính xác, dmidecode là C, bản địa.
Bobby

4
Không phải DMI là một thứ BIOS, thứ không tồn tại trên nền tảng ARM sao?
LawrenceC

3
Chữ "D" là viết tắt của máy tính để bàn , vì vậy rất có thể hệ thống nhúng này sẽ không có nó.
MSalters

1
Đối với Debian Jessie: "Gói dmidecode không khả dụng, nhưng được gọi bằng gói khác." Theo tôi biết, các bo mạch ARM không sử dụng BIOS PC.
ngày
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.