수안이의 컴퓨터 연구실

  • Mainpage
  • About Me
  • Tags
  • Metapage
  • Notice
  • Location
  • Keywords
  • Guestbook
  • Admin
  • Write an Article
  • Total | 1620948
  • Today | 328
  • Yesterday | 482

2 Articles, Search for '하드웨어 안정성'

  1. 2007/05/04 Linux 하드웨어 안정성 가이드, Part 2
  2. 2007/05/04 Linux 하드웨어 안정성 가이드, Part 1
Unix & Linux/System2007/05/04 14:45

Linux 하드웨어 안정성 가이드, Part 2

드라이버, IRQ, PCI 레이턴시(latency)

Daniel Robbins
President/CEO, Gentoo Technologies, Inc.
2001년 7월

Linux가 명성을 얻는데에는 안정성이 큰 기여를 했다. 하지만, 세상에서 가장 안정적인 OS라도 하드웨어에 결함이 있거나 설정이 잘못되었다면 아무런 소용이 없을 것이다. NVIDIA의 드라이버를 사용하여 Linux에서 NVIDIA TNT 그래픽 카드를 실행했었던 필자(Daniel Robbins)의 경험을 이야기한다. IRQ와 PCI latency 타이머 문제를 진단하고 픽스하는 방법을 설명한다.
불안정성의 원인들
안정성 문제는 불완전한 하드웨어 때문에 발생하는 것만은 아니다. 주로 적절하지 못한 하드웨어 설정이나 미약한 드라이버 때문에 문제가 발생한다.

NVIDIA에는 Linux용 디스플레이 드라이버가 있다. 이러한 드라이버들은 Xfree86 4.0에 포함된 표준 2d-only NVIDIA 드라이버 보다 많은 장점을 가지고 있다. 그 중 하나는 3D 지원이 강화되었다는 점이다. 게다가 Mesa의 강화 버전이라기 보다는 공식적인 OpenGL 1.2 구현이라는 특징이 있다. 이러한 NVIDIA기반의 그래픽 카드를 가지고 있다면 강화된 드라이버를 사용하고 싶을 것이다. 적어도 이론상으로는 그렇다. 그들을 적절하게 작동시키려는 시도를 통해 많은 것을 배웠다.

Linux NVIDIA 드라이버를 설치하고 나서(참고자료), Xfree86를 시작했고 모든 3D 애플리케이션 구동을 시작했다. 지금은 매우 훌륭히 작동한다. 그 이전까지 나는 3D acceleration을 이용하기 위해 Windows NT를 재부팅 해야만 했다. 지금 NT는 신경쓰지 않는다. 3D 애플리케이션을 사용하기위해 재부팅 하는 것은 다소 성가신 일이였지만 Linux를 남겨놓아 머신을 재부팅한다. 하지만 한시간 정도 만지작거리면 Linux 3D aspiration에 치명적인 퇴보를 경험한다. 머신이 잠긴다. 마우스가 멈추고 스크린은 얼어붙었다. 시스템을 재부팅해야 했다.

사실 몇 가지 종류의 안정성 문제가 있었다. 하지만 무엇이 문제를 일으키는지 정확히 몰랐다. 안정적이지 않은 하드웨어 탓인지 카드가 잘못 설정 되어서 그런지 확실하지 않았다. 어쩌면 드라이버와 관련된 문제일지도 모른다. 또는 VIA KT133 기반의 Athlon 마더보드 때문인지도 모른다. 문제가 어떤것이든 간에 빨리 해결하고 싶었다. 이 글에서 나는 하드웨어 안정성 문제를 해결했던 과정을 설명하겠다. 나와 똑 같은 문제를 가지고 있지 않더라도, 문제를 진단하고 픽스하는 과정들은 본질적으로 Linux 하드웨어의 다른 문제 유형에도 적용할 수 있으리라 생각한다.

하드웨어 점검
내 머리속에 떠오른 생각 중 하나는 내가 가지고 있는 하드웨어가 약간 미약하다는 것이였다. 반면 Diamond Viper V550은 Windows NT에서는 아무런 문제가 없었다. 하지만 Linux에서는 칩이 경직되고 열(heat) 과 관련된 lock-up이 생긴다. V550는 극도로 뜨거워졌고 OEM heatsink는 그런대로 적절했다. 나는 V550을 위해 heatsink/fan이 통합된 것을 구입하기 위해 PC Power and Cooling을 참조했다. (참고자료)

그렇게 해서 나는 Video Cool을 구입했다. 비디오 카드에 있던 OEM heatsink를 떼고 TNT 칩을 청소하고 칩의 상단에 Video Cool을 붙였다. 결과는? 비디오 카드는 더 이상 뜨거워지지 않았다. 하지만 lockup은 계속되었다. 이 특별한 경험을 통해서 배운 한 가지 교훈은 시스템이 시작하기에 적당할 정도로 냉각되었다는 것을 확신할 수 있다면 부적절한 냉각으로 인한 컴포넌트의 오작동에 대해서 걱정하지 않아도 된다는 것이다. workstation과 서버를 뜨거워지지 않게 유지하며 실행하기 위해서는 시간과 노력이 필요하다. 열과 관련된 문제들을 연구해본 결과 lockup은 결함있는 하드웨어 때문이 아니라는 것을 알았다. 다른 요소를 찾아보기 시작했다.

새로운 드라이버만이 솔루션인가?
나는 부분적으로는 NVIDIA의 드라이버가 문제의 원인이라고 생각했다. 다행히 신 버전 드라이버가 배포되었다. 그래서 나는 즉시 업그레이드 하였다. 안정성 문제를 해결할 수 있기를 희망했다. 하지만 openprojects.net의 다른 #nvidia channel을 검토한 결과 어떤 누구도 드라이버를 안정적으로 실행시키지 못했다. 내가 나서야 할 때라고 생각했다.

