Различия производительности пропускной способности Localhost TCP

5345
Lieven Keersmaekers

Я использую psping для измерения полосы пропускания на локальном хосте на разных компьютерах: ноутбуках, домашних компьютерах и серверах . Все они получают от 100 до 200 МБ / с, но мой PowerPc на работе удается получить до 800 МБ / с .

Что может вызвать эти огромные различия, общаясь с собой через локальный хост? PowerPc превосходит все другие протестированные мной устройства с коэффициентом от 4 до 8 .

Конфигурация PowerPc

  • Windows 7
  • Процессор Intel (R) Xeon® (E3-1240 v3 @ 3,40 ГГц) [Семейство 6, модель 60, степпинг 3]
  • 3,78 GFLOPS / ядро
  • Symantec SEP

Конфигурация домашнего компьютера

  • Windows 8.1
  • Процессор Intel (R) Core (TM) i7 920 с частотой 2,67 ГГц [Intel64 Family 6, модель 26, степпинг 5] 4
  • 2,64 ГФЛОПС / ядро
  • BitDefender

команда psping

psping -4 -b -l 8k -n 20000 localhost:1234 

Несколько вопросов, которые я ожидаю получить и которые хотелось бы обсудить заранее

Я могу быть далеко, но это показывает вам мое текущее понимание вещей, не стесняйтесь, чтобы привести меня в порядок.

  1. Антивирус связан
    с антивирусным компонентом домашнего компьютера без каких-либо заметных различий. Кроме того, я перехватил трассировку WPA (XperfScripts), и модули, которые больше всего связаны с процессором, это ntoskrnl.exe, netio.sys, tcpip.sys, ndis.sys и afd.sys. Первый AV-модуль, который входит в картину, связанную с ЦП, - это avcuf32.dll, на который приходится 0,17% от общего ЦП.

  2. Localhost против 127.0.0.1
    Я пробовал оба и получил одинаковые результаты на всех протестированных компьютерах.

  3. Современные драйверы
    Драйверы на моем домашнем компьютере обновлены. Драйверы на PowerPc управляются нашими ИТ-специалистами и несколько отстают, но не намного (в любом случае PowerPc в 4 раза быстрее в тестах)

  4. netsh int tcp show global
    Существуют некоторые различия между обоими ПК. Состояние Chimney Offload и NetDMA на моем домашнем компьютере отключены, а на PowerPc они включены автоматически.
    Мое сетевое фу недостаточно хорошо, чтобы знать, может ли это объяснить различия, но, читая эту тему, я сомневаюсь, что это так.


редактировать

RAM детали PowerPC

 capacity speed memorytype totalwidth datawidth typedetail -------- ----- ---------- ---------- --------- ---------- 4294967296 1600 0 64 64 128 4294967296 1600 0 64 64 128 4294967296 1600 0 64 64 128 4294967296 1600 0 64 64 128 

RAM детали Домашний компьютер

 capacity speed memorytype totalwidth datawidth typedetail -------- ----- ---------- ---------- --------- ---------- 2147483648 1333 1 72 64 2 4294967296 1333 1 72 64 2 2147483648 1333 1 72 64 2 4294967296 1333 1 72 64 2 2147483648 1333 1 72 64 2 4294967296 1333 1 72 64 2 4194304 33 11 8 8 4096 
