본인도 새로 알게되었으며, 각각의 SOC의 성능을 측정을 할수 있는 App을 간단히 소개한다.
만약 존재하지 않는다면, 아래에 같이 Github에서 Download에서 다운로드에서 사용을해보자.
https://en.wikipedia.org/wiki/NBench
1. Benchmark Test
1.1 CPU 기본성능 TEST
- proc/cpuinfo : 가장기본적인 정보
- Dhrystone : CPU의 성능을 측정하는 방법으로, 별도의 프로그램이 필요.
- Whetstone : 유사하지만, 둘 사이의 차이점은 아직 발견을 못하겠음.
- Linkpack: FPU 성능측정을 위해서 사용하면 되겠다.
Proc에서 제공해주는 기본적인 BogoMIPS가 있다.
# cat /proc/cpuinfo processor : 0 model name : ARMv7 Processor rev 10 (v7l) BogoMIPS : 598.17 Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpd32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x2 CPU part : 0xc09 CPU revision : 10 Hardware : Generic AM43 (Flattened Device Tree) Revision : 0000 Serial : 0000000000000000CPU를 기본적으로 측정하는 프로그램으로, MIPS로 나오며,
1.2 Dhrystone
사용법은 Benchmark할 횟수를 적어줘야한다.
단위는 DMIPS (Dhrystone MIPS) 이며, RISC와 CISC에 따라 알고리즘이 약간식 다르게 동작이 되는 것 같다.
# /usr/bin/dhrystone Dhrystone Benchmark, Version 2.1 (Language: C) Program compiled without 'register' attribute Please give the number of runs through the benchmark: 40000000 // 이 값이 너무 작으면 측정이 제대로 안됨 Execution starts, 40000000 runs through Dhrystone Execution ends Final values of the variables used in the benchmark: Int_Glob: 5 should be: 5 Bool_Glob: 1 should be: 1 Ch_1_Glob: A should be: A Ch_2_Glob: B should be: B Arr_1_Glob[8]: 7 should be: 7 Arr_2_Glob[8][7]: 40000010 should be: Number_Of_Runs + 10 Ptr_Glob-> Ptr_Comp: 151560 should be: (implementation-dependent) Discr: 0 should be: 0 Enum_Comp: 2 should be: 2 Int_Comp: 17 should be: 17 Str_Comp: DHRYSTONE PROGRAM, SOME STRING should be: DHRYSTONE PROGRAM, SOME STRING Next_Ptr_Glob-> Ptr_Comp: 151560 should be: (implementation-dependent), same as above Discr: 0 should be: 0 Enum_Comp: 1 should be: 1 Int_Comp: 18 should be: 18 Str_Comp: DHRYSTONE PROGRAM, SOME STRING should be: DHRYSTONE PROGRAM, SOME STRING Int_1_Loc: 5 should be: 5 Int_2_Loc: 13 should be: 13 Int_3_Loc: 7 should be: 7 Enum_Loc: 1 should be: 1 Str_1_Loc: DHRYSTONE PROGRAM, 1'ST STRING should be: DHRYSTONE PROGRAM, 1'ST STRING Str_2_Loc: DHRYSTONE PROGRAM, 2'ND STRING should be: DHRYSTONE PROGRAM, 2'ND STRING Microseconds for one run through Dhrystone: 0.2 Dhrystones per Second: 5000000.0
위의 나온 결과로 아래와 같이 본인이 계산을 해야한다.
5000000.0 / 1757 = 2845.7598178713716562322140011383 // 1757로 나눈다. 2845.7598178713716562322140011383 / 1000MHz (CPU CLOCK) = 2.84
CPU Clock = 1000MHz
DMIPS / MHz = 2.84 DMIPS
아래에서 Dhryston 관련사이트에서 확인 반드시 확인.
https://en.wikipedia.org/wiki/Dhrystone
ARM 관련 Chip들 DMIPS 정보를 보고 비교해보자.
https://en.wikipedia.org/wiki/List_of_ARM_microarchitectures
DMIPS 계산방법
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0273a/ar01s05.html
1.3 Whetstone
사용법은 Loop 횟수를 적어줘야한다.
나온결과는 Millions of Whetstone Instructions Per Second (MWIPS)
/usr/bin/whetstone 100000 // loop count를 입력해야한다. Loops: 100000, Iterations: 1, Duration: 6 sec. C Converted Double Precision Whetstones: 1666.7 MIPS
Whetstone 관련내용
https://en.wikipedia.org/wiki/Whetstone_(benchmark)
1.4 Linpack
Floating Point Operation을 TEST하기 위한 Benchmark Program이라고 하며, output은 KFLOPS
# /usr/bin/linpack Unrolled Single Precision Linpack Unrolled Single Precision Linpack norm. resid resid machep x[0]-1 x[n-1]-1 1.6 3.80277634e-05 1.19209290e-07 -1.38282776e-05 -7.51018524e-06 times are reported for matrices of order 100 dgefa dgesl total kflops unit ratio times for array with leading dimension of 201 0.02 0.00 0.02 34333 0.06 0.36 0.02 0.00 0.02 34333 0.06 0.36 0.01 0.00 0.01 68667 0.03 0.18 0.01 0.00 0.01 68667 0.03 0.18 times for array with leading dimension of 200 0.00 0.00 0.00 inf 0.00 0.00 0.02 0.00 0.02 34333 0.06 0.36 0.00 0.00 0.00 inf 0.00 0.00 0.01 0.00 0.01 114444 0.02 0.11 Unrolled Single Precision 68667 Kflops ; 10 Reps
Linpack에 관련내용
https://en.wikipedia.org/wiki/LINPACK_benchmarks
1.5 lmbench로 Memory 성능측정
lmbench의 한 bin 파일로 기본 사용법 lmbench package를 넣어 TEST 해보자.
//AM487x EVM TEST # bw_mem 1M rd 1.00 359.91 # bw_mem 1M wr 1.00 305.75 # bw_mem 1M rdwr 1.00 281.14 # bw_mem 1M cp 1.00 181.46 # bw_mem 1M fwr 1.00 676.59 # bw_mem 1M frd 1.00 269.40 # bw_mem 1M fcp 1.00 214.76 # bw_mem 1M bzero 1.00 675.68 # bw_mem 1M bcopy 1.00 252.87
http://lmbench.sourceforge.net/cgi-bin/man?section=8&keyword=bw_mem
- 시스템 관련 성능 측정
위에서 언급한 lmbench package이며, 다양한 TEST가 가능하다.
- RAM 관련 TEST
- File 관련 TEST
- Network TEST
- TLB 및 Cache TEST
- UNIX Function Memory Map TEST
각각의 지연시간(Latency)를 확인이 가능하며, 성능개선을 위해 알아 둬야 할 것 같다.
더불어 Hardware or Software 적으로 최적화를 진행을 하고 TEST를 해보면 추후
좋을 것 같다.
http://lmbench.sourceforge.net/cgi-bin/man?keyword=lmbench§ion=8
- lmbench 소스와 관련사용법 TI에서 제공
아래의 사이트에서 자세한 기본사용법과 소스를 다운받아 사용해보자.
http://processors.wiki.ti.com/index.php/Lmbench
https://sourceforge.net/projects/lmbench/
2. BenchMark 관련소스 및 Bin Download
상위 CPU 관련 성능 측정관련 Source 및 Bin 파일
https://github.com/tonyho/ARM_BenchMark