#nvidia와 관련하여 어떤 사람은 V550가 IRQ를 다른 카드와 공유하지 않는 것이 분명하다고 말한다. 표준 XFree86 드라이버와는 다르게 NVIDIA 드라이버는 올바른 작동을 위해 IRQ가 필요하다. 드라이버가 "cat /proc/interrupts"를 입력하고 지켜보았다. V550는 IDE 컨트롤러와 인터럽트를 공유하고 있었다. 문제를 해결했던 방법을 설명하기에 앞서 IRQ에 대해 간단히 설명하겠다.

PC는 IRQ (일반적으로 하드웨어 인터럽트)를 사용하여 비디오 카드와 디스크 컨트롤러와 같은 주변의 디바이스가 실행 준비가 된 데이터를 가지고 있는 CPU에 신호를 주도록 한다. PCI 버스라는 것이 존재하기 전에는 머신의 디바이스 마다 전용의 IRQ를 가지고 있어야만 했다. 여러분이 아직도 ISA 주변장치를 사용하고 있다면 그 사실은 여전히 유효하다. 모든 non-PCI 디바이스들은 전용의 IRQ를 가져야 한다.

IRQ & PCI
하지만 이것은 PCI bus와는 약간 다르다. PCI는 네 개의 IRQ를 할당하여 시스템의 PCI/AGP 카드에 의해 사용될 수 있다. 일반적으로 이러한 IRQ는 다중 디바이스들 사이에서 공유 될 수 있다. (공유를 수행하는 모든 디바이스가 PCI와 AGP 디바이스인지를 확인하라.) IRQ 공유는 중요하다. 다섯개의 PCI와 한 개의 AGP 슬롯을 가지고 있는 머신에 있어 특히 중요하다. IRQ 공유 없이는 시스템에 IRQ를 사용하는 카드를 네 개 이상 가질 수 없다.

하지만 PCI IRQ 공유에도 제한은 있다. 일반적으로 마더보드 BIOS와 Linux 커널이 PCI IRQ 공유를 지원하는 반면 특정 PCI 카드는 IRQ를 다른 디바이스와 공유할 때 작동하지 않을 때가 있다. 간헐적인 시스템 lockup을 경험했다면, 특히 lockup이 특정 하드웨어 디바이스의 사용과 관련이 있다면 모든 PCI 디바이스가 고유의 IRQ를 사용하도록 해야한다. 우선 디바이스들이 IRQ를 공유하고 있는지를 보는 것이 첫 번째 순서이다:

디스크, 사운드, 비디오, SCSI 같은 하드웨어 디바이스를 사용한다. 이것으로 Linux가 이러한 다양한 디바이스에 대한 인터럽트를 핸들할 것임을 알 수 있다.
지금까지 Linux 커널이 핸들했던 모든 인터럽트 리스트와 카운트(count)를 나타내는 "cat /proc/interrupts"는 리스트의 가장 오른쪽 칼럼을 참조하라. 한 행에 두 개 이상의 디바이스 리스트가 있다면 그것들이 특정 IRQ를 공유하고 있는 것이다.
해당 디바이스 중 하나가 non-PCI 디바이스 (ISA 또는 기타 레거시 카드)라면 IRQ 충돌이라는 것을 알 것이다. BIOS나 isapnptools 패키지 또는 physical peripheral 카드에 물리적 점퍼를 가해서 픽스할 수 있다. 디바이스가 마더보드에 내장되었다면 이것이 물리적 PCI 슬롯을 차지하지 않더라도 PCI 디바이스일 가능성이 크다는 것을 주목하라.

해당되는 모든 디바이스들이 PCI 또는 AGP 디바이스라면 하드웨어에 따라서 문제가 생길 수도 있다. 모든 PCI/AGP 디바이스를 고유의 IRQ를 할당하는 방법이 있다:

시스템 BIOS에 들어가서 사용되지 않은 주변기기를 사용 불가 상태로 만든다 (USB, 병렬 포트 등.). 이는 많은 IRQ를 이용할 수 있게 하고 사용되는 하드웨어가 고유의 IRQ를 할당받을 수 있는 기회를 얻게된다.
BIOS의 PnP 섹션으로 들어가 BIOS가 "non-PnP" OS로 설정되었다는 것을 확인한다. 그런 다음 "Reset ESCD data" 옵션을 선택한다. 이것은 BIOS가 여러분이 다음에 재부팅 할 때 모든 하드웨어 디바이스에 IRQ를 재할당 할 수 있도록 한다.
Linux를 부팅하고 cat /proc/interrupts를 사용하고 결과를 본다. 다행스럽게도 모든 디바이스들이 고유의 IRQ를 가지고 있다.
만일 PCI 디바이스가 여전히 IRQ를 공유하고 있다면 여러분이 취할 수 있는 두 가지 옵션이 있다. 어떤 BIOS 셋업 프로그램은 특정 PCI 슬롯에 특정 IRQ를 할당할 수 있다. 만일 여러분이 이러한 드문 BIOS 셋업 프로그램 중 한 개를 가지고 있다면 이 기능을 사용하여 충돌을 줄이는데 사용할 수 있다. 만일 BIOS에 이 옵션이 없다면 또 다른 확실한 방법이 있다. 컴퓨터를 종료하고 파워를 끈다. PC의 전원을 끄는 것이다. 그리고 몇 분 정도 기다린다. 그런다음 시스템 케이스를 열고 PCI 카드를 다른 슬롯으로 옮긴다. 이 옵션은 약간 이상한 방법이지만 아주 훌륭하게 작동할 것이다. 특히 시스템에 몇 개의 여분의 PCI 슬롯이 있다면 더욱 효과적이다. (단, 각 카드에 맞는 정확한 슬롯을 찾는데는 시간이 걸린다).

"PCI 카드 교체하기 트릭"을 통해 내 시스템의 모든 디바이스가 고유의 IRQ를 얻을 수 있었다. 내 IDE 디바이스중 두 개는 여전히 IRQ를 공유하고 있다:





하지만 이것은 정상이다. 왜냐하면 ide2와 ide3 디바이스 Promise FastTrak IDE 카드의 같은 칩으로 통합되었기 때문이다.

거의 모든 디바이스는 고유의 IRQ를 가지고 있기 때문에 나의 accelerated 드라이버를 시도했지만..한 시간이 못되어서 lockup 되었다. 공유된 PCI IRQ 문제게 아니라는 것이 명백해졌다.

끊임없이 발생하는 문제들
몇 시간이 흐른 후에 NVIDIA 드라이버를 완벽하게 실행시킬 수 있는 어떤 방법을 발견했다. 하지만 좀 더 느려졌고 AGP를 사용할 수 없었다. 내가 이러한 상황을 원하지 않은 만큼 현재 버전의 드라이버는 AGP가 XF86Config에 한 라인을 추가함으로서 완전히 꺼질 수 있도록 하였다. AGP를 꺼 놓은 상태에서 비디오의 메모리 대역을 4x로 줄였다. 하지만 매우 느렸던 3D는 다른 어떤 3D acceleration 보다 훨씬 빠르다. AGP를 사용 불가 상태로 만든 후에 마침내 안정적인 시스템을 갖게 되었다. 하지만 이러한 일시적인 솔루션은 다른 문제를 야기시켰다. 3D OpenGL 애니메이션이 지속될 때마다 오디어 플레이백은 고르지 못했다!

다행스럽게도 나는 오디오 문제에 대한 솔루션을 찾을 수 있었다. setpci 유틸리티를 사용하여 PCI 디바이스에 더욱 적절한 PCI bus latency 타이머를 설치했다. 문제 해결 방법을 설명하겠다. 하지만 우선 배경 지식이 필요하다.

PCI 버스는 제한된 대역의 공유 리소스이기 때문에 하나의 PCI가 다른 PCI 카드의 퍼포먼스에 좋지 않은 영향을 끼칠 가능성이 있다. 예를들어 A라는 PCI 카드가 버스를 통해 데이터를 보내는 중에 동시에 B라는 PCI 카드가 데이터 전송을 시도한다면? A가 과연 버스 사용을 허용할까? 아니면 데이터 전송을 그대로 진행할까? 만일 그렇다면 얼마나 오래 진행할까?

PCI latency timer
이러한 질문에 대한 대답은 각각의 PCI 디바이스가 가지고 있는 설정 가능한 PCI bus latency timer와 관련이 있다. 각각의 PCI 디바이스에 맞는 PCI 버스 latency timer 값을 적절히 설정하는 것은 Linux의 역할이다. 대부분 디폴트 세팅이 적당히 되어있다 (최적의 세팅은 아니다). 모든 디바이스는 훌륭히 수행되고 시스템도 적절히 작동한다. PCI 버스 latency timer는 0에서 248 까지 설정할 수 있다. 디바이스가 zero 세팅이 되어있을 경우 다른 디바이스가 전송이 필요하다면 이것은 즉시 버스를 포기한다. 만일 디바이스 세팅이 248로 되어 있다면 멈추기 전까지 오랜 시간동안 버스의 사용을 지속할 것이다. 다른 디바이스는 순서를 기다린다.

모든 디바이스의 PCI 버스 latency timer가 비교적 높게 설정되어 있고 많은 데이터가 버스를 통해 보내질 때 PCI 카드는 일반적으로 버스 제어권을 얻기 전까지 더 오랜시간을 기다린 후에 데이터 전송을 시작할 수 있다. 하지만 버스 제어권을 일단 얻으면 버스가 다른 디바이스로 넘어가기 전까지 이것을 통해서 많은 데이터를 전송할 수 있을 것이다. 왜냐하면 높은 PCI 버스 latency timer 설정은 latency를 늘릴 뿐만 아니라(데이터 전송 지연) 효과적인 대역을 증가시킨다. 각각의 디바이스가 인터럽트 없이 버스를 통해 많은 데이터를 전송하기 때문에 PCI 버스 latency timer 세팅은 좀더 효율적으로 사용되고 PCI 디바이스는 더 많은 데이터를 전송할 수 있는 것이다.

다른 한편으로 PCI 디바이스가 낮은 PCI 버스 레이턴시로 설정되어 있다면 다른 카드가 데이터 전송을 해야 할 때 버스를 기꺼이 포기 할 것이다. 데이터 전송 지연이 훨씬 느려진다. 왜냐하면 어떤 디바이스도 늘어난 시간동안 버스를 붙잡고 있지 않을 것이기 때문이다. 이것의 단점은 낮게 설정된 PCI bus latency timer가 두개 이상의 PCI 디바이스가 동시에 작동할 때 효율적인 PCI 버스 대역을 감소시킨다는 점이다. 많은 데이터 폭주는 자주 발생하지 않으며 버스 제어는 오버헤드를 늘리며 빠르게 변한다.

대부분의 Linux 배포판에는 pci-utils라고 하는 툴이 포함되어 있다. 이것으로 PCI 디바이스의 latency timer 세팅을 보고 변경 할 수 있다. 현재 PCI latency 세팅을 보기 위해서 다음과 같이 해보자:





이 명령어를 타이핑하면 PCI 디바이스에 대한 모든 정보가 매우 자세하게 나온다. 각 디바이스에 대한 PCI 레이턴시 세팅은 세 번째 라인에 나온다. IRQ 세팅 바로 전이다.

