Назад | Перейти на главную страницу

Каковы плюсы и минусы большой разгрузки приема (LRO) по сравнению с общей разгрузкой приема (GRO)

Я отлаживал сценарий, в котором хост ESX vmware связывается с виртуальной машиной Linux через виртуальный коммутатор с использованием TCP / IP. После события перегрузки хост vmware ожидает подтверждения от виртуальной машины, в то время как виртуальная машина ожидает дополнительных данных от хоста vmware. Включена разгрузка при приеме (LRO), и проблема, похоже, в том, что драйвер vmware не сообщает ядру размер подсегментов, которые оно собирает вместе (что он может сделать через поле gso_size структуры sk_buff).

Использование общей разгрузки приема (GRO) вместо LRO решает проблему. Итак, у меня есть два возможных решения:

1) исправьте драйвер vmware так, чтобы он устанавливал поле gso_size sk_buff, переданного ядру, или 2) выключите LRO (используя ethtool -K) и используйте вместо него GRO.

Ищу в Интернете информацию о LRO и GRO, я нахожу только отрывки и мнения без достоверных данных или окончательных ссылок. Я хочу знать, каковы плюсы и минусы использования LRO против GRO.

Судя по моим поискам в Интернете, я считаю, что: *) И LRO, и GRO могут уменьшить количество подтверждений, что должно уменьшить сетевой трафик, но, предположительно, также может снизить скорость роста окна перегрузки (cwnd) во время медленного запуска или перегрузки избегание. *) И LRO, и GRO должны уменьшить количество прерываний и количество проходов по стеку ядра. Уменьшает ли GRO прерывания больше, чем LRO, поскольку он использует новый API (NAPI)? *) LRO иногда может собирать слишком много пакетов (отдельные пакеты с разными заголовками, нарушая работу некоторых приложений). *) LRO выполняет только IPV-4, тогда как GRO также может выполнять IPV-6.

В соответствии с эта старая статья LWN По сути, GRO предназначалось для замены LRO. Насколько я понимаю, LRO намного более агрессивен, что может привести к объединению пакетов с потерями (отбрасывание важных данных заголовка), тогда как GRO более ограничивает.

В частности, LRO кажется проблематичным в средах с программным мостом и / или пересылкой, что является обычным явлением в установках виртуализации.

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