보고미프스

BogoMips

보고맵("bogus"와 MIPS에서)은 Linux 커널이 내부 사용중 루프 보정을 위해 부팅할 때 발생하는 CPU 속도를 대략적으로 측정하는 것이다.[1] 흔히 인용되는 용어의 정의는 "프로세서가 전혀 아무것도 할 수 없는 초당 백만 회 수"[2][3]이다.

보고맵스는 해당 프로세서가 유사한 프로세서의 적절한 범위에 있는지 검증하는 데 사용할 수 있는 값이다. 즉, 보고맵스는 잠재적으로 존재하는 CPU 캐시뿐만 아니라 프로세서의 클럭 주파수를 나타낸다. 서로 다른 CPU 간의 성능 비교에는 사용할 수 없다.[4]

역사

1993년, Lars Wirzenius는 리눅스 커널에서 comp.os.linux에 소개된 이유를 설명하는 Usenet 메시지를[5] 게시했다.

[...]
MIPS는 초당 수백만 개의 지침을 줄인 말이다. 프로세서의 연산 속도에 대한 척도다. 대부분의 그러한 조치와 마찬가지로 적절히 사용하는 것보다 남용되는 경우가 많다(MIPS를 다른 종류의 컴퓨터에 대해 정당하게 비교하는 것은 매우 어렵다).
보고맵스는 라이너스 자신의 발명품이다. 리눅스 커널 버전 0.99.11 (1993년 7월 11일 날짜)은 타이밍 루프(비버스티 루프 대기 방식에 비해 시간이 너무 짧거나 너무 정확해야 함)가 필요했는데, 이 루프는 기계의 프로세서 속도에 맞게 보정되어야 한다. 따라서, 커널은 부팅 시 특정 종류의 바쁜 루프가 컴퓨터에서 얼마나 빨리 실행되는지 측정한다. "보고"는 "보구스" 즉, 가짜에서 온 것이다. 따라서 보고맵 값은 프로세서 속도를 어느 정도 나타내지만 보고맵 이외의 것으로 불리기에는 너무 비과학적이다.
부팅할 때 인쇄되는 이유(두 가지)는 a) 디버깅과 컴퓨터[] 캐시와 터보 버튼이 작동하는지 확인하는 데 약간 유용하며, b) 리누스는 뉴스에서 혼란스러운 사람들을 보면 낄낄거리는 것을 좋아하기 때문이다.
[...]

적절한 BogoMips 등급

매우 근사적인 안내서로서, 보고맵은 다음 표로 사전 계산될 수 있다. 지정된 등급은 현재 및 적용 가능한 Linux 버전의 CPU에 대해 일반적으로 적용된다. 이 지수는 비교를 위해 모든 CPU의 "클록 속도당 BogoMips"와 Intel 386DX CPU의 "Clock 속도당 BogoMips"의 비율이다.[6][7]

시스템 순위 색인
인텔 8088 시계 × 0.004 0.02
인텔/AMD 386SX 시계 × 0.14 0.8
인텔/AMD 386DX 시계 × 0.18 1 (정의)
모토로라 68030 시계 × 0.25 1.4
사이릭스/IBM 486 시계 × 0.34 1.8
인텔 펜티엄 시계 × 0.40 2.2
인텔 486 시계 × 0.50 2.8
AMD 5x86 시계 × 0.50 2.8
MIPS R4000/R4400 시계 × 0.50 2.8
ARM9 시계 × 0.50 2.8
모토로라 68040 시계 × 0.67 3.7
파워PC 603 시계 × 0.67 3.7
인텔 스트롱암 시계 × 0.66 3.7
넥스젠 Nx586 시계 × 0.75 4.2
파워PC 601 시계 × 0.84 4.7
알파21064/21064a 시계 × 0.99 5.5
알파 21066/21066A 시계 × 0.99 5.5
알파 21164/2164a 시계 × 0.99 5.5
인텔 펜티엄 프로 시계 × 0.99 5.5
Cyrix 5x86/6x86 시계 × 1.00 5.6
인텔 펜티엄 II/III 시계 × 1.00 5.6
AMD K7/애슬론 시계 × 1.00 5.6
인텔 셀러론 시계 × 1.00 5.6
인텔 이타늄 시계 × 1.00 5.6
R4600 시계 × 1.00 5.6
히타치 SH-4 시계 × 1.00 5.6
라즈베리 파이(B 모델) 시계 × 1.00 5.6
인텔 이타늄 2 시계 × 1.49 8.3
알파 21264 시계 × 1.99 11.1
비아 센타우루스 시계 × 1.99 11.1
AMD K5/K6/K6-2/K6-III 시계 × 2.00 11.1
AMD Duron/Athlon XP 시계 × 2.00 11.1
AMD 셈프론 시계 × 2.00 11.1
울트라Sparc II 시계 × 2.00 11.1
인텔 펜티엄 MMX 시계 × 2.00 11.1
인텔 펜티엄 4 시계 × 2.00 11.1
인텔 펜티엄 M 시계 × 2.00 11.1
인텔 코어 듀오 시계 × 2.00 11.1
인텔 코어 2 듀오 시계 × 2.00 11.1
인텔 아톰 N455 시계 × 2.00 11.1
센타우루스 C6-2 시계 × 2.00 11.1
파워PC 604/604e/750 시계 × 2.00 11.1
인텔 펜티엄 3세 코퍼민 시계 × 2.00 11.1
인텔 펜티엄 3세온 시계 × 2.00 11.1
모토로라 68060 시계 × 2.00 11.1
Intel Xeon MP(32비트)(하이퍼 스레딩) 시계 × 3.97 22.1
IBM S390 충분한 데이터 없음(필수)
충분한 데이터 없음(필수)

