Размер окна TCP в Windows

Тема в разделе "WASM.NETWORKS", создана пользователем skyproc, 31 янв 2010.

  1. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    В общем началось всё с того что я решил написать свой простенький многопоточный HTTP Server.
    Ну сказано сделано
    Не ну на скоростях ADSL интернета всё работает как надо, если скорость на отдачу у меня 32 кБ/с то с такой скоростью и закачикается файл на другой стороне инета.

    Но вот незадача, в локальной сети 100мб/с скорость закачки оказалась 350 кБ/с, да но по идее должно быть 12,5!

    Тут я вспомнил что в журнале "Сетевые решения" №10 2007 дета я видел статью "Четыре способа увеличить скорость выполнения ваших сетевых приложений под Linux" и одним из способов было увеличение размера TCP окна.
    Его можно вычислить по след формуле:

    (Пропускная способность * RTT)/8= Необходимый размер окна Байт, и как не странно с этой формулой соглашается половина сетевых программеров, и наверное все они пишут пол Linux.

    Потому что для моего случая 100Mb/s*0,001/8=12,5kB

    Дефолтный размер окна я узнал так:

    Код (Text):
    1. push    offset SizeSndByfferSize
    2. push    offset SndByfferSize
    3. push    SO_SNDBUF
    4. push    SOL_SOCKET
    5. push    hSocket
    6. call    getsockopt
    и он равен по крайней мере для моей Windows XP Alternative SP3 2000h

    Выставил я то что по рассчетам

    Код (Text):
    1. push    offset SizeSndByfferSize
    2. push    offset SndByfferSize
    3. push    SO_SNDBUF
    4. push    SOL_SOCKET
    5. push    hSocket
    6. call    setsockopt
    Удивительный результат!
    Скорость таже...
    :)

    Тогда взял да на абум забацал окно в 1MB, И СВЕРШИЛОСЬ, 9,5MB/s (не 12,5 но тоже не плохо)
    Так вот опять незадача, када сервер на XP, качаю файл на Server 2003 скорость 9,5MB/s,
    когда сервер на 2003 качаю на XP скорость опять 350 кБ/с.


    Так вот по какой же формуле высчитывать размер TCP окна, и почему на Windows Server 2003 изменение окна не дало результатов???
    Информации в сети я чтото не нашел...
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    skyproc
    Это число имеет малое отношение к реалиям.

    Из теории СМО и очередей мы знаем что скорость определяется наиболее медленой операцией.

    Так как самая медленная операция это обработка прерывания или переключения в защищенный режим. То их надо свести к мнимому.
    Отсюда скорость интерфейса/"число прерываний". Число прерываний выбираем как нравится. Я бы подогнал под число прерываний таймера 62. Теоретически можно и 1000 взять. Но такая большая дискретность ни к чему хорошему не приведет. Так что от 30-100 мне кажется оптимальным вариантом.


    Напоминает мне это нашу сетку когда качали с FTP. Но суть была такая если сервер коннектился к клиенту то скорость была низкая. А вот если клиент подсоединялся к серверу и сервер начинал отдавать по этому же соединению данные то скорость была 10-11МБайт/с.
     
  3. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Pavia объясни подробней о чём вот здесь идет речь???

    Так как самая медленная операция это обработка прерывания или переключения в защищенный режим. То их надо свести к мнимому.
    Отсюда скорость интерфейса/"число прерываний". Число прерываний выбираем как нравится. Я бы подогнал под число прерываний таймера 62. Теоретически можно и 1000 взять. Но такая большая дискретность ни к чему хорошему не приведет. Так что от 30-100 мне кажется оптимальным вариантом.
     
  4. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Да кстати както читал статьпро прорамера графических движков что ли, так он использовал какую то прогу чтобы смотреть какие API сколько времени занимают
    Хм было бы полезно...
     
  5. bendme

    bendme New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2009
    Сообщения:
    179
    Немного оффтоп: http://phrack.org/issues.html?issue=66&id=9#article - статья про использование TCP окна с нулевым размером и ошибки в реализации таймеров в TCP для проведения DOS-атак. Правда на английском.
     
  6. skyproc

    skyproc New Member

    Публикаций:
    0
    Регистрация:
    4 май 2007
    Сообщения:
    217
    Вижу придется выучить английский
    :)