2009-03-21 2 views

답변

2

디스크와 컨트롤러에 따라 다릅니다. TCQ/NCQ가 있습니까? RAID인가? 그렇다면 다소 이해할 수 있습니다. 하나의 일반 SATA 디스크 (NCQ 제외)를 사용하면 그렇지 않습니다.

2

가장 간단한 코드를 먼저 작성하고 목표 환경 인을 가지고 의 성능이 충분한 지 확인하십시오.

다음으로 가장 간단한 올바른 코드가 충분히 빠르지 않으면 더 빠른 수행 방법을 시도하는 것이 좋습니다 (예 : 다른 디스크, 운영 체제 버전, CPU, 드라이버 등). IO. 같음 일 경우, 다른 디스크에 쓰고 있지만 그렇지 않은 경우 쓰기 작업을 병렬화하는 것이 좋습니다. 그것은 단지 완전한 추측 일뿐입니다.

우연히 우연히도 관련 상황을 곧 벤치마킹 할 계획입니다. 나는 수행 할 테스트를 설명하는 blog post을 가지고 있으며, 내가 가지고있을 때 그 결과에 대한 링크가있는 항목을 업데이트 할 것입니다. 당신이 묘사하고있는 것과 완전히 같지는 않지만 관심이있을만큼 가까울 정도입니다.

+0

이것은 모두 사실이지만 질문과의 관련성을 알 수 없습니다. 아마도 OP는 이미 가장 단순한 코드를 먼저 알고 있지만 코드 관점에서 컴퓨터 아키텍처에 대한 일반적인 지식을 수집하려고합니다. – JasonSmith

+0

질문은 복잡한 기술을 사용하는 것이 합리적인지 여부를 묻습니다. 내 대답은 본질적으로 "귀하의 앱이 이미 충분히 성공적으로 수행되면 이해가되지 않습니다"라고 생각합니다. OP는 그가 성능에 문제가 있음을 확실히 나타내지 못했습니다. –

3

일반적으로 아니오.

현재 물리적 디스크 쓰기가 병 목으로되어 있으며 대부분의 경우 다소 순차적입니다. 병렬 처리는 쓸모가 없으므로 에 악영향을 끼치며에 악영향을 미칩니다. 순차적 읽기 및 쓰기는 대부분의 경우 인터리빙보다 성능이 크게 향상됩니다.

디스크 별 병렬 처리 (TCQ 및 NCQ)는 다른 클라이언트가 동시에 디스크의 다른 섹션에서 데이터를 요청할 때 자연스럽게 필요한 검색을 줄임으로써 주로 작동합니다. 처음에 이러한 추구를 피할 수 있다면, 더 나아질 수 있습니다.

일부 시나리오 - RAID 1, JBOD 또는 다른 데이터 스트림이 다소 느리게 도착하는 경우 - 올바른 스케줄링으로 처리량을 향상시킬 수 있지만 하드웨어를 직접 알고 지식을 습득해야하며 재미가 없어도됩니다.


는 기껏해야, 당신은 최종 사용자에게 결정으로, 그를 안내하는 성과 측정을 제공한다 (예를 들어, 그것을 해제 할 수있는 옵션을 제공) 있음을 남길 수 있습니다. (당신은 나를 잘못 증명할 수도 있습니다.)

+0

음. 디스크에 명령 대기열이 있고 순서가 바뀌면 실제로 헤드가 왼쪽 극단에서 오른쪽 극단까지 스윙하여 데이터를 수집합니다. 이 상황에서의 병렬 쓰기는 실제 탐색 오버 헤드가 없으므로 처리량을 상당히 향상시킵니다. –

+0

응용 프로그램에서 데이터를 준비하는 데 상당한 시간이 필요한 경우에만. 일반적으로 디스크에 물리적으로 기록 할 경우 병목 현상이 10 배 이상 발생하므로 헤드를 돌리면 속도가 빨라집니다. – peterchen

-1

하나의 파일에 쓰는 것에 대해 이야기하고 있다면 대답은 아니오입니다. 모든 프로세스 또는 스레드는 OS에서 파일 쓰기를 위해 파일에 대한 잠금을 획득해야하므로 하나의 파일에 쓰기를 병렬화 할 수 없습니다.

기타 하드웨어 컨트롤러 및 스토리지 유형, OS 커널 및 파일 시스템 구현에 따라 달라집니다.

+0

나는 당신을 투표하지는 않았지만 물론 하나의 파일에 쓰기를 병렬 처리 할 수 ​​있습니다. 파일의 다른 부분에 쓰는 다른 스레드를 가지고 있으면됩니다. – Eddie

0

기술적으로 파일을 mmap하고 여러 스레드에서 쓸 수 있지만 디스크에 병목 현상이 계속 발생할 수 있습니다.

I/O 처리량을 최대화해야하는 경우 환경에서 지원하는 비동기 입출력을 조사하는 것이 좋습니다.

0

이것은 간단한 질문이지만 대답은 실제로 매우 복잡 할 수 있습니다. Les은 몇 가지 가정하에 시나리오의 범위를 좁히려고합니다. OS는 Windows이고, 실제로는 독립적 인 비교적 많은 수의 쓰기가 있습니다.

  1. 단순히 쓰기를 비동기 적으로 실행하여 멀티 스레딩을 건너 뛸 수 있습니다.
  2. OS를 쓰기로 예약하십시오.
  3. 쓰기가 동일한 파일인지 다른 파일인지는 중요하지 않습니다. 독립적 인 쓰기에 대한 위의 가정이 사실 인 경우에만 해당됩니다.

최악의 경우 병렬 ATA 컨트롤러의 평범한 구형 디스크보다 느립니다. 속도가 느려집니다.

최상의 경우 OS는 쓰기를 매우 효율적으로 스케줄 할 수 있습니다. 스핀들이 많은 저장 시스템 또는 NCQ를 지원하는 디스크의 경우에 해당됩니다.

여기서 기억해야 할 핵심 사항은 디스크 I/O (일반적으로)가 CPU 바운드가 아니므로 멀티 코어를 사용하지 않는 것이 도움이되지 않는다는 점입니다. 그것은 단지 삶을 복잡하게 만들 것입니다.

기록을 순서대로 지정하면 파일에서 순차적으로 (순차적으로) 또는 디스크의 순차적으로 정렬하여 도울 수 있습니다.

관련 문제