헤더 데이터 분할이란 무엇이며 TCP_ZEROCOPY_RECEIVE 페이지 정렬에 필요한 이유는 무엇입니까?

헤더 데이터 분할이란 무엇이며 TCP_ZEROCOPY_RECEIVE 페이지 정렬에 필요한 이유는 무엇입니까?

현재 조사 중이에요TCP_ZEROCOPY_RECEIVENIC의 헤더 데이터 분할 지원이 필요하다는 내용을 읽었습니다. 내가 이해한 바로는 이 기능은 DMA 헤더(IP, TCP 헤더)와 데이터(나머지)를 별도의 버퍼에 넣는 것입니다. (캐시 효율성 향상을 위해) TCP_ZEROCOPY_RECEIVE의 경우 프로세스의 가상 주소에 매핑하려면 데이터가 페이지 정렬되어야 한다는 것을 알고 있습니다. 내 질문은 데이터를 페이지에 정렬하려면 NIC의 헤더 데이터 분할 지원이 필요한 이유입니다. 네트워크 디바이스 드라이버가 sk_buff 구조체를 생성할 때 헤더만 읽어서 별도로 할당된 페이지에 데이터를 복사해서 Zero Copy를 할 수는 없나요? 또한 네트워크 카드 드라이버가 네트워크 카드와 상호 작용하여 헤더 데이터 분할 기능을 활용하는 방법도 알고 싶습니다.

제가 이해한 내용이 틀렸다면 죄송합니다. 추가해야 할 내용이 있으면 알려주시기 바랍니다. 감사해요.

답변1

내 질문은 데이터를 페이지에 정렬하려면 NIC의 헤더 데이터 분할 지원이 필요한 이유입니다. 네트워크 디바이스 드라이버가 sk_buff 구조체를 생성할 때 헤더만 읽어서 별도로 할당된 페이지에 데이터를 복사해서 Zero Copy를 할 수는 없나요?

컨텍스트의 경우, 권한이 없는 사용자 공간만 데이터에 직접 액세스할 수 있으므로 헤더를 데이터와 분리해야 합니다.

제로 카피 TCP 수신의 목표는 수신 시 사용자 공간까지 정확히 0개의 데이터 복사본을 포함하는 것입니다. 상황이 보장되면 NIC는 패킷을 사용자 공간 메모리 영역으로 DMA해야 합니다. 수신 프로세스에 의해 설정됩니다. 드라이버가 분할하기 위해 데이터를 복사해야 하는 경우 더 이상 제로 복사본이 아닙니다.

바라보다이것 한 쌍이 주제에 대한 자세한 내용은이 기사의 저자: Jakub Kicinski.

관련 정보