리눅스 디스크 접근으로 시스템 속도가 느려짐


6

CPU로드가 100 % 미만인 경우에도 시스템 속도가 느려지 며 스왑 파티션에 쓰기 때문에이 작업을 수행하고 있다고 생각합니다. 예, 스왑 파티션이 OS와 다른 디스크에 있습니다. ATA 디스크를 사용하는 Windows의 이러한 유형의 속도 저하 문제를 기억합니다. DMA 모드를 사용하여 해결되었습니다. 디스크에서 DMA 모드를 사용하고 있는지 잘 모르겠습니다. 그것들은 SATA 드라이브이므로 그렇게 가정했습니다. 이것은 hdparm의 출력입니다

/dev/sda:
 multcount     =  0 (off)
 IO_support    =  1 (32-bit)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 182401/255/63, sectors = 2930277168, start = 0

ev/sdb:
 multcount     =  0 (off)
 IO_support    =  1 (32-bit)
 readonly      =  0 (off)
 readahead     = 256 (on)
 geometry      = 30401/255/63, sectors = 488397168, start = 0

이 유형의 속도 저하 동작을 마지막으로 본 것은 Windows 3.1부터였습니다!

hdparm -i / dev / sda / dev / sdb의 출력은 다음과 같습니다.

/dev/sda:

 Model=ST31500541AS, FwRev=CC34, SerialNo=6XW0N2LJ
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs RotSpdTol>.5% }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
 BuffType=unknown, BuffSize=0kB, MaxMultSect=16, MultSect=off
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=2930277168
 IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4 
 DMA modes:  mdma0 mdma1 mdma2 
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
 AdvancedPM=yes: unknown setting WriteCache=enabled
 Drive conforms to: unknown:  ATA/ATAPI-4,5,6,7

 * signifies the current active mode


/dev/sdb:

 Model=HDT722525DLA380, FwRev=V44OA96A, SerialNo=VDB41BT4EUH03C
 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>10Mbs }
 RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=52
 BuffType=DualPortCache, BuffSize=7674kB, MaxMultSect=16, MultSect=off
 CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=488397168
 IORDY=on/off, tPIO={min:240,w/IORDY:120}, tDMA={min:120,rec:120}
 PIO modes:  pio0 pio1 pio2 pio3 pio4 
 DMA modes:  mdma0 mdma1 mdma2 
 UDMA modes: udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
 AdvancedPM=yes: disabled (255) WriteCache=enabled
 Drive conforms to: ATA/ATAPI-7 T13 1532D revision 1:  ATA/ATAPI-2,3,4,5,6,7

 * signifies the current active mode

시스템 속도가 느려지면 free에서 출력됩니다.

             total       used       free     shared    buffers     cached
Mem:       3538356    3057180     481176          0       8588     280412
-/+ buffers/cache:    2768180     770176
Swap:      5124692    1563140    3561552

어떤 DMA 모드가 사용되는지 확인하려면 사용 중인 모드 옆에 다음 hdparm -i /dev/sda /dev/sdb이 있습니다 *. 일반적으로 데이터 손실을 유발하지 않는 가장 빠른 모드가 선택됩니다. /var/log/kern.log속도 저하가 발생했을 때 어떤 것이 나타나는지 살펴보십시오 . 그것들이 단순히 스왑으로 인한 것이 아니라고 확신합니까? free속도 저하가 발생하면 이 명령 은 무엇을 보고합니까?
Gilles

BIOS에서 디스크에 대해 AHCI / Enhanced가 활성화되어 있습니까? 출력은 ATAPI7을 보여줍니다. ATAPI7은 SATA 일 수 있지만 ATA133 에뮬레이션 모드 일 수도 있습니다.
TuxRug

답변:


16

질문하지 않았습니다. “시스템이 왜 느린가요?”또는“어떻게 더 빠르게 할 수 있습니까?”라는 질문을하기로했다고 가정합니다. “성능 병목 현상을 어떻게 조사 할 수 있습니까?”라는 야심 찬 질문을 부분적으로 다룰 것입니다.