PCI latency 접근방법
사운드 문제와 관련된 것은 어떻게 되었는가? 글쎄, 디폴트 PCI latency 설정으로 인해서 사운드 문제를 경험했다. V550이 3D acceleration을 수행할 때 PCI 버스를 억제했다. V550는 AGP 2X 카드이다. 그래서 AGP (안정성을 위해)를 끌 때, 메인 메모리를 75%로 유지하기위해 카드의 대역을 줄인다. V550는 더욱 느려진 PCI 버스를 통해 같은 양의 데이터를 보내려하기 때문에 PCI 버스는 거의 100% utilization에 가까워지고 이것은 사운드 하드웨어에 문제를 일으킨다. 오디오 디바이스는 PCI 레이턴시 문제에 특별히 민감하다. 이유는 오디오 디바이스는 일반적으로 데이터 버퍼가 작고 버퍼를 피하기 위해 제 시간에 오디오 데이터가 전달되어야 하기 때문이다. 현재의 설정으로는 V550는 많은 PCI 대역을 사용하고 있다. 데이터를 사운드 카드로 도달하도록 하기에는 충분하지 못하다. 그래서 나는 오디오 왜곡(distortion)을 경험했던 것이다. 버퍼 언더런(buffer underrun) 때문이다.

두 가지 가능한 솔루션이 있다. 우선 가장 확실한 솔루션은 setpci 명령어를 사용하여 V550의 PCI latency timer를 줄이는 것이다. 이는 PCI 버스를 더욱 빠르게 공유하게 하고 다른 디바이스가 작은 latency로 데이터를 전송할 수 있도록 한다. setpci 명령어를 사용하여 문제 해결을 시도 했고 효과가 있었다. 하지만 이 방법을 사용하지 않기로 했다. 왜냐하면 나는 이미 불구가 된 3D 그래픽 퍼포먼스를 극대화 하고 싶었기 때문이다.

나는 두 번째 방법인 높은 퍼포먼스를 시도하기로 했다. 550 PCI bus latency를 줄이는 대신 나의 모든 디바이스의 PCI latency를 비교적 높은 값인 176으로 늘렸다. (디바이스는 일반적으로 디폴트 레이턴시가 32이다. 디폴트 레이턴시가 200이상인 V550을 제외하고). 그런다음 레이턴시에 민감하게 반응하는 디바이스의 PCI 버스 레이턴시를 최대 248로 설정했다. 이것은 내가 바라던 대로 문제를 해결했다. 사운드 카드는 비교적 많은 데이터를 전송하게 되었다. 버스의 사용을 극대화하고 버퍼 언더런(buffer underrun)을 줄였다. 동시에 나의 다른 디바이스들은 많은 양의 데이터를 전송할 수 있게되었다. 버스를 호깅(hogging)하는 문제가 줄어들고 버스를 효율적으로 사용하였다. 나는 이 솔루션을 특별히 좋아한다. 왜냐하면 나의 개발 머신의 PCI 버스의 대역 효율성을 늘리면서 동시에 오디오 문제도 해결했기 때문이다. 시스템 시작 스크립트를 소개한다. 몇가지 트릭이 사용되었다:




첫 번째 라인에서, -d *:* 옵션은 setpci에게 이 세팅을 모든 PCI 디바이스에 적용하라고 명령한다. latency_timer=b0 옵션은 타이머를 176로 설정한다. 마지막 두개의 라인에 있는 -s 옵션은 PCI 버스/슬롯 기능에 따라 PCI 디바이스를 지정한다. 벤더와 디바이스 ID에 의해서가 아니다. 이것은 lspci를 타이핑 할 때 각각의 디바이스에 대해 나와있는 첫번째 숫자들이다. ff 값은 latency timer를 256으로 설정한다. setpci에 의해 248까지 내려간다. PCI latency timer와 관련된 문제를 경험했다면 lspci와 setpci를 사용하여 시스템에 맞는 최적의 값을 찾아보라. 하드웨어가 이것을 핸들할 수 있다면 가장 큰 latency timer 값이 가장 좋다.


원문 : http://www-903.ibm.com/developerworks/k ··· hw2.html
"System" 카테고리의 다른 글
  • 리눅스에서의 메모리관리 (0)2007/05/04
  • 리눅스 시스템 콜 레퍼런스 (0)2007/05/04
  • Linux 하드웨어 안정성 가이드, Part 2 (0)2007/05/04
  • Linux 하드웨어 안정성 가이드, Part 1 (0)2007/05/04
  • 리눅스 시스템 서비스를 병렬화하여 부팅 속도 향... (0)2007/05/03
2007/05/04 14:45 2007/05/04 14:45
Posted by webdizen
Tags Linux, 하드웨어 안정성
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2894

Leave your greetings.

[로그인][오픈아이디란?]

Unix & Linux/System2007/05/04 14:32

Linux 하드웨어 안정성 가이드, Part 1

CPU 와 메모리 문제 해결

Daniel Robbins
회장/CEO (Gentoo Technologies, Inc.)
2001년 3월

Linux의 안정성에 대한 명성은 가히 전설적이다. 그러나 가장 안정성 있는 운영체제라고 해도 하드웨어에 결함이 있거나 구성이 잘못되면 Linux의 안정성도 유익이 되지 못한다. 이 글에서 Daniel Robbins는 CPU 플레이킹(flaking) 현상을 진단하고 결함을 고치는 방법과 RAM테스트 방법에 대해서 설명한다.
Linux를 사용하고 있는 사용자들이라면 하드웨어 문제를 경험했을 것이다. 대부분 각자가 선호하는 Linux 배포판을 설치하고 추가 애플리케이션을 컴파일 했을 것이다. 모든 것이 완벽한 것 같지만 나중에 새 시스템에서 심각한 하드웨어 버그를 발견했던 경험이 있을 것이다. 그 증상이 무작위 분절화 결함(segmentation faults), 데이터 손상, 하드 록(hard locks) 또는 데이터 유실과 같이 하드웨어에 이상이 생긴다면 Linux를 효율적이고 신뢰성 있게 유지할 수 없다. 이 글은 CPU및 RAM의 플레이킹 현상을 발견하는 방법을 상세히 설명한다. 따라서 사전에 하드웨어의 결함 부분을 교체하여 손상을 예방하고자 한다.

