2012-07-13 2 views
3

bogoMIPS 값을 얻기 위해 삼성 Galaxy (sgh-i897)에서 cpuinfo 파일을 읽었습니다. 그런 정보를 해석하는 법을 배웁니다.bogoMIPS 값이 변경 중입니다

처음로드 스레드의 주요 활동에서이 작업을 수행했으며 항상 997.59의 값을 받았습니다. 어쨌든 필자는 나중에 UI에서 파일을 읽을 필요가 없었기 때문에 파일 읽기 방법을 서비스로 옮겼습니다. 내가 이것을 한 번 읽었을 때의 가치는 상당히 달라졌고, 300 ~ 500 범위와 같이 언제나 훨씬 더 느린 애플리케이션 시작마다 바뀌는 것처럼 보입니다.

내 질문은 :

  1. 안드로이드 OS/Linux는 밉스 값의 오차를 유발하고 주기적으로 cpuinfo의 파일을 수정합니까?

  2. 그렇다면 강제로 프로그래밍 방식으로 사용할 수 있습니까?

  3. 서비스에서 파일을 읽는 주 활동 스레드에 따라 파일이 달라지는 이유는 무엇입니까?

  4. 궁극적으로 가장 정확한 숫자를 원한다면 우리가 필요로하는 순간에 스스로 타이밍 루프를 작성하는 것이 가장 좋습니다. (어쨌든,이 때문에 CPU 부하로 변하고 모든 시간을 가정?)와 같은

+2

내 안드로이드 폰은 CPU가 수요가 없을 때 전력을 절약하기 위해 CPU 속도를 동적으로 설정합니다. 나는 대부분의 (아마도 모든) 안드로이드 휴대폰이 이것을한다고 상상할 것입니다. 그래서 이것은 bogoMIPS 값을 바꿀 것입니다 ... – Flimzy

+0

잘 알고 있습니다. 그런 다음 OS는 이것이 발생할 때마다 cpuinfo 파일을 다시 작성하고 (?) 활동이 완전히로드되어 기본적으로 대기 중이므로 (서비스가 시작된 이후) 서비스의 검색이 CPU의 느린 "상태"에있을 수 있습니다. 그건 의미가 있습니다, 난 그냥 부팅 후 한 번만 제외하고 cpuinfo 파일을 업데이 트하는 운영 체제를 기대하지 않았다. – Tam

+2

글쎄, cpuinfo 파일은 실제로 파일이 아닙니다 ... 내부 커널 정보에 대한 파일과 같은 인터페이스 일뿐입니다. 과거에 한 번에 부팅시 bogomips가 계산 된 것 같았습니다 ... 동적 CPU 속도의 출현으로 인해 오래 전에 변경된 것 같습니다 (적어도 이러한 플랫폼의 경우). 그러나 그것은 추측입니다. Google은 아마 더 많이 알고 있습니다. – Flimzy

답변

6

간단한 대답 : 커널을 해킹하지 않는다면 BogoMIPS를 사용하지 마십시오.

BogoMIPS 란 무엇입니까?

운영 체제 커널에서 수행하는 대부분의 작업에는 하드웨어 또는 다른 프로세서 코어에서 실행되는 프로세스를 기다리는 작업이 포함됩니다. 커널은 다른 시간 척도로 대기 할 수있는 다양한 방법을 가지고있다. 짧은 기간 동안, 종종 단순히 '서클에서 돌아 다니며'더 기술적으로 '바쁜 대기 루프'로 알려져 있습니다.

BogoMIPS 벤치 마크는 대기중인 대기 루프 일뿐입니다. 커널은 루프를 실행하고 꽤 안정적인 벽시계를 사용하여 시간을 측정하며 특정 시간 동안 대기하기 위해 대기중인 대기 루프를 실행하는 데 필요한 시간을 결정합니다.

왜 BogoMIPS 값이 변경됩니까?