시스템이 응답하지 않을 때 디스크 활동이 많이있는 것 같습니다. 내 대답은 이것을 기반으로합니다.

RAM과 스왑

디스크 속도에 관계없이 스와핑 속도가 느려집니다. 스왑을 눈에 띄게 빠르게 만들기 위해 할 수있는 일은 많지 않습니다. 시스템이 교체되는 경우 현실적인 치료법은 메모리를 적게 사용하거나 더 많은 메모리를 구입하는 것입니다.

의 출력 해석 free

명령으로 시스템이 사용중인 메모리 양에 대한 스냅 샷을 얻을 수 있습니다 free. 다음과 같이 표시됩니다.

             total       used       free     shared    buffers     cached
Mem:       3538356    3057180     481176          0       8588     280412
-/+ buffers/cache:    2768180     770176
Swap:      5124692    1563140    3561552
  • Mem, total(3.3GB에 대해 여기 3538356) 그림은 프로세스에 사용할 수있는 RAM의 양 (이 비디오 카드 나 커널에 의해 사용되는 메모리 제외)입니다.

    64 비트 커널 사용자는이 단락을 건너 뛸 수 있습니다. x86 아키텍처의 복잡성 때문에 커널이 RAM에 액세스하는 방법에는 여러 가지가 있습니다. 요즘 실제로 커널은 최대 64GB의 RAM을 사용할 수있는 PAE 모드; 커널이 약 3GB 만 사용할 수있는 비 PAE 모드. 비 PAE 모드가 존재하는 이유는 PAE 모드에 메모리 사용 오버 헤드가 있기 때문에 3GB 이상의 RAM이있는 경우에만 비용이 들기 때문입니다. 우려되는 우분투 사용자는 우분투 위키PAE 페이지를 읽어야합니다 .

  • Mem, free그림은 아무것도 사용하지 않는 메모리 양을 보여줍니다. RAM이 부족하거나 시스템이 부팅되지 않은 경우 일반적으로 상당히 작습니다 (예 : 다중 GB RAM 시스템의 경우 10–50MB). 이 수치는 450MB로 매우 높습니다. 아마도 그 정도의 메모리를 사용하는 응용 프로그램이 최근에 닫 혔기 때문일 것입니다. 걱정하지 마세요. 곧 채워질 것입니다.

  • 행 제목 -/+ buffers/cache은 디스크 캐시와 달리 프로세스에서 사용하는 메모리 양을 나타냅니다. 여기서는 캐시에 사용할 수있는 공간이 약 730MB에 불과합니다. RAM의 20 %에 불과합니다. 디스크 캐시에 사용되는 RAM이 많으면 시스템의 응답 성을 유지하는 것이 중요합니다.

  • 마지막 줄은 사용중인 스왑의 양을 나타냅니다. RAM이 가득 차지 않은 경우에도 스왑을 사용하는 것이 일반적입니다. Linux는 디스크가 유휴 상태 일 때 메모리가 나중에 필요할 경우를 대비하여 디스크가 유휴 상태 일 때 메모리를 예방하기 위해 스왑하기 위해 복사합니다.

    리눅스는 종종 디스크 캐시를위한 공간을 만들기 위해 프로세스 메모리를 스왑으로 옮깁니다. 이는 정상적인 시스템 동작이며 톤을 낮추려고하면 시스템 속도느려질 수 있습니다. 스왑해야 할 Linux의 양에 대한 조정 가능한 설정이 있습니다 vm.swapiness. 당신이 그것을 실험하는 경우, 교환 뿐만 아니라 감소 를 시도 하십시오.

    예제 free출력에서 프로세스 메모리의 약 40 %가 스왑에 있음을 알 수 있습니다. 이것이 성능을 저하시키는 지 여부는 해당 메모리의 용도에 따라 다릅니다. 현재 사용되고 있지 않은 큰 응용 프로그램이라면 아프지 않습니다. 현재 사용중인 프로세스의 일부가 교체되면 시스템이 응답하지 않을 수 있습니다.

