วิธีรับความเร็วสัญญาณนาฬิกา ARM CPU ใน Linux


16

ฉันมีเครื่องฝังตัวแบบ ARM โดยใช้บอร์ด S3C2416 ตามข้อกำหนดที่ฉันมีอยู่ควรจะมี 533 MHz ARM9 (ARM926EJ-S ตาม/proc/cpuinfo) อย่างไรก็ตามซอฟต์แวร์ที่ทำงานบนมัน "รู้สึก" ช้าเมื่อเทียบกับซอฟต์แวร์เดียวกันบนโทรศัพท์ Android ของฉันด้วย CPU ARM 528MHz

/proc/cpuinfoบอกฉันว่า BogoMIPS คือ 266.24 ฉันรู้ว่าฉันไม่ควรเชื่อถือ BogoMIPS เกี่ยวกับประสิทธิภาพ ("Bogo" = bogus) อย่างไรก็ตามฉันต้องการวัดความเร็วของ CPU จริง บน x86 ฉันสามารถใช้rdtscคำสั่งเพื่อรับตัวนับการประทับเวลารอวินาที (sleep (1)) อ่านตัวนับอีกครั้งเพื่อรับการประมาณความเร็วของ CPU และจากประสบการณ์ของฉันค่านี้ใกล้พอที่จะ ความเร็วของ CPU ที่แท้จริง

ฉันจะค้นหาความเร็ว CPU จริงของหน่วยประมวลผล ARM ที่กำหนดได้อย่างไร

ปรับปรุง

ฉันพบเครื่องคิดเลข Pi ที่เรียบง่ายซึ่งฉันรวบรวมทั้งสำหรับโทรศัพท์ Android และกระดาน ARM ผลลัพธ์มีดังนี้:

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)

ดังนั้นดูเหมือนว่า ARM926EJ-S จะช้ากว่าโทรศัพท์ Android ของฉัน แต่ไม่ช้าลงสองเท่าอย่างที่ฉันคาดหวังจากตัวเลข BogoMIPS ฉันยังไม่แน่ใจเกี่ยวกับความเร็วสัญญาณนาฬิกาของ ARM9 CPU


elinux.org/S3C2416พูดว่า 400MHz?
ta.speot.is

ใช่นั่นคือต้นฉบับฉันควรจะมีรุ่นใหม่กว่าด้วย 533MHz ซีพียูนั่นคือเหตุผลที่ฉันตรวจสอบว่าฉันได้ในสิ่งที่ฉันควรจะมี ...
MiKy

1
266.24*2=532.48ดูเหมือนว่ามันจะตายแล้ว ฉัน 480MHz ARM CPU ได้รับ 439.2*2=478.4239.2,
David Schwartz

มีหลายสิ่งที่สามารถส่งผลต่อความเร็วของแอปพลิเคชั่นนอกเหนือจากความเร็วของ CPU เช่นความเร็ว RAM, ความกว้างของบัส RAM และความเร็วในการจัดเก็บ / NAND
LawrenceC

1
ฉันคุ้นเคยกับ S3C2416 มันเป็นการออกแบบ ARM9 / ARMv4 ไม่ใช่การออกแบบ "Cortex" ARMv6 หรือ v7 ARM ในสมาร์ทโฟน Android ของคุณอาจเป็น Cortex เช่นการออกแบบ Cortex A5
MSalters

คำตอบ:


4

AFAICT นาฬิกาของ S3C2416 ดูเหมือนกับ S3C2443 หรือโปรเซสเซอร์ที่คล้ายกันในตระกูลเดียวกัน รหัสที่มาลินุกซ์สำหรับมันแสดงให้เห็นว่ามีจำนวนของนาฬิกาที่เกี่ยวข้องอย่างใกล้ชิด

ตัวอย่างตัวเลือก:

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

อัปเดตจาก OP

