io_uring을 통해 동시 쓰기가 얼마나 잘 확장되나요?

io_uring을 통해 동시 쓰기가 얼마나 잘 확장되나요?

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


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

동기식 IO를 사용하는 원래 방식은 2개의 syscall(쓰기 1개 + 동기화 1개)을 사용하고, 파일당 int 접근 방식은 엄청난 20개(쓰기 10개 + 동기화 10개)를 사용합니다. 시스템콜 측면에서 io_uring절감 효과는 엄청납니다. 한 번의 io_uring제출로 20개의 시스템콜에 해당하는 결과를 얻을 수 있습니다. 나에게 불분명한 것은나머지write제출이 완료되면 Linux 시스템이 확장됩니다.

  • 대부분의 디스크에는 병렬 쓰기를 위한 어느 정도의 하드웨어 지원이 있습니까? 아니면 SSD는 가능하지만 회전 디스크는 그렇지 않을 수도 있습니다.
  • 커널이 각 쓰기에 대한 왕복 응답을 기다릴 필요가 없도록 쓰기가 디스크에 파이프라인(버스를 통해?)으로 연결됩니까?
  • 커널 자체가 를 통해 요청된 모든 syscall을 대기열에 넣게 됩니까 io_uring?
  • 내가 고려하지 않은 다른 병목 현상이 있습니까?

내 정신 모델이 잘못되었을 수도 있습니다. 어떤 조언이라도 대단히 감사하겠습니다!

답변1

대부분의 디스크에는 병렬 쓰기를 위한 어느 정도의 하드웨어 지원이 있습니까? 아니면 SSD는 가능하지만 회전 디스크는 그렇지 않을 수도 있습니다.

거의 모든 디스크는 회전 또는 솔리드 스테이트인지에 관계없이 작동합니다(회전 디스크에도 캐시가 있으므로 소량의 데이터에 대해서는 너무 느리지 않은 것처럼 보일 수 있음). 저렴한 USB 키나 SD 카드는 낮은 동시성을 달성하지만 거기에도 일정 수준의 병렬성이 있을 것입니다... 단일 장치에 대한 최대 병렬 명령 측면에서 SATA는 최대 32개까지 가질 수 있고 SCSI는 10~100개 범위인 경향이 있습니다. NVMe는 1000년대까지 갈 수 있습니다(사양에서는 최대 65536으로 제한한다고 생각하지만 아직 그렇게 높은 장치는 모르겠습니다).

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

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

커널 자체가 io_uring을 통해 요청된 모든 syscall을 대기열에 추가하게 됩니까?

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

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

예. 다음과 같은 이점을 진정으로 확인하기 위해 초당 충분한 I/O를 수행하고 있는지도 확실하지 않습니다 io_uring. 또한 동기화가 자주 발생하면 빈도 및 수행 방법에 따라 병렬 처리가 제한될 수 있습니다. 버퍼링된 I/O를 수행하는 경우 RAM에 쓰기 때문에 커널은 동기식에서도 병렬 처리를 짜내고 가능한 경우 커널은 RAM에서 병렬로 디스테이징됩니다. (이전 항목은 완전한 목록이 아닙니다.)

(제목에서 나온 질문)

io_uring을 통해 동시 쓰기가 얼마나 잘 확장되나요?

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

참고자료

관련 정보