4

응용 프로그램에서 소켓과 소켓 간 데이터 전송을 위해 Linux에서 splice을 사용하고 있습니다.다른 운영 체제가 Linux 시스템 호출 스플 라이스를 구현합니까?

  1. 다른 운영체제 (특히 Windows, OS X 및 FreeBSD 이상)는 또는 이와 동등한 솔루션을 구현합니까?
  2. sendfile ¹ + memmap으로 Windows에서 소켓 - 소켓 데이터 splice을 모방 할 수 있습니까?

은 모두 내가 기억하지 않는 다른 이름으로 윈도우에 존재 ¹.


당신은 리눅스 사용자 공간 버퍼 대 splice의 성능 향상을 볼 수 있습니다

업데이트.

  • DF

    go

    , DR, F, MF, MRNX는 Nginx에 웹 서버
  • -p+tsplice
  • +p-t이 사용하는 리눅스 시스템 호출을 사용, 그 다른 터널 모드에서 내 응용 프로그램입니다 사용자 공간 버퍼를 사용한 이식성 구현
  • +p+t
  • 기가 바이트에서 제
  • 의 단일 1GB이 (1,048,576,000 바이트) 파일은 4 개의 동시 클라이언트에 의해 4 회 요청하였고 된 스루풋을 나타내는 사용자 공간 버퍼 복수 OS 스레드와 휴대용 구현을 사용
+1

나는이에 대한 몇 가지 생각을 가지고있다. 그러나 내가 대답하기 전에, "정말로 너는 무엇을하려고하니?"라고 묻자. 한 소켓에서 다른 소켓으로 데이터 스트림이나 패킷을 에코하려고합니까? 데이터를 보내기 전에 데이터를 검사해야합니까? – selbie

+0

에코 만 에코. 나는 [PortFusion] (http : //fusion.corsis)이라는 간단한 터널링 솔루션을 연구 중이다.eu)는 데이터 스트림을 검사 할 필요가 없습니다. (그렇다면 사용자 공간에 데이터를 가져 오는 휴대용 구현으로 전환 할 수 있습니다). –

+0

@selbie 다른 운영체제의 'splice'에 해당하는 이유를 설명하기 위해 차트를 추가했습니다. –

답변

0

TransmitFile은 winsock에서 하나의 파일 핸들을 소켓으로 스트리밍하는 것과 같은 방법으로 생각할 수 있지만 파일 -> 디스크에서 스트리밍하는 데 도움이되는지는 확실하지 않습니다. 핸들을 memory mapped file 핸들과 함께 사용할 수 있습니다.

나는 과거에 몇몇 사람들이 에코와 간단한 서버 작업을 빠르게하는 방법으로 "커널 모드"라고 말했지만 지금까지 해본 적이 없다고 들었습니다. 커널 모드 윈속에

일부 링크 :

http://blogs.msdn.com/b/wndp/archive/2006/02/24/introduction-to-winsock-kernel-wsk.aspx

http://msdn.microsoft.com/en-us/library/windows/hardware/ff571084(v=vs.85).aspx

+0

TransmitFile은 오히려'File -> Socket'처럼 보입니다 :) 그리고 나는 메모리 매핑 된 파일을 시도하지만, 사용자 공간에서 그것을 만지지 않고 메모리 맵핑 된 파일에 직접 소켓으로부터 데이터를받는 부분입니다. 'Socket -> File' 타입의 복사 기능. –