이 메모리를 어떻게 사용하고 있습니까?

메모리 사용량 분석이 어렵습니다. 각 프로세스마다 얼마나 많은 주소 공간이 할당되는지 측정 할 수 있습니다. 주어진 시간에 얼마나 많은 메모리를 사용하는지 측정 할 수 있습니다. 파일 백업 메모리 (예 : 프로세스 실행 파일 및 라이브러리에서로드 된 코드) 및 파일 백업되지 않은 메모리 (프로세스 스택 및 힙)를 추적해야합니다. 물론 프로세스간에 많은 양의 메모리가 공유되므로 주어진 프로세스가 사용하는 메모리 양에 대해 이야기하는 것은 이치에 맞지 않습니다.

topand와 같은 명령 줄 도구 htop또는 여러 그래픽 시스템 모니터 및 성능 측정기를 사용하여 메모리 사용량을 파악할 수 있습니다 . 의 htop경우 메모리 사용에 관심이있는 경우 설정 / 표시 옵션에서 "커널 스레드 숨기기"및 "사용자 랜드 스레드 숨기기"옵션을 켜십시오.

top또는 의 표시 htop에서 관련 열은 VIRTRES입니다. VIRT공유 및 할당되었지만 사용되지 않은 메모리를 포함하여 프로세스가 할당 한 주소 공간의 양을 나타냅니다. 그것에 대해 너무 걱정하지 마십시오. RES프로세스가 현재 사용중인 RAM의 양 (스왑을 계산하지 않음)을 나타냅니다.

시스템이 활발하게 교환되는지 확인하는 한 가지 방법은 top작업하는 동안 디스플레이 를 보는 것입니다. RES다른 프로세스의 경우 줄어드는 동안 일부 프로세스의 경우 수치가 상승하면 후자의 프로세스가 교체되어 이전 프로세스를위한 공간을 마련한다는 의미입니다. 이런 경우가 자주 발생하면 사용 패턴에 익숙해 지려면 더 많은 RAM이 필요합니다.

디스크 속도

과거의 경험에 의하면 디스크가 가장 빠른 액세스 모드를 사용하지 않는 것으로 보입니다. 그러나 Linux는 Windows가 아닙니다 (특히 이전에는 종종 타사 드라이버가 필요했습니다). Linux 배포판을 설치하면 거의 항상 충돌이나 데이터 손실을 유발하지 않는 모든 주변 장치에 가장 빠른 액세스 모드가 제공 됩니다. (비디오 드라이버는 다소 예외입니다.)

로 시스템에서 사용중인 DMA 모드를 확인할 수 있습니다 hdparm -i. 예를 들어, 디스크에 모두가 표시 UDMA modes: … *udma6되어 사용 가능한 가장 빠른 모드를 사용하고 있음을 의미합니다. 일반적으로 UDMA는 PIO보다 DMA보다 빠르며 숫자 부분은 높을수록 빠릅니다.

로 디스크의 원시 처리량을 측정 할 수 있습니다 hdparm -t. 숫자 자체는 시스템의 응답 속도에 대한 정보를 직접 제공하지는 않지만 동일한 디스크에서 두 디스크 속도 또는 두 액세스 모드의 속도를 비교하는 것이 유용 할 수 있습니다.

때때로 컴퓨터의 BIOS 를 통해 디스크의 다른 작동 모드 중에서 선택할 수 있습니다. 첫 번째 SATA 디스크가 나왔을 때 많은 운영 체제 (예 : Windows 및 Linux)에 적합한 드라이버가 제공되지 않았습니다. 따라서 BIOS에는 기본적으로 속도는 느리지 만 호환되는 PATA 에뮬레이션 모드를 사용할 수있는 옵션이 제공되었습니다. 당시 디스크는 SATA 연결을 포화시킬 정도로 빠르지 않았지만 요즘에는 디스크가 빠를 수도 있습니다. 호환 설정을 "IDE"또는 "ATAPI"라고하며 빠른 설정을 "AHCI"라고합니다.