2.2.14 리눅스 커널을 사용하여 CPU 상태의 캐싱 설정을 보고맵 계산 이전으로 이동시켰다. 비록 보고맵 알고리즘 자체는 바뀌지 않았지만, 그 커널에서부터 현재의 펜티엄 CPU에 대한 보고맵 등급은 변경 전 등급의 두 배였다. 변경된 보고맵 결과는 실제 프로세서 성능에 영향을 미치지 않았다.[citation needed]

리눅스에서는 cpuinfo 파일을 검색하여 보고맵을 쉽게 얻을 수 있다.[7]

$ grep -i 보고미스/limits/limitinfo 

보고M의 연산IPS

커널 2.6.x로, 보고MIPS는 다음에서 구현된다. /usr/src/linux/init/calibrate.c 커널 원본 파일. 리눅스 커널 타이밍 매개 변수를 계산한다. loops_per_jiffy (지피 참조) 값. 소스 코드의 설명:

  /* * * while (jifies < start_jiffies+1) * start = read_current_timer(); *와 같은 단순한 루프. 우리는 jiffy 스위치 *가 먼저 일어났는지 timer_value가 먼저 읽혔는지 잘 모르기 때문이다. 그리고 이 두 사건 사이에 어떤 비동기 * 이벤트가 발생할 수 있는데, lpj의 오류를 발생시킨다.    우리가 언제 우리가 지피 스위치 있는 일이 일어날지 참고, 우리는 2,3주문한 것에 대해 아무것도 몰라 확신합니다는 지피 스위치*4.post_start<>또는 지피 스위치 후에;-*2. 수표 지피 스위치*3. 시작한<>-타이머 값 발생하지 않다고 확신할지라도 world그래서 우리는*,-이제,post_start를 보고1. pre_start<>.그리고 pre_start 차이, 비동기 이벤트 발생 여부 */ 

loops_per_jiffy 구현에 사용됨 udelay (마이크로초 단위로 표시됨) 및 ndelay (나노초 단위로 표시됨) 함수. 이러한 기능은 하드웨어를 대기하기 위해 일부 드라이버가 필요로 한다. 사용량이 많은 대기 기술이 사용되므로 실행 시 커널이 효과적으로 차단됨을 참고하십시오. ndelay/udelay 기능들 i386 아키텍처용 delay_loop 에 구현되다 /usr/src/linux/arch/i386/lib/delay.c 다음과 같이.

/* 단순 루프 기반 지연: */ 정태의 공허하게 하다 delay_properties(서명이 없는 장기의 루프를 돌다) {   인트로 d0;    __asm___ __휘발성__(     "\tjmp 1f\n"     ".168 16\n"     "1:\tjmp 2f\n"     ".168 16\n"     "2:\t%0 선언\n\tjns 2b"     :"=&a" (d0)     :"0" (루프를 돌다)); } 

다음의 조립자 코드에 상당하는

; 입력: eax = d0 ; 출력: eax = 0        jmp  출발하다 .cs 16 시작: jmp  보디 .cs 16 본문:  선언하다 이삭스        jns  보디 

C-pseudocode에 다시 쓸 수 있는

정태의 공허하게 하다 delay_properties(장기의 루프를 돌다) {   장기의 d0 = 루프를 돌다;   하다 {     --d0;   } 하는 동안에 (d0 >= 0); } 

보고맵에 대한 전체 정보와 세부 정보 및 수백 개의 참조 항목은 (기존) 보고맵스 mini-Howto에서 찾을 수 있다.[4]

타이머 기반 지연

2012년에 ARM은 새로운 것을 기부했다. udelay 많은 ARMv7 CPU에 내장된 시스템 타이머를 사용중 대기 루프 대신 사용할 수 있는 구현. 이 구현은 리눅스 커널 버전 3.6에서 발표되었다.[8] 타이머 기반 지연은 주파수 스케일링을 사용하여 런타임에 프로세서의 속도를 동적으로 조정하는 시스템에서 더욱 강력하다. loops_per_jiffies 값이 반드시 선형적으로 확장되는 것은 아니다. 또한 타이머 주파수를 미리 알고 있기 때문에 부팅 시 보정이 필요 없다.

이러한 변화의 한 가지 부작용은 보고MIPS 값이 CPU의 코어 주파수가 아닌 타이머 주파수를 반영한다는 것이다. 일반적으로 타이머 주파수는 프로세서의 최대 주파수보다 훨씬 낮으며, 일부 사용자는 기존의 바쁜 대기 루프를 사용하는 시스템과 비교할 때 이례적으로 낮은 보고MIPS 값을 보고 놀랄 수 있다.

참고 항목

참조

  1. ^ Van Dorst, Wim (January 1996). "The Quintessential Linux Benchmark". Linux Journal. Retrieved 2008-08-22.
  2. ^ 1990년대 초 인터넷에 게재된 에릭 S 레이몬드제프 매켄지 등은 추적 불가능한 기원이다.
  3. ^ Raymond, Eric S. "Hackers Jargon File".
  4. ^ a b Van Dorst, Wim (2 March 2006). "BogoMips Mini-Howto" (V38 ed.). Retrieved 2008-08-22.
  5. ^ Wirzenius, Lars. "Re: printing & BogoMips".
  6. ^ Bekman, Stas. "What is a BogoMip?".
  7. ^ a b "BogoMips mini-Howto".
  8. ^ Deacon, Will. "ARM: 7452/1: delay: allow timer-based delay implementation to be selected".

외부 링크