io_uring의 동시 쓰기 확장은 얼마나 효과적인가요?

io_uring의 동시 쓰기 확장은 얼마나 효과적인가요?

배경:나는 잠재적인 성능 향상에 매우 관심이 있지만 io_uring의미 있는 벤치마크를 구현하기 위한 C, Linux 커널 또는 블록 장치의 내부 작동에 대해 충분히 익숙하지 않습니다. 나는 어려운 숫자를 찾는 것이 아니라 계속되는 연구를 알리기 위한 아키텍처 개요만 찾고 있습니다.


10개의 4바이트 정수 배치를 파일에 반복적으로 추가한 다음 이를 동기화하는 프로그램이 있다고 상상해 보십시오. 배치의 각 정수를 자체 파일에 추가하는 모델로 전환하고 싶습니다. 즉, 10개의 파일 각각에 4바이트 int를 쓰고 모두 동기화합니다.

동기 IO를 사용하는 원래 솔루션은 2개의 시스템 호출(1개의 쓰기 + 1개의 동기화)을 사용하는 반면, 파일당 int 접근 방식은 엄청난 20개의 시스템 호출(10개의 쓰기 + 10개의 동기화)을 사용합니다. 시스템 호출 측면에서 io_uring절감 효과는 엄청납니다. 단일 io_uring커밋으로 20개의 시스템 호출에 해당하는 효과를 얻을 수 있습니다. 내가 모르는 것은 어떻게 되는가?나머지write커밋이 발생하면 Linux 시스템이 확장됩니다.

  • 대부분의 디스크에는 병렬 쓰기를 위한 일정 수준의 하드웨어 지원이 있습니까? 아니면 SSD는 작동하지만 회전 디스크는 작동하지 않을까요?
  • 커널이 각 쓰기에 대한 왕복 응답을 기다릴 필요가 없도록 쓰기가 (버스를 통해) 디스크로 연결됩니까?
  • 커널 자체가 요청을 통과하는 모든 시스템 호출을 대기열에 추가합니까 io_uring?
  • 내가 고려하지 않은 다른 병목 현상이 있습니까?

내 사고방식이 틀렸을 가능성도 있다. 어떤 조언이라도 대단히 감사하겠습니다!

답변1

대부분의 디스크에는 병렬 쓰기를 위한 일정 수준의 하드웨어 지원이 있습니까? 아니면 SSD는 작동하지만 회전 디스크는 작동하지 않을까요?

회전 디스크이든 솔리드 스테이트 디스크이든 관계없이 거의 모든 디스크가 이 작업을 수행합니다(회전 디스크에도 캐시가 있으므로 적은 양의 데이터에 대해서는 그다지 느려 보이지 않습니다). 저렴한 USB 키나 SD 카드는 낮은 동시성을 달성하지만 어느 정도의 병렬성도 있습니다... 단일 장치에 대한 최대 병렬 명령 측면에서 SATA는 최대 32개까지 가질 수 있고 SCSI는 10개에서 10개 사이인 경향이 있습니다. 100이고 NVMe는 1000초에 도달할 수 있습니다(사양에서는 최대값을 65536으로 제한한다고 생각하지만 그렇게 높은 수준에 도달할 수 있는 장치는 없습니다).

커널이 각 쓰기에 대한 왕복 응답을 기다릴 필요가 없도록 쓰기가 (버스를 통해) 디스크로 연결됩니까?

예, 여러 쓰기(또는 읽기)를 병렬로 보낼 수 있습니다. 그러나 이러한 일이 발생하는지 여부는 여러 요인에 따라 달라집니다(예: 커널이 효율성을 위해 이들을 결합할 수 있거나 대기열을 지워야 하기 때문에 동기화가 필요할 수 있음 등).

커널 자체가 결국 io_uring을 통해 요청된 모든 시스템 호출을 대기열에 추가합니까?

아마도. io_uring차단되지 않으면 I/O가 인라인으로 완료되고 그렇지 않으면 대기열에 추가됩니다. ~에서io_uring을 사용하여 효율적인 IO 달성: "더 중요한 것은 비차단 작업의 경우 데이터가 인라인으로 제공된다는 것입니다."

내가 고려하지 않은 다른 병목 현상이 있습니까?

예. 다음과 같은 이점을 실제로 볼 수 있을 만큼 초당 충분한 I/O를 수행하고 있는지 확실하지 않습니다. io_uring또한 빈번한 동기화는 빈도 및 수행 방법에 따라 병렬성을 제한할 수 있습니다. 버퍼링된 I/O를 수행하는 경우 동기화 중에도 커널은 RAM에 쓰기 때문에 병렬성을 짜내고 가능한 경우 커널이 RAM에서 병렬로 빠져나옵니다. (앞의 항목이 전체 목록이 아니라는 점에 유의하세요)

(제목에 질문 있음)

io_uring의 동시 쓰기 확장은 얼마나 효과적인가요?

사용하는 커널과 I/O 제출 방법에 따라 괜찮을 수 있습니다. 여기에서 참고자료와 링크를 확인하세요"Linux에는 정말 비동기식 블록 I/O가 없나요?"에 대한 답변.

인용하다

관련 정보