6
Во-первых, убедитесь, что все ваши буквы B совпадают (МБ / МБ), так как 800 МБ == 100 МБ. Frank Thomas 9 лет назад 1
извините, жирный ввод с пальцами, и пришлось редактировать, чтобы завершить комментарий. обычно вещь, которая действительно ускоряет файловые операции локальной сети, - это RAID и способ, которым диски взаимодействуют (или не взаимодействуют) при выполнении операций ввода-вывода. например, вы никогда не получите больше 35 МБ / с, когда источник или назначение части данных подключены через usb2. Это само по себе является причиной того, что мой рабочий ПК имеет большую емкость сети, чем мой дом, поскольку все серверы имеют RAID5, несмотря на то, что моя домашняя сеть работает быстрее. Frank Thomas 9 лет назад 1
@FrankThomas - я вижу , Все Б одинаковы. Я думаю, что вы неправильно поняли мой вопрос. Там нет диска или USB. psping - это всего лишь инструмент для тестирования сети, и в этом случае я проверяю, насколько быстро компьютер может связываться с самим собой через localhost * (в конце концов, чтобы решить проблему ipc over tcp, которую мы имеем с приложением) * Lieven Keersmaekers 9 лет назад 1
Положите детали NIC и RAM. Ali786 9 лет назад 0
@ ali786 - весь трафик с / на localhost. Физическая сетевая карта не играет роли * (tcpip.sys является самым низким в стеке трафика) *. Я добавил детали RAM к вопросу. Я добавлю их с моего домашнего компьютера, когда я, ну, дома, Lieven Keersmaekers 9 лет назад 1
Сколько всего оперативной памяти для каждого компьютера? Предполагается, что основным отличием в скорости является скорость памяти, поскольку кадры копируются между уровнями TCP. Предполагается, что Windows 8 будет намного быстрее из-за [Fast TCP Loopback] (http://blogs.technet.com/b/wincat/archive/2012/12/05/fast-tcp-loopback-performance-and-low- latency-with-windows-server-2012-tcp-loopback-fast-path.aspx), если PsPing не использует его. Вы должны пропинговать блоки 8960 байт, чтобы использовать [Jumbo frames] (http://en.wikipedia.org/wiki/Jumbo_frame) для очень незначительного улучшения. harrymc 9 лет назад 1
Также: Все условия должны быть одинаковыми: `netsh int tcp set global chimney = automatic` и` netsh int tcp set global netdma = enabled`. NetDMA может иметь эффект, поскольку он позволяет сетевым адаптерам передавать данные непосредственно в ваше приложение без необходимости использования вашего ЦП, возможно, таким образом, уменьшая количество копий памяти. harrymc 9 лет назад 1
@harrymc - Настройка дымохода в автоматическом улучшена немного, но не сильно. Настройка netdma, похоже, не "прилипает". Я получаю одобрение от netsh при выполнении команды, но при отображении глобальных настроек она по-прежнему отключена. Lieven Keersmaekers 9 лет назад 0
Попробуйте это для включения NetDMA: regedit в `HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters` и создайте новый элемент DWORD с именем` EnableTCPA` со значением 1. Может потребоваться перезагрузка. Сколько оперативной памяти в ГБ для каждого компьютера? harrymc 9 лет назад 0
Устанавливаем прямо сейчас и готовимся к перезагрузке. Во время перезагрузки -> Я сравниваю две трассировки WPA прямо сейчас, и все, кажется, указывает на проблему с процессором * (что я фактически с самого начала отклонил и до сих пор не могу поверить) *. Обе трассы учитывают переключатели контекста 400 КБ, обе трассы на время теста использовали 20% ЦП, но одной требуется всего 3,6 секунды, а другой - 14,1 секунды. Lieven Keersmaekers 9 лет назад 0
* (16 ГБ и 18 ГБ ОЗУ. Я добавил его к вопросу) * Настройка EnableTCPA и перезагрузка не помогли. Настройка по-прежнему отключена. Можете ли вы выполнить тот же тест с полосой пропускания и поделиться своими результатами? Я пробовал на разных системах и все получают от 100 до 200 МБ / с, только PowerPc достигает 800 МБ / с. Lieven Keersmaekers 9 лет назад 0
@LievenKeersmaekers, Tcpip.sys является драйвером Windows и имеет прямой доступ к внутренним компонентам операционной системы, аппаратного обеспечения и т. Д. Мы используем 127.0.0.1 для проверки работоспособности NIC или нет, ваша конфигурация NIC может отличаться. Ali786 9 лет назад 0
@ ali786 - вполне возможно пинговать localhost на компьютере вообще без сетевой карты, все это программное обеспечение. Я не понимаю, какие данные вы хотите, чтобы я предоставил? У вас есть команда, например, ipconfig? Lieven Keersmaekers 9 лет назад 0
На Windows 7 x64 мои скорости составляют 200-300 МБ. Это лучше, чем у вас, но я использовал мощный компьютер, так что, возможно, копии памяти были быстрее, и память действительно является основным фактором производительности. Мне также не удается установить NetDMA, и причина в том, что отсутствует IPMONTR.DLL. На данный момент я предпочитаю NetDMA как причину различий в производительности. Вопросы: (1) Есть ли у вас IPMONTR.DLL на PowerPC, и если да, я хотел бы получить копию для дальнейшего тестирования (она находится в `C: \ Windows \ System32`), (2) я полагаю, что PowerPC имеет Windows 7 х64? harrymc 9 лет назад 0
@harrymc - Да, Windows 7 x64. Спасибо за попытку. Как ни странно, в моей системе нет `ipmontr.dll`. Просто сделал `dir c: \ ipmontr.dll / s` после того, как не увидел его под system32, но поиск оказался пустым. Я снова выполнил `netsh int tcp show global`, чтобы убедиться, что NetDMA включен. Это. Где вы нашли ссылку на ipmontr.dll? Lieven Keersmaekers 9 лет назад 0
Я сделал `netsh int tcp set global netdma` и получил сообщение об ошибке об этой dll. Самое смешное, что теперь `show global` показывает NetDMA как включенный, а повторение теста теперь дает скорость 500 МБ !!! Я думаю, что это окончательно указывает на NetDMA как на причину разницы; а также что у Microsoft есть серьезные ошибки в реализации ее пользовательского интерфейса. harrymc 9 лет назад 1
Таким образом, включение NetDMA увеличивает скорость в два раза. Время читать на NetDMA, я думаю. Если вам случится найти что-то еще, пожалуйста, поделитесь. Если вы опубликуете свои выводы в качестве ответа, я приму позже. Спасибо Гарри, с новым годом. Lieven Keersmaekers 9 лет назад 0
Странность продолжается: после перезагрузки NetDMA по-прежнему отображается как включенная, но пропускная способность теперь снижена до 200 МБ. Возможно, у Microsoft есть серьезные ошибки в реализации NetDMA, но конъюнктура бесполезна. Будьте счастливы, что это работает на PowerPC. Если никто из Microsoft не предложит здесь лучшего объяснения, я опубликую это как ответ через пару дней. harrymc 9 лет назад 0
Я связался с Марком Руссиновичем по этому поводу, и он дал несколько советов, но у него нет времени, чтобы разобраться в этом. Из следов WPA, которые я взял, я склонен сказать, что это проблема планирования. PsPing тратит 225 мкс в ожидании на медленной машине и 50 мкс в ожидании на машине, в то время как процессор не работает ни на одной машине (если вообще что-либо). Медленный компьютер запустил 11 потоков, а быстрый запустил 33. По словам Марка, PsPing запускает потоки в зависимости от процессоров, но медленный получил 12 единиц ЦП, а быстрый - только 8. Это озадачивает, если не сказать больше. Lieven Keersmaekers 9 лет назад 0
Каковы были указатели? harrymc 9 лет назад 0
Чтобы взять трассировку WPA * (которую я уже сделал, но не упомянул в письме) * и факт потока / процессора * (который сам по себе был загадкой) * Lieven Keersmaekers 9 лет назад 0
Поскольку PsPing запускает произвольное количество потоков, он не подходит для сравнения. Используя инструмент [PCATTCP] (http://www.pcausa.com/Utilities/pcattcp.htm), который я нашел в Google, я получал совершенно разные результаты при каждом запуске: 268 431 297 380 МБ. Вывод: петлевая реализация Microsoft настолько паршивая, что в Windows 8/2012 они [переписали ее] (http://blogs.technet.com/b/wincat/archive/2012/12/05/fast-tcp-loopback-performance- и низкая латентность-с-Windows-сервер-2012-ТСР-петлевой-быстро path.aspx). Цифрам нельзя доверять. Я все еще должен выяснить, как перестать жаловаться на отсутствие IPMONTR.DLL. harrymc 9 лет назад 1
Примечание. Для всех, кто гуглил netsh-сообщение «DLL помощника не может быть загружен: IPMONTR.DLL» и столкнулся с этим обсуждением: Решение состоит в том, чтобы запустить команду `netsh delete helper IPMONTR.DLL`. harrymc 9 лет назад 0
@harrymc - PsPing дает единообразные результаты для каждой машины, но вы, возможно, правы, что это не подходит для сравнения, трудно сказать. Я также нашел эту статью о быстрой петле, но она также требует изменений в клиентском программном обеспечении. Это не под нашим контролем к сожалению. Определенно собираюсь попробовать команду удаления и опубликовать результаты, как только я вернусь домой (примерно через 10 часов). Lieven Keersmaekers 9 лет назад 0
Было бы интересно попробовать еще раз использовать PCATTCP на обоих компьютерах, выполнив несколько прогонов и взяв их среднее значение. Это большая загадка, как NetDMA был включен и действительно работает на PowerPC. harrymc 9 лет назад 0
Используя `pcattcp -t localhost` на PowerPc, я получил следующие результаты (КБ / с): * (в среднем 556738) * 862315,780190,606814,512000,481882,364088,496484,496484,564965,682666,512000,655360 , 442810,546133,512000,481882,606814,431157,630153,455111,780190. Я попробую дома, когда дома. Lieven Keersmaekers 9 лет назад 0
Используя 200000 вызовов, он выравнивается со скоростью около 680 МБ / с `pcattcp -t -n200000 localhost`. Lieven Keersmaekers 9 лет назад 0
Домашний компьютер достигает 200 МБ / с с 200 000 вызовов. IPMONTR.DLL не определяется как помощник в системе. Lieven Keersmaekers 9 лет назад 0
Я думаю, что, возможно, нашел это. Статья Microsoft [Включение NetDMA] (http://technet.microsoft.com/fr-fr/library/gg162687%28v=ws.10%29.aspx) гласит: «NetDMA должен быть включен в BIOS перед выполнением этой операции. Процедура. Поддержка NetDMA часто называется поддержкой IOAT. " Это может объяснить эти различия, если BIOS на PowerPC поддерживает его, но не на компьютере с Windows 8.1 (или поддержка отключена в BIOS или UEFI). Это может объяснить, почему Windows устанавливает значение «Вкл» на PowerPC и почему он всегда выключен на другом компьютере, независимо от того, что вы делаете для его включения. harrymc 9 лет назад 1
Вы видите такую ​​опцию в BIOS (или UEFI?) На вашем домашнем компьютере? harrymc 9 лет назад 0
Подробнее: статья Microsoft [NetDMA (драйверы Windows)] (http://msdn.microsoft.com/en-us/library/windows/hardware/ff568342%28v=vs.85%29.aspx) гласит: «NetDMA интерфейс не поддерживается в Windows 8 и более поздних версиях ». Вот почему Microsoft нужно было добавить быструю обратную петлю TCP, но, к сожалению, она не совместима с существующими приложениями. Завтра я составлю ответ. harrymc 9 лет назад 0
@Harrymc - в моем биосе нет опций поддержки IOAT. Я поигрался с HPET, чтобы увидеть, если это что-то меняет, но стало медленнее. Спасибо за ваше время и ответим Гарри. Lieven Keersmaekers 9 лет назад 0

1 ответ на вопрос

5
harrymc

I believe that the reason that the PowerPC on Windows 7 is much faster on localhost loopback throughput, is because it can use NetDMA.

The Microsoft article NetDMA (Windows Drivers) defines NetDMA as :

The NetDMA interface provides a generic interface for memory-to-memory direct memory access (DMA) transfers. Although the interface is designed to copy packets that are received from high-performance network interface cards (NICs), you can also use the interface for other applications. There is no direct relationship between NetDMA and NDIS.

When using localhost loopback, it stands to reason that memory copy operations are the main factor of throughput, as frames are copied from the source-application memory, then between TCP layers and finally to the memory of the target-application.

NetDMA can have an impact, since it allows network adapters to transfer data directly to your application, perhaps this way reducing the number of memory copies even for the trivial loopback adapter.

Enabling NetDMA can be done in two ways :

  1. Enter netsh int tcp set global netdma=enabled in Command Prompt (cmd) that is run as Administrator, then reboot.
  2. Regedit to HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters and create a new DWORD item named EnableTCPA with the value 1, then reboot.

However, there are two prerequisites to enabling NetDMA :

  1. The Microsoft article Enabling NetDMA has this :

NetDMA must be enabled in the BIOS before performing this procedure. NetDMA support is often labeled IOAT support.

  1. The Microsoft article NetDMA (Windows Drivers) has this note :

The NetDMA interface is not supported in Windows 8 and later.

Putting both these requirements together, I can hazard the guess that, as NetDMA is a BIOS function, it was not implemented in UEFI which is used in Windows 8/2012.

Microsoft had therefore to improve localhost loopback throughput in another way, especially for using in Hyper-V, and had therefore created in Windows 8/2012 the Fast TCP Loopback, defined as :

TCP Loopback Fast Path is a new feature introduced in Windows Server 2012 and Windows 8. If you use the TCP loopback interface for inter-process communications (IPC), you may be interested in the improved performance, improved predictability, and reduced latency the TCP Loopback Fast Path can provide. This feature preserves TCP socket semantics and platform capabilities including the Windows Filtering Platform (WFP), and works on both non-virtualized and virtualized operating system instances.

The TCP loopback interface provides a simple local IPC mechanism for processes on the same operating system instance, and it can easily be switched to a remote IPC mechanism by simply changing the destination IP address.

Unfortunately, Fast TCP Loopback is not transparent, requiring applications to issue a WSAIoctl system call on the sockets for both sender and receiver, therefore not being backward-compatible with existing bandwidth-measuring applications such as PsPing and PCATTCP.

In my own tests on Windows 7, I have not fathomed all the mysteries surrounding NetDMA, but I have managed to briefly turn it on, with the immediate benefit of doubling my bandwidth as measured by PsPing. But as NetDMA did not survive a reboot on that computer, I do not recommend depending on it for throughput even on computers that theoretically support it.

У меня есть следы WPA как быстрой, так и медленной системы. У вас есть опыт интерпретации таких следов? Каждый раз, когда я начинаю их нарезать и нарезать кубиками, я делаю выводы о других вещах, в зависимости от того, что я начал группировать. Lieven Keersmaekers 9 лет назад 0
* (Мне нравится, как вы это сделали, кстати) * Lieven Keersmaekers 9 лет назад 0
Извините, у меня нет опыта работы со следами WPA, но я вижу, что в Интернете много материала. Возможно, вы могли бы попытаться найти и нацелить интересные источники событий, а не все. harrymc 9 лет назад 0