불안정성의 원인이 하드웨어와 관련이 있다는 의심이 들었다면 CPU와 메모리의 작동 여부를 테스트할 것을 권장한다. 설사 이런 불안정 문제를 겪고 있지 않더라도 CPU와 메모리 테스트를 수행하는 것은 나쁘지 않은 생각이다. 그렇게 되면 하드웨어 문제를 미리 파악하여 다급한 시기에 문제가 발생해도 데이터 손실이나 근본적인 원인을 몰라 당황하며 많은 시간을 허비하지 않아도 되기 때문이다. 시스템이 테스트를 통과했다면 그 시스템은 표준 이상이니까 안심을 해도 된다.

CPU 이슈
결함이 많은 CPU를 가지고 있다면 머신은 Linux를 부팅할 수 없거나 몇분 동안 실행하다가 잠금 현상(locking up)이 발생할 수 있다. 이런 소모된 상태의 CPU는 징후가 명백하니까 결함을 진단하기는 쉽다. 그러나 좀 미세한 CPU 결함은 그렇게 쉽게 발견할 수 없다. 일반적으로 발견하기 어려운 모호한 오류의 경우 머신이 종종 이유없이 멈추거나 갑자기 프로세스를 중단되는 것을 말한다. 대부분 불안정한 CPU는 "exercise"에 의해 촉발될 수 있다. 즉 과중한 작업 부담으로 가열되어 CPU작동이 약화된다. 몇 가지 CPU 스트레스 테스트 방법에 대해 살펴보자.

CPU 안정성에 대한 최대의 테스트 중 하나는 Linux 내장 방법 즉 커널 컴파일이라고 하면 아마 매우 놀랄 것이다. gcc 컴파일러는 일반적 CPU 안정성을 위한 우수한 툴이며 커널 빌드에 많이 사용된다. /usr/src/linux 디렉토리에서 다음의 스크립트를 작성하고 실행하여 머신에 고성능 커널 컴파일 스트레스 테스트를 할 수 있다:

cpubuild 스크립트




이 스크립트가 머신으로 하여금 커널을 반복 컴파일 하도록 하는 것을 발견할 것이다. 이유는 간단하다. 어떤 CPU는 간헐적으로 고장이 일어난다. 정확히 시간의 95%를 커널 컴파일 하는데 소모하면서도 가끔 커널 컴파일을 강제적으로 실행 중단시킨다. 대개 그 이유는 5 개 이상의 커널 컴파일 하면 프로세서가 불안정한 상태가 될 정도로 가열되기 때문이다.

상기 스크립트에서 -j옵션을 연속되는 다음 숫자(사용자 일반 시스템의 CPU 숫자)보다 1 이상 크도록 조정해야 한다. 다시 말하면 이중 프로세서 용 "3", 단일 프로세서 용 "2" 등을 사용한다. -j옵션은 make에게 지시하여 make가 커널을 병렬로 구축하여 각 소스 파일이 컴파일 된 다음에 적어도 항상 gcc 프로세스가 준비되게 하여 CPU 스트레스도 최대화 시킨다. Linux 박스가 오후 동안 사용하지 못해도 지장이 없다면 상기 스크립트를 실행하고 머신이 수 시간 동안 커널을 컴파일 시킨다.

CPU 문제점
만약 스크립트가 몇 시간 순조롭게 작동된다면 축하한다. 사용자 CPU는 첫 번째 테스트 관문을 통과한 것이다. 그러나 상기 스크립트가 갑자기 멈출 가능성이 있다. 그런데 그 원인이 다른 게 아니고 바로 CPU 문제 때문이라는 것을 어떻게 알 수 있을까? gcc가 이런 오류를 유발한 경우는 대개 CPU 결함일 가능성이 높다:


gcc: Internal compiler error: program cc1 got fatal signal 11



CPU 상태 시점에 대한 세 가지의 가능성은 다음과 같다:

커널 컴파일을 재개하기 위해 "make bzlmage"를 입력하였는데 컴파일러가 정확하게 동일한 파일에서 작동이 중단되었다면 "make bzlmage"를 재입력한다. 10회 정도 시도해도 빌드 프로세스가 이 특정 파일에서 계속 작동 중지되면 CPU 플레이킹 현상에 문제가 있기 보다는 이 특정 소스 파일로 인하여 gcc(rare) 컴파일러에 의해 유발된 문제일 가능성이 높다. 그러나 오늘날 gcc는 매우 안정되어 이런 일이 발생할 우려는 거의 없다.
커널 컴파일을 재개하기 위하여 "make bzlmage"를 입력하여 조금 있다가 또 다른 신호11을 수신했다면 CPU는 마지막 구간(legs)에 있을 가능성이 많다.
커널 컴파일을 재개하기 위하여 "make bzlmage"을 입력하여 커널 컴파일을 성공적으로 수행해도 이것이 곧 CPU가 OK라는 뜻은 아니다. 이는 대개 CPU가 일정 온도 이상이 되는 경우에만 가끔 CPU 고장이 발생하는 것을 의미한다. (CPU는 확장 시간 동안 사용되는 경우 몇 개의 커널 컴파일을 그 결정적인 포인트까지 가열될 것이다).
CPU 구조 작업
로드가 많아 CPU가 간헐적 오류를 겪고 있다면 전혀 CPU에는 결함이 없거나 아니면 단순히 CPU의 열이 적당하게 식지 않아서 발생된 것일 가능성이 높다. 다음은 CPU점검 사항을 나열한 것이다:

CPU 팬(fan)이 제대로 연결되어 있나?
먼지가 비교적 적게 묻어있나?
전원이 들어오면 팬이 적당한 속도로 도는가?
CPU에서 히트 싱크(heat sink)의 위치가 올바로 지정되어 있는가?
CPU와 히트 싱크 사이에 열 유지(heat grease)가 있나?
케이스에서 충분한 통풍이 되고 있나?
모든 것이 이상이 없다면 케이스를 열어 놓고 커널 컴파일 테스트를 해도 좋다. 커널 컴파일이 약 5분간 작동하고 나서 작동 중인 머신 안에 손을 집어넣어 전원 공급 금속 케이스 바깥 쪽을 접촉하여 신체가 접지가 되도록 한다. 그리고 나서 히트 싱크의 온도를 손가락 끝으로 조심스럽게 테스트하라. 히트 싱크가 예외로 고온이라면 히트 싱크/팬 콤보가 특정 CPU에 적합하지 않을 가능성이 크다. 이런 경우 시스템의 쿨링(cooling) 하드웨어를 업그레이드해라. 아마 CPU는 영구적 손상까지는 입지는 않았으며 아직 양호할 것으로 판단된다.

