Подтвердить что ты не робот

Лучшие практики высокопроизводительных сетевых приложений

При тестировании сервера многоадресной передачи UDP, который я написал на Windows 7 Ultimate x64, я столкнулся с наиболее любопытным. Воспроизведение музыки с foobar2000 в фоновом режиме значительно улучшило скорость передачи сервера, но также понесла небольшую потерю пакетов. Выключение музыки сразу же снизило скорость передачи до приемлемых уровней, но также вызвало потерю пакетов. (У меня есть клиентское приложение, которое разговаривает с сервером и сообщает о неподтвержденных пакетах)

Я осознаю поведение дросселирования Vista (и вверх), чтобы медиа и сетевые приложения хорошо взаимодействовали друг с другом, но я, конечно, не ожидал, что воспроизведение музыки улучшит производительность сети и не приведет к значительному снижению производительности сети.

Что я могу сделать с точки зрения кода в моем серверном приложении, чтобы он последовательно выполнял ли воспроизведение музыки или нет в Vista и выше? Я бы, конечно, хотел бы не сообщать всем моим клиентам о том, как настроить свой реестр, чтобы получить приемлемые скорости передачи, а также хотел бы, чтобы они просто не "играли музыку", чтобы получить приемлемые скорости передачи. Приложение должно "просто работать", на мой взгляд.

Я думаю, что решение включает в себя что-то вроде приоритетов процессов, MMCSS или, возможно, какого-то другого неясного вызова Windows API, чтобы заставить его делать The Right Thing (TM) здесь.

Кроме того, извините, но создание воспроизводимого тестового примера - это нетривиальная работа. Дросселирование происходит только тогда, когда драйвер для физического сетевого адаптера активно выполняет работу и не может быть воспроизведен с использованием интерфейса обратной петли. Для тестирования нужно было бы выполнить реализацию клиента, реализацию сервера и физическое сетевое оборудование.

4b9b3361

Ответ 1

То, что вы наблюдаете, - это побочный эффект вашего медиаплеера, устанавливающий разрешение часов вашего аппарата на 1 мс.

Это происходит только во время воспроизведения

Побочный эффект - ваше приложение имеет меньшие временные интервалы, и это создает ваше приложение, потому что у вас, вероятно, было много CPU, украденного из вашего приложения, и с более длинными лимитами - в течение более длительного времени.

Чтобы протестировать его, вы можете просто установить разрешение таймера в вашем приложении на 1 мс и сравнить производительность без.

Должен быть таким же, как если бы он не был установлен, но с воспроизведением мультимедиа.

Ответ 2

Прошло много лет с тех пор, как я написал код, связанный с сетевым протоколом, но я дам предположение.

Я подозреваю, что это проблема пропускной способности и латентности. Воспроизведение музыки приводит к конфликту ввода-вывода и добавлению латентности при передаче пакетов. Однако добавленная латентность, вероятно, приводит к тому, что пакеты будут стоять в очереди и, таким образом, будет увеличена пропускная способность .

Чтобы устранить это в коде, вы можете попробовать отправить пакеты пакетами самостоятельно. Я предполагаю, что вы отправляете каждый пакет в систему для передачи по мере готовности данных. Группируйте несколько пакетов и отправляйте их в систему одновременно. Даже группа из двух или трех пакетов может иметь большое значение, особенно если вы представляете свою небольшую задержку между каждым системным вызовом.

Я не смог найти ссылки, непосредственно связанные с быстрым поиском в Google. Тем не менее, вы можете увидеть концепцию в это обсуждение настройки сети для Linux или в этот FAQ, в котором описываются такие методы, как пакетная обработка для повышения пропускной способности.

Ответ 3

Foobar получил много плагинов, написанных разными людьми. Это может быть причиной вашей проблемы. Я предлагаю вам приблизиться к реальной причине. Попробуйте отключить плагины один за другим, выполняя свой тест каждый раз, когда плагин отключен.

Надеюсь, эта идея поможет.

Ответ 4

Это похоже на управление пропускной способностью TSP/IP на основе примитивного алгоритма. Белая бумага здесь должна дать больше информации. http://www.asperasoft.com/?gclid=CICSzMqD8Z0CFShGagod_ltSMQ Их продукт - протокол UDP, который работает очень хорошо.