디스크 오류

디스크 관련 속도 저하의 원인 중 하나는 디스크에 장애가 발생하여 시스템이 디스크에 여러 번 다시 액세스해야하는 경우입니다. 때로는 속도 저하가 첫 번째 징후이며 읽을 수없는 파일 형태의 실제 오류가 나중에 발생합니다.

이 경우에 해당하는지 확인하려면 커널 로그 (일반적으로)를 확인하십시오 /var/log/kern.log. 당신이 같은 줄을 보면

end_request: I/O error, dev sda, sector 123456789
ata3.00: error: { UNC }

백업이 최신 상태인지 확인하고 디스크를 즉시 교체하십시오. 위의 행은 예제 일 뿐이며 다양한 오류 메시지가 있습니다.

SMART 모니터링 도구를 사용 하여 디스크 상태에 대한 보고서를 얻을 수 있습니다 .


좋아, 그것은 길었다 . SU에서 이러한 주제에 대해 많이 찾을 수는 없었지만이 질문이 모든 것에 가장 적합한 장소는 아닙니다. 주최자가 내용을 옮기고 싶다면 자유롭게 느끼십시오.
Gilles

Windows가 스왑 파일도 사용하지만 시스템 속도가 느려지지 않기 때문에 스와핑이 왜 시스템 속도를 늦춰야하는지 이해하지 못합니다. 스와핑에서 Windows가 더 낫습니까? 아마도 스왑 기술은 진화 한 반면 Linux는 그대로 유지 되었습니까?
tony_sid

가장 좋은 추측은 일반적으로 Windows보다 Linux에서 더 많은 메모리를 사용한다는 것입니다. top내가 실제로 일어나는지 확인하기 위해 설명대로 모니터링 해보십시오 . Windows에서 유사한 모니터링과 비교하십시오. 스왑 할 때 성능과 관련하여 Linux와 Windows를 비교하는 벤치 마크를 알지 못합니다. 하나를 찾거나 찾으면보고하십시오.
Gilles

1

나는 항상 모든 넷북과 노트북을 멀티 부팅합니다 : Ubuntu-32 & Win7-32. 하나의 HDD. 캐시, 임시 및 스왑 파티션은 드라이브의 첫 번째 클러스터 근처에서 가장 빠른 드라이브에 있어야합니다. 입력-출력 속도가 가장 빠릅니다.

내가 사용하는 우분투는 거의 스왑 드라이브를 사용하지 않는 것 같습니다. 4GB 스왑은 4GB SODIMM DDR3 RAM이므로 우분투 부팅 파티션 모두에 사용됩니다. 내 우분투 선택은 모두 확장 파티션에 있습니다. 3 개의 운영 체제 모두 확장 파티션에서도 동일한 DATA 파티션을 사용합니다. 이 데이터 파티션은 MS-NTFS-COMPRESSED입니다. Linux에서 사용되는 NTFS-3G는 파티션으로 압축되지 않습니다. 느린 저전력 노트북 ( '그린') HDD에서는 IO 읽기 / 쓰기가 느리므로 작은 클러스터로 압축하는 것이 더 빠릅니다. 마이크로 소프트는 추가적인 CPU 사이클 (ZIP 형식)은 중요하지 않다고 주장했다.

ATM Acer 5740 노트북에 테라 바이트 HDD가 있습니다. I3 CPU, 매우 느린 그래픽. 원래 새 노트북에는 Win7-64bit가 있었지만 너무 많은 프로그램 및 하드웨어가 64 비트에서 문제를 일으 킵니다. 또한 GPU는 '샤드 메모리'로 4GB RAM에 씹기 때문에 32 비트 또는 Linux 32-PAE는 괜찮습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.