ฉันกำลังมองหาสิ่งที่ส่งออกมาจากdmesgนี้ แต่ฉันไม่สามารถหาอะไร - dmesgเอาท์พุทที่เกลื่อนไปด้วยข้อความแก้ปัญหาและจุดเริ่มต้นหายไป เห็นได้ชัดว่าบัฟเฟอร์ข้อความเคอร์เนลสั้นเกินไปที่จะเก็บข้อความทั้งหมดจนกว่าฉันจะเชื่อมต่อโดย telnet เมื่อ/bin/dmesg > /tmp/dmesg.logเริ่มต้นกระบวนการเริ่มต้นฉันสามารถรับผลลัพธ์นี้ได้โดยยืนยันสิ่งที่ฉันต้องการรู้:

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

ลองcat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freqดู

เกี่ยวกับหุ่นยนต์ของฉันนี้อ่าน 1113600 ดังนั้นนี้อยู่ในเฮิร์ทซ์


น่าเสียดายที่ls -l /sys/devices/system/cpu/cpu0/ให้ผลลัพธ์เป็นศูนย์แก่ฉัน ดูเหมือนว่าบอร์ดไม่รองรับการปรับความถี่ (หรือเคอร์เนลเก่าเกินไป)
MiKy

1
ผมเชื่อว่ามันอยู่ใน KHz ตามkernel.org/doc/Documentation/cpu-freq/user-guide.txt
เกบ

ส่วนหนึ่งของต้นไม้หายไปจาก Debian 3.16.7-ckt25-2 cpufreqหายไปภายใต้/sys/devices/system/cpu/cpu0/(และซีพียูอื่น ๆ ) มันเป็นบอร์ดต้น ARMv8 / Aarch64 Mustang แต่ฉันไม่แน่ใจว่ามันเป็นส่วนหนึ่งของปัญหาหรือไม่ ARMv8 / Aarch64 HiKey ทำงาน 3.18.0-linaro-hikey มีต้นไม้
jww

ไม่มีอยู่ใน Raspberry Pi 3 B + ที่เรียกใช้ Debian 64- บิตเช่นกัน คุณต้องการแพ็กเกจเพื่อรับมันหรือไม่?
Jon Harrop

1

ด้วย Linux หากคุณมีhwinfoคำสั่งปัญหา (ในฐานะ root):
hwinfo --cpu | grep Clock


นี่เป็นเครื่องมือ SuSE และโดยปกติจะไม่สามารถใช้งานได้ในการแจกแจงแบบอื่น
Evi1M4chine

สำหรับ Debian Jessie: "แพคเกจ hwinfo ไม่พร้อมใช้งาน แต่ถูกอ้างอิงโดยแพ็คเกจอื่น"
jww

hwinfo มีให้บริการใน Debian: packages.debian.org/sid/admin/hwinfo
David Lechner

grepping สำหรับนาฬิกาบน ARM926EJ-S CPU ขึ้นมาแม้ว่าที่ว่างเปล่า
เดวิด Lechner

ล้างข้อมูลบน Raspberry Pi 3 B + ที่รัน 64- บิต Debian ด้วย
Jon Harrop

-1

dmidecodeเป็นเครื่องมือเล็ก ๆ ที่มีประโยชน์ที่จะทิ้งสิ่งที่อยู่ในDMIตารางเป็นรูปแบบที่คุณสามารถอ่านได้ ทำdmidecode | grep "Current Speed"(ตามหรือรากกับ sudo) จะพิมพ์ออกมาความเร็วของ CPU DMIที่กำลังมีการรายงานใน


น่าเสียดายที่ฉันมีสภาพแวดล้อมที่ จำกัด เช่นไม่มี Python
MiKy

@MiKy: ถ้าฉันเห็นสิ่งนี้ถูกต้อง dmidecode คือ C, native
Bobby

4
DMI ไม่ใช่สิ่ง BIOS ซึ่งไม่มีอยู่ในแพลตฟอร์ม ARM ใช่หรือไม่
LawrenceC

3
"D" หมายถึงเดสก์ท็อปดังนั้นโอกาสที่ระบบฝังตัวนี้จะไม่มี
MSalters

1
สำหรับ Debian Jessie: "แพ็คเกจ dmidecode ไม่พร้อมใช้งาน แต่ถูกอ้างถึงโดยแพ็คเกจอื่น" เท่าที่ฉันรู้บอร์ด ARM ไม่ได้ใช้ BIOS ของพีซี
jww
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.