Определение правильных значений задержки в нужных местах в Linux для повышения производительности.

Вопрос или проблема

Я думаю, что понял, почему мой сервер отвечает довольно медленно, из-за bufferbloat.

Я провел некоторые вычисления и выяснил, что мне нужен буфер почти на 4K пакетов (вместо 54K). Но когда я исследовал свою систему, я нашел несколько мест, где могу задать буферы следующим образом:

Определение выходного буфера:

  • через ethtool и установку значения TX
  • через параметр txqueuelen в ifconfig

Определение входного буфера:

  • через ethtool и установку значения RX
  • через /proc/sys/net/core/netdev_max_backlog

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

Так как моя потребность в буфере невелика, она может поместиться в аппаратный буфер через ethtool.

Лучше ли устанавливать буферы через само оборудование Ethernet, делая программные буферы в Linux действительно маленькими (может быть, от 0 до 100), или лучше сделать аппаратные буферы маленькими, а программные буферы в Linux большими, и почему?

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

Я также вычислил свои потребности в буферах, исходя из предположения о задержке в 50 мс для подключения к серверу, основываясь на отчете ethtool о том, что скорость соединения составляет 1000 Мбит/с и что MTU равен 1500 байт.

Ответ или решение

Определение правильных значений задержки и буферов в Linux для повышения производительности

Ваша проблема, связанная с медленной реакцией сервера и возможным явлением под названием "bufferbloat", действительно может быть решена путем оптимизации параметров буферов как в аппаратной, так и в программной части. Давайте рассмотрим ключевые аспекты настройки буферов в Linux и как это влияет на производительность вашего сервера.

Понимание Bufferbloat

Bufferbloat — это ситуация, когда слишком большие буферы замедляют передачу пакетов по сети, приводя к высокой задержке и низкому качеству связи. Ваши вычисления показывают, что вам необходимо около 4K буферов для эффективной работы, и удачно, что вы заметили возможность настройки как аппаратных, так и программных буферов.

Настройка выходных (TX) и входных (RX) буферов

Выходные буферы (TX)

  1. ethtool: Вы можете настроить выходной буфер с помощью ethtool, установив значение TX. Это полезно, так как это значение контролируется на уровне сетевого интерфейса.

  2. txqueuelen: Параметр txqueuelen, задаваемый через ifconfig, также позволяет управлять длиной очереди для отправки. Меньшие значения могут уменьшить задержки, но важно не установить значение слишком низким, чтобы не привести к потерям пакетов.

Входные буферы (RX)

  1. ethtool: Аналогично, RX буферы могут быть настроены также через ethtool, устанавливая значение для RX.

  2. netdev_max_backlog: Этот параметр в /proc/sys/net/core/netdev_max_backlog определяет максимальное количество пакетов, ожидающих обработки в очереди. Оптимизация этого параметра может значительно повысить вашу производительность при высокой загруженности.

Оптимизация буферов

Теперь, что касается вашего вопроса о том, стоит ли настраивать аппаратные буферы маленькими и программные большими или наоборот:

  1. Аппаратные буферы: В большинстве случаев рекомендуется настроить аппаратные буферы (например, через ethtool) на небольшие значения, чтобы избежать задержек, вызванных накоплением пакетов в аппаратной памяти. Это особенно актуально для сценариев с низкой задержкой и малым количеством пакетов.

  2. Программные буферы: Установка программных буферов на небольшие значения также может способствовать уменьшению задержек, если это правильно сбалансировано. Значение в диапазоне от 0 до 100 действительно может быть рабочим, особенно если ваше подключение к сети стабильное и не испытывает значительной нагрузки.

Балансировка между аппаратными и программными буферами

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

Заключение

Оптимизация буферов в Linux для уменьшения задержек и повышения производительности вашего сервера — сложный, но выполнимый процесс. Установка правильных значений для аппаратных и программных буферов может значительно снизить эффекты bufferbloat и повысить отзывчивость вашего сервера. Не забывайте также о регулярной проверке производительности после внесения изменений, чтобы убедиться, что ваши настройки действительно приводят к положительным результатам.

Оцените материал
Добавить комментарий

Капча загружается...