동기 쓰기는 매우 느립니다. 우분투 10.10, 32비트, ext4

동기 쓰기는 매우 느립니다. 우분투 10.10, 32비트, ext4

저는 Ubuntu 10.10(32비트, ext4 파티션 포함)을 실행하는 Macbook Pro에서 ActiveMQ를 실행하고 있습니다.

Linux iker-laptop 2.6.35-23-generic-pae #40-Ubuntu SMP Wed Nov 17 22:32:51 UTC 2010 i686 GNU/Linux

ActiveMQ에서 지속성을 활성화하면 성능이 크게 떨어집니다. 나는 다른 컴퓨터에서 동일한 것을 테스트했는데 그 차이는 2배 정도였습니다.

HD를 테스트할 수 있는 activeMQ 도구가 있으며 결과는 다음과 같습니다.

iker@iker-laptop:~/apps/apache-activemq-5.4.1$ java -classpath lib/kahadb-5.4.1.jar org.apache.kahadb.util.DiskBenchmark 

Benchmarking: /home/iker/apps/apache-activemq-5.4.1/disk-benchmark.dat
Writes: 
  146171 writes of size 4096 written in 11.074 seconds.
  13199.477 writes/second.
  51.560455 megs/second.

Sync Writes: 
  197 writes of size 4096 written in 10.006 seconds.
  19.688187 writes/second.
  0.07690698 megs/second.

Reads: 
  5589861 reads of size 4096 read in 10.001 seconds.
  558930.2 writes/second.
  2183.321 megs/second.

동기 쓰기 성능은 형편없습니다. 일부 구성이 잘못되었을 수 있지만 HD 성능 문제가 발견된 유일한 앱은 이 앱입니다.

hdparm은 예상 값을 발생시킵니다.

iker@iker-laptop:~$ sudo hdparm -tT /dev/sda

/dev/sda:
 Timing cached reads:   6282 MB in  2.00 seconds = 3141.73 MB/sec
 Timing buffered disk reads:  240 MB in  3.00 seconds =  79.88 MB/sec

답변1

동기식 IO의 주요 제한 요소는 하드 디스크의 처리량이 아니라 쓰기가 실행되는 시점부터 디스크에 커밋되는 시점까지 걸리는 시간입니다. 이와 관련하여 하드 드라이브와 가장 관련성이 높은 성능 지표는 이상적인 처리량이 아니라 하드 드라이브의 탐색 시간입니다.

하드웨어가 불리하게 작동한다는 사실 외에도 커널도 마찬가지입니다. 벤치마킹할 수 있다면(애플리케이션 애플리케이션에서 얻을 수 있는 것과는 전혀 다르지만) 약간의 개선을 볼 수 있을 것 같습니다. ) 실시간 IO 스케줄링 클래스에서 실행됩니다. 기본적으로 애플리케이션은 최선의 범주로 예약되므로 쓰기 대기 시간이 늘어날 수도 있습니다. 디스크에 액세스할 때 다른 애플리케이션의 성능에 부정적인 영향을 미칠 수 있으므로 실시간 예약 클래스를 사용하는 데 따른 책임은 사용자에게 있습니다.

전반적으로, 저는 여러분이 보고 있는 동기 쓰기 성능에 심각한 문제가 없다고 생각합니다. 동기식 IO는 비동기식 IO에 비해 성능이 매우 떨어지는 경우가 많습니다.

참고로 activemq 및 syncio에 대한 빠른 Google은 다음을 제공합니다.다음과 같은:

성능상의 이유로 지속성 메시지를 사용하는 경우에도 가능한 한 빨리 브로커로 메시지를 스트리밍할 수 있습니다.

답변2

cfq I/O 스케줄러는 이러한 테스트에서 성능이 저하되는 경향이 있습니다. 이전 ionice 제안 외에도 마감일 I/O 스케줄러로 전환해 볼 수도 있습니다(root로 시작하거나 elevator=deadlineroot로 실행 for n in /sys/block/sd*/queue/scheduler ; do echo deadline > $n ; done).

답변3

동기 쓰기는 자체적으로 반환되기 전에 쓰기가 커밋되었는지(성공적으로 또는 오류와 함께) 확인을 받아야 합니다. 이는 의도적으로 설계된 것이며 회전하는 금속 디스크와 관련된 높은 대기 시간으로 인해 본질적으로 동기 쓰기 속도를 느리게 만듭니다(디스크 RAM 캐시는 계산되지 않음).

비동기식 쓰기는 일반적으로 RAM에 기록되고 OS는 나중에 이를 디스크에 커밋합니다(나중에는 일반적으로 몇 초 이하(ZFS는 5x/초 또는 5초마다)라고 생각함). 디스크 탐색 시간은 밀리초 단위로 측정되는 반면, RAM 탐색 시간은 나노초 단위로 측정됩니다. 1000배 차이가 나네요.

계속하기 전에 데이터를 영구적으로 저장하는 것이 절대적으로 중요하고 정전 가능성의 1초 지연이 용납될 수 없는 경우 동기 쓰기를 사용합니다.

그 외의 경우에는 항상 비동기 쓰기를 사용하세요.

답변4

동기 쓰기는 느리기 때문에 모든 것을 버퍼링합니다. 보세요IOPSWikipedia에서는 일반적인 7,200rpm HDD의 IOPS가 75-100임을 알 수 있습니다. 이제 살펴보세요맥북 프로 기술 사양, 5,400rpm 하드 드라이브가 있습니다. 이는 최대 75%의 성능에 해당하므로 노트북에서 최대 50~75 IOPS만 보고 있는 것입니다.

MQ는 데이터 원장과 회계 원장을 작성할 수 있으며 이를 통해 ActiveMQ 벤치마크에서 볼 수 있는 20 IOPS를 얻을 수 있습니다.

두 가지 옵션이 있습니다. 테스트해 보세요.임시 파일 시스템, 즉 메모리 내 파일 시스템을 사용하거나 SSD를 사용합니다. 일반적으로 동기식 쓰기를 사용하는 서버에는 15,000rpm 디스크가 포함된 상당한 SAS/SCSI RAID 어레이가 있습니다. 어레이에 추가 디스크를 추가하는 것은 성능을 향상시키기 위한 것이지 용량을 늘리기 위한 것이 아닙니다.

관련 정보