극단적 CPU 테스트
CPU 안정성 테스트에는 커널 컴파일 테스트가 좋은 방법이다. 그러나 원하는 경우 극단적 CPU 테스트도 사용 가능하다. 이 테스트를 마지막으로 남겨둔 이유는 CPU가 아주 차가운 상태에서 이 특정 테스트를 하게 되면 CPU가 과열되어 이론적으로는 CPU에 영구적인 손상을 유발할 수 있기 때문이다. 이 테스트는 커널 컴파일 테스트를 문제없이 통과할 수 있는 시스템, 즉 가장 도전적인 CPU 로드까지도 쉽게 처리할 수 있는 시스템 용으로 적합하게 설계되었다. CPU가 적절하게 식어지면 이 테스트를 통과한 것이고 그렇지 못한 경우 CPU 쿨링 시스템 보완이 필요하다.

극단적 CPU 테스트 수행을 위한 첫 번째로 일은 Lm_sensors 페이지(참고자료참조)로 가서 lm_sensors 페이지를 다운로드 한 것이다. 이 소스 tarball은 거의 모든 마더보드에 내장된 건강(health) 모니터 기능과 상호작용 하는 다양한 커널 모듈을 포함하고 있다. 일단 이 패키지가 올바르게 설치되고 적당한 모듈(prog/detect/sensors_detect 스트립트를 이용하여 알아낸다) 로드 된 경우에는 새로운 파일과 디렉토리가 /proc/sys/dev/sensors에 나타나는 것을 보게 될 것이다. 이 파일은 CPU 팬의 속도, 모두 실시간으로 갱신되는 CPU와 메인 보드 온도 표시 등의 필요한 정보를 포함한다. 이 패키지 구성으로 모듈을 컴파일하고 sensors_detect 스크립트로 어떤 모듈을 부팅 시 로드 여부에 대해 파악할 것을 권장한다. 개인적으로 이 구성을 사용하여 좋은 결과를 거두었다.

일단 lm_sensors 모듈이 로드 한 경우 /proc/sys/dev/sensors에 있는 "cat" 파일에 반복적으로 의존하지 않고서도 CPU 로드와 온도를 실시간으로 볼 수 있도록 해주는 그래픽 CPU/sensors 모니터 설치를 권장한다. 이런 목적을 위해 gkrellm(참고자료 참조)라는 작지만 우수한 프로그램을 사용한다. 다음은 CPU 사용법, 마더보드 온도 설정 및 기타 여러 사항을 모니터하는 gkrellm app의 스냅샷이다:

gkrellm 실행 중임
사용자 삽입 이미지


기타 lm_sensors와 호환 가능한 그래픽 모니터링 패키지가 사용 가능하다. 이런 일단의 패키지는 "links" 섹션에 있는 lm_sensors 홈 페이지에 나열되어 있으니 참고 바란다.

마지막 예비 단계는 cpuburn 프로그램을 다운로드 하는 것이다. (참고자료 참조) 이 작고 편리한 프로그램은 특정 CPU에 수동적 머신 지시 조합을 사용하여 반복적인 커널 컴파일보다 좀더 많은 최대의 스트레스를 준다. 아카이브에는 P5, P6 클래스 프로세서 설정에 맞춘 여러 작은 프로그램 및 AMDK6 용 특별 버전이 포함되어 있다. 일단 cpuburn tarball을 해체하면(unpacked) README 파일을 읽는다. README 파일은 푼 파일 중에 포함되어 있는 어셈블리와 소스파일을 컴파일 하는 방법을 설명한다. 이 작업이 끝나면 사용자 고유의 작은 cpuburn 프로그램을 갖게 될 것이다.

테스트를 위해 대개 그래픽 센서 모니터를 가동한 다음 cpuburn 프로그램을 루트로서 시작한다. 그리고 나서 CPU 온도 표시가 상승하다가 안정되는 것을 살펴본다. 그리고 나서 cpuburn을 1시간 정도 실행한다. 이런 단계를 반복하여 CPU 온도가 이상적으로 계속 높은 온도로 상승하면(화씨 160도 정도는 비정상적인 높은 온도로 간주됨) CPU 쿨링 시스템을 크게 손질할 필요가 있을 것이다. 사용자의 머신이 충돌(crash) 및 잠금 현상(lock up)이 일어나는 경우 또는 cpuburn 프로세스가 작동 중단(dies)되면, CPU 쿨링 시스템을 개선해야 한다. 아니면 특정한 CPU가 단지 "spec" 미달일 수 도 있다. CPU 온도 표시를 이용하여 판단을 내릴 수 있다. 그러나 만약 모든 것이 제대로 작동되면 여러분 시스템은 어떤 도전도 처리할 수 있으므로 1시간 정도 후에 가서 cpuburn 프로그램을 종료하고 정상 운영을 재개하라.

메모리 테스트
완전히 신뢰할 수 있는 CPU 포함이 정말 중요하고 그것 못지않게 견고한RAM 칩을 갖는 것도 중요하다. 혹자는 SIMMS와 DIMMS는 결코 실패하는 경우가 없어 테스트할 필요도 없다고 생각할 수도 있다. 불행하게도 이는 사실이 아니다. 불량한 메모리는 매우 흔한 현상이며 모두 경계해야 한다. 또 다른 사용자는 불량 RAM이 있어도 어떤 RAM 오류도 BIOS 메모리 검사에 의해 발견될 수 있다고 믿는다. 이것 또한 잘못이다. BIOS 메모리 검사는 불량한 RAM의 대다수를 발견하지 못한다. 따라서 BIOS 검사로 인해 보안에 대한 잘못된 인식을 갖지 않도록 주의하라.

