특정 물리적 메모리와 NVME 간 데이터 전송에 대한 질문

특정 물리적 메모리와 NVME 간 데이터 전송에 대한 질문

특정 예약된 물리적 메모리에서 NVME, IIUC로 데이터를 전송하려고 합니다. 3단계가 있습니다.

  1. 커널 드라이버에서는 예약된 메모리(dts에 지정된 물리적 주소와 크기)가 file_Operation의 mmap을 통해 사용자 공간에 노출됩니다. 특정 드라이버 구현은 memremap을 사용하여 pa를 va에 매핑한 다음 remap_pfn_range 또는 nopage를 사용하여 페이지 테이블을 구축할 수 있습니다(두 솔루션 모두 고유한 장점과 단점이 있기 때문에 조정할 여지가 있지만 IMO에서는 큰 영향을 미치지 않습니다. io는 여기에 관련되지 않기 때문에))

  2. 그런 다음 사용자 공간 응용 프로그램은 장치 fd에서 mmap(2)을 사용하여 매핑된 버퍼 A를 가져옵니다.

  3. 위의 버퍼 A를 파일에 씁니다. 이 단계에는 mmap, write, io_uring, aio, libaio 등 다양한 방법이 있습니다. 일부는 직접 IO를 지원할 수 있지만 일부는 지원하지 않습니다(예: mmap).

질문:

  1. 1, 2, 3단계가 정확합니까?
  2. 1단계와 2단계의 경우 mmap 외에 다른 솔루션이 있나요?
  3. io_uring을 사용하여 버퍼 A(mmap에서)에서 디스크 파일로 쓰는 것이 가능한지 확실하지 않습니다. 알고 계시다면 알려주세요.

관련 정보