Производительность Telnet в Windows XP и Linux - PullRequest
1 голос
/ 29 сентября 2010

У меня есть библиотека, основанная на telnetlib Python.И недавно я заметил, что производительность в Windows XP и Linux настолько различна.

ниже сценария, я проектирую три операции: «получить единицы», «просто нажать enter», «получить единицы с параметрами»

«получить единицы» возвращает длинную строку, «получить единицы с опциями» возвращает более короткую строку, а «просто нажмите enter» вернет самую короткую строку.

давайте догадаемся, что будет тратить больше времени, кажетсяего порядок должен быть «получить единицы», «получить единицы с параметрами», затем «просто нажать enter».

, но фактический результат в Windows XP:

получить единицы: 3.67200016975 с получить единицыс параметрами: 10.0319998264 с просто нажмите ввод: 10.0 с

тот же тест в Ubuntu: получить единицы: 3.91432785988 получить единицы с параметрами: 2.86995506287 просто нажмите ввод: 2.05337381363

кажется, что Windows XP имеет хорошиепроизводительность для большого IP-пакета, но для маленького пакета это так плохо.

Я проверил это вручную, используя клиент telnet для Windows, putty.Использование wireshark для захвата данных Telnet.И обнаружите, что для небольшого пакета задержка пакета очень велика, около 0,2 с

Я пытался изменить окно TCP, но не помогло.

Может кто-нибудь дать некоторые предложения?

try:
    begin_g = time.time()
    for i in range(50):
        connection.write('ZUSI:OMU;')
        ret = connection.read_until('<')
        ret = connection.read_until('<')
    end_g = time.time()
    elapse_g = end_g-begin_g

    clean_begin_t = time.time()
    for i in range(50):
        ret = ipa.get_units()
    clean_end_t = time.time()
    elapse_c = clean_end_t-clean_begin_t

    begin_wu = time.time()
    for i in range(50):
        connection.write('')
        ret = connection.read_until_prompt()
    end_wu = time.time()
    elapse_wu = end_wu-begin_wu

Ответы [ 2 ]

0 голосов
/ 29 сентября 2010

Спасибо всем. Я должен решить эту проблему. Существует два алгоритма: алгоритм Nagle, алгоритм ACK с задержкой. Моя проблема вызвана «отложенным алгоритмом ACK». К сожалению, это не может быть установлено в Python. Я должен изменить регистр, установить значение 1, и это работает на всех. Но я думаю, что это не достаточно хорошо. Поддержка Linux TCP_QUICKACK. Но Windows не делает.

[HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Services \Tcpip \Parameters \Interfaces \{Adapter-id}]
TcpAckFrequency = 2 (Default=2, 1=Disables delayed ACK, 2-n = If n outstanding ACKs before timed interval, sent ACK)

More Info MS KB Q328890
More Info MS KB 815230 (XP/2003 needs hotfix or SP2 for it to work)
More Info MS KB 935458 (Vista needs hotfix or SP1 for it to work)
0 голосов
/ 29 сентября 2010

Возможно, это задерживает отправку короткого пакета из-за алгоритма Нэгла .

Вы можете проверить это, отключив алгоритм Нэгла на компьютере с XP (Google для того, как это сделать).1005 *

...