HTTPListener vs Native HTTP performance

Краткая справка: я понимаю, что HTTPListener использует драйвер ядра http.sys, что, как предполагается, делает его отличным исполнителем. Однако при выполнении некоторых тестов производительности между управляемым http-сервером и собственным сервером vc ++ я вижу увеличение примерно на 15 МБ / с на собственной стороне. Тестовая установка представляет собой две лабораторные машины, недавно отформатированные с помощью сетевых адаптеров емкостью 1 ГБ. На нативной стороне я вижу около 110 МБ / с, что близко к 100% от nic минус накладные расходы, при использовании HTTPListener я вижу ~ 94 МБ / с (максимум 100).

Тесты - это яблоки в яблоки,

  • оба отправляют одинаковую полезную нагрузку (~ 120 МБ)
  • Я использую одно и то же управляемое клиентское приложение для тестирования обоих серверов
  • Для Managed я отключил Nagle (но тестировал в обе стороны, результат тот же)
  • Я провожу несколько тестов и вычисляю пропускную способность. Интересно отметить, что отклонение Managed std выше, то есть результаты не так согласованы по сравнению с исходными.

В целом я ожидаю, что смогу приблизиться к 110 МБ / с собственного сервера через HTTPListener, 15 МБ / с кажется довольно дорогостоящим.

Вопросы: 1. Есть ли другие оптимизации для управляемого, которых мне не хватает? 2. Каковы некоторые потенциальные узкие места, я посмотрел на HTTPResponseStream через отражатель, похоже, что происходит некоторый маршалинг, но нет явных проблем. Фактически, при использовании фрагментов он создает такой же массив фрагментов, что и мой собственный сервер.

Любой идеи приветствуются,

9
задан Greg 21 January 2011 в 19:13
поделиться