저는 리눅스 커널을 처음 사용합니다. 그리고 최근에 커널 2.6.33의 sendfile syscall을 살펴 보았습니다. 나는 스플 라이스는 DMA 복사를 사용 장소를 찾을 수 없습니다,splice()의 DMA 사본
do_sendfile()
=> do_splice_direct()
=> splice_direct_to_actor()
=> do_splice_to()
=> do_splice_from()
=> splice_read,splice_write
이 순서를 통하여 : 다음은 내 여행의 순서입니다. 그렇다면 DMA 복사는 어디에서 발생합니까?
안녕하세요, 귀하의 답변에 감사드립니다. 정말 도움이됩니다. 그래서 당신이 말한 것을 정확히 이해한다면 스플 라이스의 순서는 다음과 같습니다 : 디스크 드라이브에서 fd_in 버퍼로의 DMA 복사; fd_in 버퍼는 파이프를 통해 페이지 참조를 fd_out 버퍼로 넘깁니다. 이더넷 카드는 fd_out 버퍼의 참조를보고 실제 데이터를위한 fd_in 버퍼로 직접 갔다. – sliter
@sliter 네, 그렇습니다. – gby