SSD의 강력한 쓰기 활동으로 시스템 성능을 향상시킵니다.


13

무거운 쓰기 응용 프로그램을 수행하면 전체 시스템이 느려집니다. 이것을 더 테스트하기 위해 (상대적으로) 낮은 CPU, 높은 디스크 활동을 수행하기 위해 이것을 실행했습니다.

john -incremental > file_on_SSD

이것은 초당 수만 개의 문자열을 내 시스템 디스크의 파일로 펌핑합니다.

이 작업을 수행 할 때 마우스가 지연되고 TTY가 응답하지 않고 응용 프로그램이 "페이드"되고 일반적으로 전체 컴퓨터를 사용할 수 없게됩니다. 결국 Control + C 할 수 있으면 john시스템은 몇 초 후에 최대 강도로 돌아옵니다.

이것은 극단적 인 예이지만 빠른 소스 또는 코드 변환에서 큰 파일을 복사하는 것과 같이 쓰기 집약적 인 활동이 약간 덜 유사한 비슷한 문제가 있습니다.

내 주 OS 디스크는 EXT4 가 장착 된 매우 빠른 SSD ( OCZ Agility 60GB )입니다. 내가 쓰는 경우 johnEXT4와 기계 디스크로의 출력 속도가 많이 느립니다하지만, 나는 (/ s의 승 8000을한다 기계, 초당 ~ SSD가하는 42,000 단어)를 같은 속도 저하가 발생하지 않습니다. 처리량이 관련 될 수 있습니다. 기계식 디스크는 시스템과 관련이 없습니다. 데이터 일뿐입니다.

그리고 커널 2.6.35-2를 사용하고 있지만 아마도 .31 또는 그 당시의 것을 사용했을 때이 SSD를 얻은 이후이 문제를 발견했습니다.

그렇다면 무엇이 느려지고 있습니까? EXT4 문제? 커널 문제? SSD 문제? 무엇보다도? 다른 것?

추가 테스트를 수행해야한다고 생각되면 어떻게해야하는지 알려주는 주석을 삭제하고 결과를 질문에 추가합니다.


사용중인 SSD를 언급해야 할 수도 있습니다. 모든 SSD가 같은 것은 아닙니다.
Cristian Ciupitu

@Cristian : 추가되었습니다. OCZ 민첩성입니다.
Oli

답변:


12

이것은 한동안 알려진 문제였습니다. Btrfs와 같은 SSD 조정 FS를 사용하면 도움이 될 수도 있지만 그렇지 않을 수도 있습니다.

궁극적으로 IO 스케줄러 / 메모리 관리 시스템의 버그입니다. 최근이 문제를 해결하기위한 패치가 몇 가지 있습니다. 참조 고정 : 리눅스 데스크톱 대응 문제?

이러한 패치는 결국 메인 라인 커널로 전환 될 수 있지만 현재이 문제를 해결하려면 자신의 커널을 컴파일해야합니다.


2
내가 올바르게 이해한다면, 이것에 대한 패치는 linux 2.6.37에 들어가야 합니다.
JanC

1

Linux에서 SSD 성능을 개선하기 위해 확인할 수있는 몇 가지 사항이 있습니다.

  1. 마운트 지점을 'noatime'으로 설정하십시오. 추가 활동 업데이트 액세스 시간은 일반적으로 대부분의 사용 사례에서 낭비됩니다. 특히 한 줄을 파일로 계속 펌핑하는 경우 모든 액세스에 대해 파일 시스템을 여러 번 업데이트해야합니다.

  2. 엘리베이터를 확인하십시오. 대부분의 배포판의 기본 엘리베이터는 랜덤 액세스 회전 플래터 용으로 설정됩니다. SSD에는 별도의 로직이 필요하지 않으므로 엘리베이터를 noop로 설정하면 하드웨어가 쓰기를 관리하도록하여 성능을 향상시킬 수 있습니다.

  3. 연속 기입 v 후 기록 캐싱. 좀 더 난해하지만 hdparm장치에 사용되는 캐싱 방법을 확인할 수 있습니다 . 후기 입 캐싱은 연속 기입에 비해 SSD 성능에 긍정적 인 영향을 줄 수 있습니다.


@nzwulfin이 엘리베이터 설정에 대해 조금 더 쓸 수 있습니까?
Grzegorz Wierzowiecki 2018 년

SSD 성능이 양호했던 것 같습니다. 고통받는 모든 나머지입니다.
Thorbjørn Ravn Andersen

0

파일 캐싱이 워크로드에 맞게 잘못 조정되었을 수 있습니다. 불행히도 Linux 커널은 이것을 자동으로 처리하지 못할 정도로 어리 석고 RAM이 많고 블록 장치가 느리면 기본값이 매우 나쁩니다. 자세한 내용은 https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/ 를 참조하십시오.

/etc/sysctl.conf어느 쪽이든 수정 해 보는 것이 좋습니다.

vm.dirty_background_ratio = 3
vm.dirty_ratio = 6

커널이 다른 작업을 더 잘 처리 할 수 ​​있도록 쓰기 캐싱으로 인한 RAM 압력을 크게 줄입니다. 이것은 처리량을 낮추기 위해 향상된 대기 시간을 교환합니다.

또 다른 가능성은 캐싱을 늘리는 것이지만 프로세스가 계속해서 새 데이터를 계속 쓰는 경우 캐시가 가득 차면 지연 시간이 매우 길어질 수 있습니다. 시도하고 싶다면 다음과 같이 할 수 있습니다

vm.dirty_background_ratio = 5
vm.dirty_ratio = 80

참고 *_ratio설정을 사용할 수 RAM의 비율을 참조하십시오. 더 나은 제어를 원하면 *_bytes설정을 사용하십시오 . 나는 개인적으로 내 워크 스테이션에 다음 구성을 사용합니다.

vm.dirty_background_bytes = 50000000
vm.dirty_bytes = 200000000

이는 백그라운드 쓰기 캐시를 50MB로 제한하고 캐시에 200MB가 있으면 동기 쓰기를 강제합니다.

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