Изменить алгоритмы управления перегрузкой для каждого соединения - PullRequest
3 голосов
/ 14 января 2011

Команда 'sysctl' в linux изменяет алгоритм управления перегрузкой глобально для всей системы. Но управление перегрузкой, когда размер окна TCP и другие подобные параметры варьируются, обычно выполняется для каждого соединения TCP. Итак, мой вопрос:

  • Существует ли способ изменить алгоритм контроля перегрузки, используемый для каждого соединения TCP?

Или я что-то здесь упускаю? Если так, что это?

Ответы [ 4 ]

2 голосов
/ 07 июня 2011

Это делается в iperf с использованием опции -Z - патч здесь .

Вот как это реализовано (PerfSocket.cpp, строка 93):

    if ( isCongestionControl( inSettings ) ) {
#ifdef TCP_CONGESTION
    Socklen_t len = strlen( inSettings->mCongestion ) + 1;
    int rc = setsockopt( inSettings->mSock, IPPROTO_TCP, TCP_CONGESTION,
                 inSettings->mCongestion, len);
    if (rc == SOCKET_ERROR ) {
        fprintf(stderr, "Attempt to set '%s' congestion control failed: %s\n",
            inSettings->mCongestion, strerror(errno));
        exit(1);
    }
#else
    fprintf( stderr, "The -Z option is not available on this operating system\n");
#endif

Где mCongestion - строка, содержащая имя алгоритма для использования

1 голос
/ 17 марта 2011

Кажется, это возможно через get / setsockopt. Единственная документация, которую я нашел: http://lkml.indiana.edu/hypermail/linux/net/0811.2/00020.html

0 голосов
/ 17 августа 2018

В более новых версиях Linux можно установить управление перегрузкой для определенного места назначения, используя ip route ... congctl.

Если кто-то знаком с этим подходом, отредактируйте этот пост.

0 голосов
/ 14 января 2011

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

...