컴퓨터 (이 경우 스마트 폰)가 많은 작업을 수행하지 않을 때 매우 빠른 프로세서가 거의 필요하지 않습니다. 운영 체제가 최대 주파수보다 낮을 수 있음을 감지하면 프로세서를 더 낮은 주파수로 낮출 수 있습니다. 이것은 OS가 에너지 사용량 (배터리 구동 컴퓨터와 관련 있음) 및 열 생산량 (거의 모든 것과 관련됨)을 줄일 수있는 방법 중 하나입니다.

물론 최대 빈도가 낮아지면 BogoMIPS 벤치 마크 결과는 더 이상 중요하지 않습니다. 바쁜 대기 루프의 모든 반복이 더 오래 걸릴 것이기 때문입니다. 커널은 벤치 마크를 재실행하고 BogoMIPS 값을 업데이트함으로써, 바쁜 대기가 짧은 시간 동안 기다리는 안정적인 방법으로 남아있게합니다.

처리 필요성이 증가하고 프로세서를 다시 스로틀해야 할 때 비슷한 점이 있습니다.

이 BogoMIPS 값은 어떻게 사용해야합니까?

타이밍을 다루는 커널의 일부분을 해킹하지 않는 한, BogoMIPS 값에 신경 쓰지 않아야합니다. 사실, 이지만 BogoMIPS 값은이어야합니다. Android SDK를 사용하거나 /sys 파일 시스템에서 제공하는 정보를 사용하여 현재 CPU 주파수를 확인할 수있는 방법이있을 수 있습니다.

+0

감사합니다. 또한 멀티 프로세서가 다른 코어에서 다른 bogoMIPS를 갖는 이유를 설명합니다. 나는 이것을 더 잘 느끼고있다. 지금은 주 활동 시작 중 정확히 997.59의 일정한 가치가 최대 (상승) 가능한 값이며, 서비스는 더 조용한 시간이며, 그 밖의 것들은 가볍게 전화. (전화 회사에서 요구하는 것을 제외하고는이 전화에서 다른 응용 프로그램을 실행하지 않습니다.)이 작업은 코드와 관련이별로 없지만 지금 코딩 작업을 진행하는 방법에 대해 매우 교훈적이었습니다. – Tam

2
그 처음 시작시, 다양한 요인에 따라 안드로이드에서 오히려 변덕이기 때문에 당신은 밉스을 변경 강요 할 수

, (같은 다른 리눅스 커널), 커널 소스 내에 초기 부팅 (arch/arm/boot/smp.carch/arm/boot/vmlinux.lds.S에 사용되는 jiffies), 그것은 아니다 당연한 될합니다 (밉스를 결정하는 것입니다, 즉 왜의 '가짜'부분적 이유 그 자체).

밉스의 스큐 아래

서비스/위젯/실행되고있는 앱이 얼마나 많은
  • 하는 것입니다 영향을 미치는 요인?
  • CPU가 과소/초과 클럭입니까? 무슨 주파수 요?
  • 어떤 종류의 스케줄러가 있습니다 (그 중 몇 가지가 있지만 데드 라인/온 디맨드/인터랙티브가 있습니다)
  • 커널은 어떻게 구성되어 있습니까? 최적화되어 있습니까? 어떤 구성을 사용하여 구축 했습니까? "가게"는 CPU의 정보의 값으로 사용

데이터는 /proc 파일 시스템에서 부팅에 만든 가상 디렉터리에 저장됩니다, 그것은 거기에 볼 수 있으며 대부분은, 전부는 아니더라도 제로 파일이 있습니다에 바이트를 읽을 수 있습니다. 부팅시 동적으로 생성됩니다.

+0

감사합니다. 나는 실제로 그것을 바꾸는 것에 관심이 없다 (흠,하지만 지금은 그것에 대해 ... 아마) 생각하지만, 오히려 가장 최신의 가치를 얻고 있습니다. Flimzy와 함께 commnmets가 더 명확하게 나타납니다. – Tam

관련 문제