최대 처리량을위한 Linux 디스크 캐싱 동작 조정


12

여기에서 최대 처리량 문제가 발생하여 노브를 조정하는 방법에 대한 조언이 필요합니다. 백업 배포를 위해 10Gbit 파일 서버를 실행 중입니다. LSI MegaRAID 컨트롤러에서 2 개의 디스크 S-ATA2 설정입니다. 서버에는 또한 24gig의 메모리가 있습니다.

처리량을 최대화하여 마지막으로 업로드 한 백업을 미러링해야합니다.

"핫"백업을위한 RAID0은 약 260MB / 초의 쓰기 및 275MB / 초의 읽기를 제공합니다. 크기가 20GB 인 테스트 된 tmpfs는 약 1GB / sec를 제공합니다. 이런 종류의 처리량은 우리가 필요로하는 것입니다.

이제 디스크에 기록하지 않고 (또는 디스크에 기록하고 메모리에 보관하는 것보다) 가장 최근에 업로드 한 파일을 메모리에 가능한 한 오랫동안 캐시하도록 Linux의 가상 메모리 하위 시스템을 어떻게 조정할 수 있습니까?

다음 sysctls를 설정했지만 예상 처리량을 제공하지는 않습니다.

# VM pressure fixes
vm.swappiness = 20
vm.dirty_ratio = 70
vm.dirty_background_ratio = 30
vm.dirty_writeback_centisecs = 60000

이것은 해야 이론적으로 I / O를 캐시 우리 16기가바이트을주고 디스크의 쓰기까지 몇 분을 기다립니다. 여전히 서버를 벤치 마크 할 때 쓰기에 영향을 미치지 않으며 처리량은 증가하지 않습니다.

도움이나 조언이 필요합니다.


가능한 빨리 쓰기 시작하는 것이 더 합리적이지 않습니까? 그렇지 않으면 최대 버퍼 크기에 도달하여 갑자기 중지됩니다. 그것이 모두 함께 쓰고 있다면 그것은 당신에게 더 많은 시간을 제공합니다.
Zan Lynx

내 응용 프로그램 (기본 Linux + vsftpd)이 4GB (총 24GB)에서 사용하기 때문에 버퍼 전용 20GB 메모리가 있습니다. 백업이 20GB 이하입니다. 백업 실행 후 버퍼에 기록한 다음 디스크에 순차적으로 기록 할 수 있으면 백업 소스 (가상 서버)의 가동 중지 시간이 크게 줄어 듭니다. 추신 : 서버는 문제없이 중단 될 수 있습니다. 복구하는 데 30 분이
Peter Meyer

네트워크를 통해 데이터를 전송하는 데 사용하는 응용 프로그램이 디스크와 동기화하는 것처럼 들립니다. 디스크가 유지할 수있는 것보다 빠른 속도로 많은 양의 데이터를 버스트 할 수있는 이유에 대해 의문을 제기하지만 데이터를 캐시에 저장하기 만하면됩니다. 그것은 어딘가에 디자인 결함을 지적합니다.
psusi

그것은 결함처럼 들립니다. 백업 솔루션은 서버를 항상 종료하지 않아도됩니다.
psusi

1
@PeterMeyer : RAM이 많더라도 쓰기가 시작될 때까지 기다리는 것은 여전히 ​​실수입니다. 디스크에 들어가기 전에 파일 (임시 파일과 같은)을 편집하거나 삭제하려고하는 경우에만 의미가 있습니다. 백업은 그렇게하지 않습니다. 가능한 빨리 백그라운드 쓰기를 시작하려고합니다. background_ratio를 1 또는 2로 설정하십시오.
Zan Lynx

답변:


6

설정 한 변수를 살펴보면 대부분 쓰기 성능에 관심이 있고 정전으로 인한 가능한 데이터 손실에 신경 쓰지 않는 것 같습니다.

지연 쓰기 및 비동기 쓰기 작업에서 쓰기 저장 캐시를 사용할 수있는 옵션 만 제공됩니다. 동기식 쓰기 작업은 디스크에 커밋해야하며 지연 쓰기가되지 않습니다. 파일 시스템이 빈번한 페이지 플러시 및 동기 쓰기를 유발할 수 있습니다 (일반적으로 저널링으로 인해, 특히 data = journal 모드에서 ext3 사용). 또한 "백그라운드"페이지 플러시 조차도 캐시되지 않은 읽기 및 동기 쓰기를 방해 하여 속도가 느려집니다.

일반적으로 어떤 일이 일어나고 있는지 확인하기 위해 몇 가지 측정 항목을 취해야합니다. pdflush가 I / O 작업을 수행하기 위해 복사 프로세스가 "D"상태에 놓였습니까? 디스크에서 많은 동기 쓰기 작업이 보입니까?

도 - 모든 다른 실패하면, 당신은 당신이 백업을 복사하여 단지 사실 후에 디스크에 데이터를 동기화 할 경우 명시 적의 tmpfs는 특정 파일 시스템 설정하도록 선택할 수 있습니다 자동으로 inotify를 사용하여

