Szybkie tło: Rozumiem, że HTTPListener używa sterownika jądra http.sys, który podobno czyni go doskonałym wykonawcą. Jednak podczas wykonywania testów wydajności między zarządzanym serwerem http a rodzimym serwerem vC++ obserwuję wzrost o około 15 MB/s po stronie natywnej. Konfiguracja testowa to dwie maszyny laboratoryjne świeżo sformatowane z 1 gb nics. Po stronie natywnej widzę około 110 MB/s, które jest bliskie 100% nic minus narzutu, gdy używam HTTPListener widzę ~ 94 MB/s (max 100).HTTPListener vs Wydajność natywnego HTTP
Testy są jabłka do jabłek,
- zarówno wysłać ten sam ładunek (~ 120 MB)
- Używam tej samej aplikacji klienta zarządzanego przetestować oba serwery
- zarządzanych mam wyłączone Nagle (Ale testowane w obie strony, wynik jest taki sam)
- Przeprowadzam serię testów i obliczam przepustowość, interesującą notatką jest to, że zarządzana odchyłka std jest wyższa, tj. Wyniki nie są tak konsekwentne w porównaniu do natywnego.
Ogólnie oczekuję, że będę w stanie zbliżyć się do 110 MB/s macierzystego serwera przez HTTPListener, 15 MB/s wydaje się dość kosztowne.
Pytania: 1. Czy istnieją inne optymalizacje dla zarządzanych, których mi brakuje? 2. Jakie są potencjalne wąskie gardła, patrzyłem na HTTPResponseStream za pośrednictwem reflektora, wygląda na to, że jest jakiś marshaling, ale nie ma rażących problemów. W rzeczywistości podczas korzystania z chunkingu tworzy identyczną tablicę fragmentów jak mój macierzysty serwer.
Wszelkie pomysły są doceniane,
Z jakich API zbudowałeś swoją implementację C++? –
Większe odchylenie standardowe dla zarządzanej aplikacji może wynikać z czyszczenia pamięci? Czy tworzysz/opuszczasz wiele obiektów? –
Kto powiedział, że klasa 'HttpListener' używa HTTP.SYS ?? Usługi IIS mają, ale nie "HttpListener", w rzeczywistości byłoby interesujące, gdyby tak się stało. Podaj referencję, jeśli uważasz, że tak jest. – Aliostad