불량 메모리 증상
불량 RAM이 있고 지금 누군가가 여러분의 머신에 앉아있다고 하자. 다음은 사용자의 컴퓨터가 불량 RAM을 포함하고 있다고 표시하는 주의 신호이다:

한꺼번에 일단의 프로그램을 로드하면 가끔 특정 프로그램이 명확한 이유없이 작동 중단된다.
가끔 파일을 열 때 손상된 것 같지만 나중에 그 파일을 열 면 이상이 없다.
tarball을 ("tar xzvf") 추출하면 tar가 tarball의 손상을 빈번히 보고한다. 후일에 tarball을 다시 추출하면 tar는 오류를 보고하지 않는다. gzip와 bzip에 대해서도 동일한 문제가 일어난다.
이 같은 문제를 겪고 있다면 사용자 시스템의 RAM이 결함이 있을 가능성이 높다. 다음 메소드를 사용하여 RAM 테스트를 해야 할 것이다. 이런 문제를 겪고 있지 않더라도 장래 예기치 못한 RAM 이상 현상(quirks) 발생으로 곤란을 겪지 않도록 시스템에서 RAM을 검사하는 것도 좋은 생각이다.

memtest86
다행히도 부팅 플로피 디스크에 설치할 수 있는 memtest86 (참고자료 참조)이라고 하는 뛰어난 Linux 기반 메모리 테스트 프로그램이 있다. memtest 플로피를 생성하는 것은 간단하다. 첫째 tarball을 다운로드한다. 그리고 나서 아카이브를 풀고 바이너리 디스크 이미지를 빌드한다:




그 다음 2.5" 공 디스크를 플로피 디스크 드라이브에 삽입하고 아래 사항을 입력한다:




몇 초가 지나면 3.5" 디스크에는 멋지면서 작은 부팅 가능한 메모리 테스터 그 안에 생긴다. 이 테스트를 수행하는 가장 좋은 방법은 머신이 적어도 6시간은 천천히 작동할 수 있도록 시간을 내는 것이다. 즉 수면 또는 퇴근 시간을 이용해서 테스트를 시작하는 것이 좋다. 테스트를 시작하기 위해 3.5" 디스크를 드라이브에 넣고 머신을 재부팅 하라. 시스템이 부팅되면 memtest86 프로그램은 즉시 시작한다:

사용자 자체 개발 머신에서 RAM 테스트하고 있는 memtest86
사용자 삽입 이미지


"dead" 조각 같은 중요 메모리 이상 현상은 몇 초 내에 발견된다. 불행하게도 흔히 발생되는 특정한 조각 형태에 의해 유발된 실패는 몇 시간이 걸려도 발견되지 않을 수 있다. 물론 결국에는 발견되겠지만 말이다. memtest86이 결함 있는 조각을 발견하면 즉시 스크린 하단에 메시지가 나타나면서 테스트를 계속한다. 아침에 모니터를 키면 테스트가 종료되었다는 것을 알게 되고 스크린에 주의 표시가 사용자의 RAM은 이상이 없는 것이다. 그러나 여러분의 RAM이 "불량한 메모리 증상" 섹션 리스트에 계속 나열되면 RAM은 가끔 발생하는 이상 현상 증상이 있는 것으로 교체할 필요가 있다.

RAM 문제 해결
사용자의 RAM이 원활하게 작동되기를 바란다. 그러나 불행히도 RAM 이상을 겪는 부류에 속해도 전부를 잃은 것은 아니다. 불량 RAM을 고칠 가능성이 있다. 첫째로 BIOS 설치 프로그램을 방문하여 사용자의 메모리 설정을 확인하라. 어떤 BIOS 설정 프로그램에는 "Turbo Mode"라는 메모리 옵션이 있다. 만약 분명히 이와 유사한 것을 사용 가능 상태로 설정한다면 사용 불가로 설정해야 한다. BIOS 메모리 타이밍 부정확 할 가능성도 있다. 타이밍 설정은 조정할 수 있으며(refresh 율 증가 또는 CAS 설정 낮추는 것) memtest86을 재실행하여 문제가 해결되는지 확인할 수 있다.

여전히 memtest가 오류를 발견할 경우, 사용자의 머신에서 SIMM 또는 DIMM이 잘못되었는지(faulty) 검색해야 한다. 사용자가 메모리 모듈을 1개 이상 설치했다면 단일 모듈을 설치하고자 할 것인데 (또는 SIMMS를 가진 경우에는 두 개 모듈) 그렇다면 memtest86을 실행한다. 모든 모듈을 순환(cycle)해 본다. 그러면 어느 것이 결함이 있는지 판단할 수 있다. 좋은 메모리 모듈을 쓰레기 통에 버릴 필요는 없는 것이다 :)

다음에는 IRQ와 PCI 잠복 문제를 포함한 하드웨어 구성과 관련 문제를 수정하는 방법에 대해 살펴 보겠다. 그 동안 다음 참고자료를 숙지하기를 권한다.

원문 : http://www-903.ibm.com/developerworks/k ··· hw1.html
"System" 카테고리의 다른 글
  • 리눅스 시스템 콜 레퍼런스 (0)2007/05/04
  • Linux 하드웨어 안정성 가이드, Part 2 (0)2007/05/04
  • Linux 하드웨어 안정성 가이드, Part 1 (0)2007/05/04
  • 리눅스 시스템 서비스를 병렬화하여 부팅 속도 향... (0)2007/05/03
  • 특정 파일 찾아서find하기 (0)2007/04/10
2007/05/04 14:32 2007/05/04 14:32
Posted by webdizen
Tags Linux, 하드웨어 안정성
No Trackback No Comment

Trackback URL : http://www.webdizen.net/blog/trackback/2893

Leave your greetings.

[로그인][오픈아이디란?]

«Prev  1  Next»