읽기 캐싱 일들이 훨씬 간단 들어 - fcoretools의이 fadvise유틸리티--willneed버퍼 캐시에 파일의 내용을로드 할 커널을 조언하는 매개 변수를.

편집하다:

vm.dirty_ratio = 70

이론적으로 I / O 캐싱을위한 16GB를 제공하고 디스크에 쓸 때까지 몇 분 정도 기다려야합니다.

이것은 테스트 시나리오에 큰 영향을 미치지 않았지만 이해에 오해가 있습니다. dirty_ratio 매개 변수는 시스템 총 메모리의 백분율이 아니라 시스템의 여유 메모리 가 아닙니다 .

보다 심층적 인 정보를 사용하여 쓰기 / 쓰기로드 조정에 관한 기사가 있습니다 .


예, 쓰기 성능이 향상되었습니다. 백업을 백업 슬레이브로 팬 아웃하는 데 걸리는 시간은 제 걱정이 아닙니다. 또한 기본 백업 서버가 실패하고 백업이 백업 슬레이브로 전달되지 않는 경우 재전송을위한 스크립트가 있습니다. 추신 : 나는 이미 링크를 읽었으며 그에 따라 조정되었습니다. free vs buffered vs total에 대한 실수로 죄송합니다.
피터 메이어

3

또는 더 많은 디스크를 확보하십시오 ... 필요한 드라이브 배열 구성이 전체를 지원하지 않습니다. 실제 요구를 충족시키기 위해 솔루션을 다시 엔지니어링해야하는 경우입니다. 나는 이것이 백업 일 뿐이라는 것을 이해하지만, 혼잡 한 수정을 피하는 것이 합리적입니다.


동의했다. 몇 개의 SATA ( SATA ? S 심각하게?) 드라이브가 275MB / s를 유지할 수있는 방법이 없으며, 드라이브에서 얻을 수있는 끔찍한 IOP에 대해서는 이야기조차하지 않습니다.
어댑터

1
그가 어디로 가고 있는지 알 수 있습니다. 이것은 단지 데이터 백업 대상이기 때문에 정전으로 인해 가끔씩 데이터가 손실 될 가능성에 대해서는 신경 쓰지 않습니다. 또한 최대 처리량을 제공하여 백업 창에 필요한 시간을 최소화하려고합니다.이 방식으로 30 초 이내에 20GB의 데이터를 쓸 수 있습니다. 어떤 이유로 백업에 가동 중지 시간이나 서비스 영향이 발생하는 경우 30 분이 20 분 이상 걸리는 것이 확실합니다.
the-wabbit

완전히 맞습니다. 동기화하는 동안 다운 된 가상 머신 이미지 (컴퓨팅 노드의 경우 매우 작은 이미지)를 동기화하고 있습니다. 이 응용 프로그램은 타르처럼 작동 | ssh이지만 ftp를 사용합니다. 그리고 물론, 시뮬레이션은 ... :) 실행해야
피터 마이어에게

1
SATA 유형이 무엇인지는 중요하지 않습니다. 7200RPM 비 기업 디스크는 단순히 처리량 또는 대기 시간을 보장 할 수 없습니다.
어댑터

1
@adaptr, 백업은 순차적 쓰기입니다.
psusi

1

메모리 캐시를 사용하면 메모리에 문제가 있거나 디스크에 저장되지 않은 데이터가 손실되는 것처럼 데이터가 손실 될 수 있습니다.

즉, 파일 시스템 수준에서 수행해야 할 튜닝이 있습니다.

예를 들어, ext4를 사용하는 경우 마운트 옵션을 시도 할 수 있습니다.

배리어 = 0

"jbd 코드에서 쓰기 장벽 사용을 비활성화합니다. 쓰기 장벽은 저널 커밋의 적절한 온 디스크 순서를 적용하여 약간의 성능 저하로 휘발성 디스크 쓰기 캐시를 안전하게 사용할 수있게합니다. 디스크가 한 가지 방식으로 배터리 백업되는 경우 다른 배리어를 비활성화하면 성능을 안전하게 향상시킬 수 있습니다. 마운트 옵션 "barrier"및 "nobarrier"를 사용하여 다른 ext4 마운트 옵션과의 일관성을 위해 배리어를 활성화하거나 비활성화 할 수도 있습니다.

더에서 : http://www.mjmwired.net/kernel/Documentation/filesystems/ext4.txt


많이 조정 된 XFS를 사용하고 있습니다. 위의 주석에서 조정 된 것과 관련하여 더 많은 내용 :)
Peter Meyer

파일 시스템은 mkfs.xfs -l lazy-count = 1, version = 2, size = 256m -i attr = 2 -d sunit = 512, swidth = 1024로 작성 되었으며 rw, noatime, logbufs = 8, logbsize = 256k, osyncisdsync, 딜레이 로그, attr2, nobarrier, allocsize = 256k
피터 메이어
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.