RSS HanRSS
Blog Image
webdizen
이 곳은 컴퓨터에 대해 연구하고, 공유하고, 소통하기 위한 연구실입니다. 개인적으로는 OLAP, Data Mining, Semantic Web, Data Modeling에 대해서 연구하고 있습니다.

Categories

전체 (2998)
Webdizen (134)
Life (6)
Diary (16)
Blog (9)
IDEA (1)
Travel (10)
Book (14)
Photo (7)
Movie (7)
Music (13)
Leisure Sports (10)
Funny (5)
Hardware (119)
Software (120)
Windows (5)
Unix & Linux (119)
Installation (4)
Kernel (10)
System (34)
Develop (22)
X-Window (0)
Applicaton (31)
Security (4)
Framework (2)
Hadoop (2)
Programming (805)
Algorithm & Data Structure (1)
Assembly (38)
UNIX/Linux C (95)
C++ (128)
STL (4)
Java (38)
Win32 API (92)
ATL/COM (44)
MFC (151)
.NET (26)
WCF/WPF (4)
C# (28)
Network Programming (17)
Database Programming (12)
OpenGL / DirectX (13)
Multimedia Programming (0)
Game Programming (21)
Parallel Distributed Progra... (0)
Reverse Engineering (0)
Debugging (9)
Python (1)
Ruby (1)
Ruby on Rails (1)
QT (4)
GTK (0)
JSP (0)
PHP (6)
ASP.NET (6)
ASP (3)
Development (28)
Useful Library (2)
Data Modeling (0)
Database (105)
Oracle (4)
MSSQL (41)
MySQL (2)
Data Warehouse (2)
Data Mining (3)
Network (66)
Web (78)
DHTML (4)
XHTML (1)
Javascript (1)
CSS (1)
AJAX (9)
XML (11)
Flex (1)
Silverlight (3)
Security (91)
DoS (1)
Kernel (10)
Scanning (3)
Sniffing (0)
Spoofing (4)
Overflow (28)
Web (11)
Shell (10)
Format String (14)
Window (2)
Embedded (70)
Multimedia (27)
Mobile (14)
Graphic (24)
Management (633)
Knowledge (581)
Hadoop (0)

Notice

  • 메타 블로그 사이트에 등록
  • 새해 맞이 블로그의 변화
  • 블로그 명칭 변경
  • 도메인(www.webdizen.net) 구...
  • TEXTCUBE 1.6.1로 업그레이드...

Tags

  • /dev/random
  • Zend Framework
  • 석재복합연구소
  • Conventions
  • 프로세스 복사본
  • 나동
  • 터미널 제어
  • CRLF
  • Naver
  • 썸씽 스페셜
  • 더블 쿼테이션
  • Assembly
  • 구분자
  • Time Stamp
  • Performance
  • 검색 제한자
  • TCP
  • 페이지 폴트
  • 실사구시관
  • 리스트

Recent Articles

  • ASCII Code의 CRLF 제거 방법.
  • Hadoop 에서 c++ API 이용시....
  • Ubuntu Linux에서 Hadoop 구....
  • 내 심장을 한껏 뛰게한 "국가....
  • 스타 스키마 데이터베이스 설....

Recent Comments

  • ■ 온라인카지노 ▶ http://L....
    asdf 11/21
  • 그리고 혹시 해외여행자보험....
    kim 11/05
  • ★★실제 바다게임장과 똑같....
    asdf 11/04
  • sbsyama.co.to← 짱5000만당....
    asdf 11/04
  • ♡KicaZ??o(???) 바카라사....
    fdsf3fass 11/03

Recent Trackbacks

  • 파일 열기/저장하기 CFileDialog.
    은마군의 나태블록 02/11
  • World IT Show 2008.
    상우 :: Oranzie's BLOG 2008
  • cvs서버 설치하기.
    3인3색 2008
  • 속속 공개되는 Google Chart....
    PHP와 Web 2.0 2007
  • 마방진을 구하는 프로그램.
    Oranzie's BLOG 3 2007

Archive

  • 2009/09 (3)
  • 2009/08 (1)
  • 2009/03 (1)
  • 2009/02 (9)
  • 2009/01 (13)

Calendar

«   2009/11   »
일 월 화 수 목 금 토
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

Bookmarks

    • Administration
      • IIS.NET
      • NTFAQ
      • OS의 모든 것
      • 리눅스포털
    • Database
      • SQL Server Central
      • SQL Team
    • Development
      • .NET Heaven
      • ASP Alliance
      • ASP.NET 2.0
      • Bullog.net
      • C# Corner
      • C++ (C PlusPlus.com)
      • C++ Reference
      • CodeGuru
      • CodePlex
      • DebugLab
      • Dev Articles
      • Devpia
      • DotNet Junkies
      • DotNet Zone
      • Driver Online
      • GOSU.NET
      • HOONS 닷넷
      • Joinc 팀블로그
      • KOSR
      • MSDN Home Page
      • OSR Online
      • Sky.ph - 개발자 커뮤니...
      • TAEYO.NET
      • The Code Project
      • WindowsClient.net
      • 김상욱의 개발자 Side
      • 조인시 위키
    • Human Networks
      • belief21c's e-space
      • I think I can
      • Invisible Rover's Blog :D
      • Rodman®
      • ■ Feel So Good~! ■
      • 까만 나비
      • 나를 가꾸는 시간.
      • 나만의 즐거움~~!
      • 단녕
      • 상우 :: Oranzie's BLOG
    • Information Technology
      • Microsoft TechNet
      • 지디넷코리아 - 글로벌...
    • Security
      • FoundStone
      • milw0rm
      • NewOrder
      • OpenRCE
      • Phrack.org
      • Reverse Engineering b1...
      • Reverse Engineering Team
      • RootKit
      • SecurityFocus
      • SecurityXploded by Nag...
      • Wow Hacker
      • Zone-H
Textcube
Louice Studio Inc.
Powered by Textcube. Original designed by Tistory.