#1
|
|||
|
|||
Низкая скорость отправки большого количества мелких файлов
Alexey Korotkov написал(а) к All в Feb 16 23:29:30 по местному времени:
Привет All! Проблема: медленно передаются радиусом мелкие файлы. Если взять binkd и через него залить файлы на radius - то скорость исчисляется сотнями файлов в секунду. Если взять radius и через него заливать файлы на radius - то получается в среднем около 5-7 файлов в секунду. Если свернуть окно radius-а и при этом удачно сойдутся звезды, то может ускориться до 10-20 файлов/сек. Вопрос: что такого умеет binkd, чего не умеет радиус? Как заставить радиус работать также быстро, как binkd ? (radius<=>radius). На досуге пытался найти в исходниках что же тормозит процесс отправки, и нашел, что происходит задержка около 200 мс при вызове WSAGetOverlappedResult. Пошел в интернет и прочитал про параметр реестра TcpAckFrequency (НKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\{интерфейс}). Попробовал - помогло. Но этот параметр нужно менять как минимум на стороне, на которую передаются файлы, чего делать крайне не хотелось бы. Тем более, что binkd работает без проблем и без изменения сетевых настроек ОС. Хотелось бы выставить какой-нибудь флаг/ограничение, и чтобы стало все быстро и красиво. Возможно такое? Radius 4.010/январь 2005, binkd-mingw/1.0.1/w32, виртуалки win2003. Alexey --- GoldED+/W32 1.1.5-021109 |
#2
|
|||
|
|||
Низкая скорость отправки большого количества мелких файлов
Vladimir Bakhvaloff написал(а) к Alexey Korotkov в Feb 16 00:10:41 по местному времени:
А чегой-та у нас гpаф Korotkov-Рымникский все жpёт?.. Отвечая на письмо Alexey Korotkov => All [Вс 21 Фев 16]: AK> Radius 4.010/январь 2005, binkd-mingw/1.0.1/w32, виртуалки win2003. Для начала - не мучать виртуалки... Для продолжения - взять Тау по-новее... С выражением глубокого почтения - Vladimir... > ------------------------------------------------------------ Windows 7 Ultimate x86 [version 6.1.7601] Service Pack 1 Taurus v.5.114.2013.19/Autumn/FastMM 4.991/DEBUG --- System uptime is: 11:05:15.700 (max. - 27 day(s) 6:38:31.123) |
#3
|
|||
|
|||
Низкая скорость отправки большого количества мелких файлов
Vladimir Bakhvaloff написал(а) к Alexey Korotkov в Feb 16 22:52:55 по местному времени:
О, Благоpодная Дама Alexey!!! Или я опять пива пЕpепил?.. Отвечая на письмо Alexey Korotkov => Vladimir Bakhvaloff [Вт 23 Фев 16]: VB>> Вот сколько ни пытался повторить, ну ни разу такого не VB>> было... :-( AK> похоже что валится тот экземпляр, который отправляет. VB>> Ну, попробуй взять VB>> http://bakhvaloff.ru/Download/Taurus/Tau.160223.1842.7z VB>> В каталоге WODebug - без дебаговой информации, должно жить VB>> полегче... AK> Даже с tcpackfrequency=1 ^^^^^^^^^^^^^^^ А что это такое и с чем его едят?.. AK> что-то затыкается как будто этого параметра AK> нет. Для сравнения: Чуток тюнингованный радиус (такая же версия отдает AK> файлы) AK> 23-Feb-2016 19:53:46 CONNECT To 192.168.0.212 #24554 (1:2/3) AK> 23-Feb-2016 19:53:51 Disconnect from 192.168.0.212 - Complete (1:2/3) AK> IN: 900 (11,700b) OUT: 0 (0b) AK> Данный таурус: AK> 23-Feb-2016 20:21:09 CONNECT To 192.168.0.212 #24554 (1:2/3) AK> 23-Feb-2016 20:22:20 Disconnect from 192.168.0.212 - Complete (1:2/3) AK> IN: 900 (11,700b) OUT: 0 (0b) Лучше расскажи про "чуток тюнингованный радиус"... VB>> Сомневаюсь, что такой "ликбез" тебе кто-то сможет провести... VB>> :-D VB>> Над тем, что есть сейчас работали, как минимум 6 человек... VB>> Причём с совершенно разными подходами... AK> Оптимистичненько.... :-( Зато реальненько... AK> Пока что с помощью тюнинга реестра добился быстрой отдачи на AK> сторону, где внесены изменения в реестр. Не густо, но хоть что-то. [ skipped ] AK> файлов скорость падает до 22-26 файлов/сек) Может подскажете что может AK> таким образом (см. на форму графика загрузки) тормозить процесс? Рассчёты общих и/или частных размеров, времени, сжатия, вывод графики - что угодно... Ладно... Пойду вешаться, Alexey... ;) > ------------------------------------------------------------ Windows 7 Ultimate x86 [version 6.1.7601] Service Pack 1 Taurus v.5.114.2013.19/Winter/FastMM 4.991/DEBUG --- System uptime is: 3:58:31.225 (max. - 27 day(s) 6:38:31.123) |
#4
|
|||
|
|||
Низкая скорость отправки большого количества мелких файлов
Alexey Korotkov написал(а) к Vladimir Bakhvaloff в Feb 16 23:30:42 по местному времени:
Привет Vladimir! 23-Фев-2016 22:52, Vladimir Bakhvaloff -> Alexey Korotkov: AK>> Даже с tcpackfrequency=1 VB> ^^^^^^^^^^^^^^^ VB> А что это такое и с чем его едят?.. Это ключ реестра, гугол расскажет в деталях. в кратце - система не будет ждать таймаута перед отправкой пакета подтверждения tcp-сессии (ack), то может ускорить обмен данными если удаленная система ждет ack чтобы продолжить передавать данные. актуально для ситуаций когда происходит обмен мелкими пакетами. как и везде, лекарство может навредить в некоторых случаях. VB> Лучше расскажи про "чуток тюнингованный радиус"... Я выкинул сканирование аутбаунда (периодическое и после окончания сессии) + убрал задерку при сканировании (вроде) файлбоксов. Зачем-то туда вставили sleep после сканирования (findnext) каждого файла, в результате чего получалась задежка при коннекте и в некоторых случаях она в итоге превышала таймаут установки сессии с логичным последующим ее (сессии) разрывом. Поделка для себя. AK>> файлов скорость падает до 22-26 файлов/сек) Может подскажете что AK>> может таким образом (см. на форму графика загрузки) тормозить AK>> процесс? VB> Рассчёты общих и/или частных размеров, времени, сжатия, вывод VB> графики - что угодно... Это все линейная зависимость и не требует таких ресурсов. Alexey --- GoldED+/W32 1.1.5-021109 |
#5
|
|||
|
|||
Низкая скорость отправки большого количества мелких файлов
Vladimir Bakhvaloff написал(а) к Alexey Korotkov в Feb 16 23:58:44 по местному времени:
Пpивет, Alexey. Отвечая на письмо Alexey Korotkov => Vladimir Bakhvaloff [Вт 23 Фев 16]: AK>>> Даже с tcpackfrequency=1 VB>> ^^^^^^^^^^^^^^^ VB>> А что это такое и с чем его едят?.. AK> Это ключ реестра, гугол расскажет в деталях. в кратце - система не Тьфу, шаманские заклинания, никому практически ненужные... VB>> Лучше расскажи про "чуток тюнингованный радиус"... [ skipped ] AK> Поделка для себя. Вот никому её и не давай... ;-) AK>>> может таким образом (см. на форму графика загрузки) тормозить AK>>> процесс? VB>> Рассчёты общих и/или частных размеров, времени, сжатия, вывод VB>> графики - что угодно... AK> Это все линейная зависимость и не требует таких ресурсов. Значит, требует... ... TrapGate нашёл?.. Попробовал?.. Ладно... Пойду вешаться, Alexey... ;) > ------------------------------------------------------------ Windows 7 Ultimate x86 [version 6.1.7601] Service Pack 1 Taurus v.5.114.2013.19/Winter/FastMM 4.991/DEBUG --- System uptime is: 5:04:19.849 (max. - 27 day(s) 6:38:31.123) |
#6
|
|||
|
|||
Низкая скорость отправки большого количества мелких файлов
Alexey Korotkov написал(а) к Vladimir Bakhvaloff в Feb 16 02:27:06 по местному времени:
Привет Vladimir! 23-Фев-2016 23:58, Vladimir Bakhvaloff -> Alexey Korotkov: VB>>> Рассчёты общих и/или частных размеров, времени, сжатия, VB>>> вывод графики - что угодно... AK>> Это все линейная зависимость и не требует таких ресурсов. VB> Значит, требует... Нет, не требует ;-) Нашел проблемый участок. Проблема не в графике, а в логике. Там получается цикл в цикле по набору имен файлов, и при общем количестве файлов N получается количество сравнений для каждого файла y=i(N-i) где i изменяется от 1 до N. если нарисовать график y(i), то получится перевернутая парабола с максимумом y=NN/4 при i=N/2, все практически как на графике загруки процессора. При N=100 это еще не так критично, получится до 2500 сравнений на каждый файл, но при N=10000 все становится совсем иначе... Осталось понять назначение используемых в этом цикле списков/объектов и решить что делать дальше - толи обрезать списки, толи сортировать. VB> TrapGate нашёл?.. Попробовал?.. Есть личные нюансы, нужен именно радиус. Alexey --- GoldED+/W32 1.1.5-021109 |
#7
|
|||
|
|||
Низкая скорость отправки большого количества мелких файлов
Vladimir Bakhvaloff написал(а) к Alexey Korotkov в Feb 16 04:10:54 по местному времени:
Рад видеть тебя, Alexey, без петли на шее!.. Отвечая на письмо Alexey Korotkov => Vladimir Bakhvaloff [Ср 24 Фев 16]: AK> Нашел проблемый участок. Проблема не в графике, а в логике. Там AK> получается цикл в цикле по набору имен файлов, и при общем количестве AK> файлов N получается количество сравнений для каждого файла y=i*(N-i) AK> где i изменяется от 1 до N. если нарисовать график y(i), то получится AK> перевернутая парабола с максимумом y=N*N/4 при i=N/2, все практически AK> как на графике загруки процессора. При N=100 это еще не так критично, AK> получится до 2500 сравнений на каждый файл, но при N=10000 все AK> становится совсем иначе... Осталось понять назначение используемых в AK> этом цикле списков/объектов и решить что делать дальше - толи обрезать AK> списки, толи сортировать. Пальцем тыкни в процедуру, позырю, попробую поправить... ...and beautiful quadrosonic voice said: "Bye, Alexey!.." > ------------------------------------------------------------ Windows 7 Ultimate x86 [version 6.1.7601] Service Pack 1 Taurus v.5.114.2013.19/Winter/FastMM 4.991/DEBUG --- System uptime is: 9:16:29.891 (max. - 27 day(s) 6:38:31.123) |
#8
|
|||
|
|||
Низкая скорость отправки большого количества мелких файлов
Alexey Korotkov написал(а) к Vladimir Bakhvaloff в Feb 16 07:28:24 по местному времени:
Привет Vladimir! 24-Фев-2016 04:10, Vladimir Bakhvaloff -> Alexey Korotkov: AK>> Нашел проблемый участок. Проблема не в графике, а в логике. Там AK>> получается цикл в цикле по набору имен файлов, и при общем VB> Пальцем тыкни в процедуру, позырю, попробую поправить... в ходе выполнения SD.OutFiles.Count уменьшается с N-1 до 0, а SD.SentFiles.Found увеличивается с 0 до N-1 MlrThr.pas procedure TMailerThread.GetNextFile(P: TBaseProtocol); ... for i := SD.OutFiles.Count - 1 downto 0 do begin f := SD.OutFiles[i]; if SD.SentFiles.Found(f) then begin SD.OutFiles.AtFree(i); end; end; SD: TMailerThreadInitData; ... OutFiles: TOutFileColl; -> определен в Outbound.pas Outbound.pas: function TOutFileColl.Found; var i: integer; begin Result := False; for i := 0 to Count - 1 do begin if (TOutFile(Items[i]).Name = o.Name) or (TOutFile(Items[i]).Orig = o.Name) then begin Result := True; break; end; end; end; Alexey --- GoldED+/W32 1.1.5-021109 |
#9
|
|||
|
|||
Низкая скорость отправки большого количества мелких файлов
Vladimir Bakhvaloff написал(а) к Alexey Korotkov в Feb 16 14:08:44 по местному времени:
Удачной охоты, Alexey! (Кстати, а как пpошла пpедыдущая?) Отвечая на письмо Alexey Korotkov => Vladimir Bakhvaloff [Ср 24 Фев 16]: AK> в ходе выполнения SD.OutFiles.Count уменьшается с N-1 до 0, а AK> SD.SentFiles.Found увеличивается с 0 до N-1 ... AK> MlrThr.pas AK> procedure TMailerThread.GetNextFile(P: TBaseProtocol); ... AK> Outbound.pas: AK> function TOutFileColl.Found; Ох-х-х... "Порадую" тебя: я там уже с десяток раз пытался перековырять что одну, что другую... Хорошо ещё, что предыдущие копии оставались... :-D ... Попробую на днях ещё раз воспринять и упростить... ... Кстати, а последний Аргус 3.210 пробовал поиздевать?.. Ой-ой-ой... Извени, Alexey, но дpаконах я непеpеношу... > ------------------------------------------------------------ Windows 7 Ultimate x86 [version 6.1.7601] Service Pack 1 Taurus v.5.114.2013.19/Winter/FastMM 4.991/DEBUG --- System uptime is: 19:10:10.806 (max. - 27 day(s) 6:38:31.123) |
#10
|
|||
|
|||
Низкая скорость отправки большого количества мелких файлов
Alexey Korotkov написал(а) к Vladimir Bakhvaloff в Feb 16 00:05:10 по местному времени:
Привет Vladimir! 24-Фев-2016 14:08, Vladimir Bakhvaloff -> Alexey Korotkov: AK>> в ходе выполнения SD.OutFiles.Count уменьшается с N-1 до 0, а AK>> SD.SentFiles.Found увеличивается с 0 до N-1 VB> "Порадую" тебя: я там уже с десяток раз пытался перековырять что VB> одну, что другую... Да в общем-то ничего сложного нет, главное не делать эти списки большими. Поскольку SD.SentFiles особо не нужен в ходе выполнения программы, то можно при успехе if SD.SentFiles.Found(f) удалять найденные элементы, например модифицировать TOutFileColl.found задав параметр по умолчанию, сигнализирующий нужно ли при нахождении нужно сделать с этим элементом следующую цепочку действий Enter; AtFree(i); Leave; Ну и вызывать поиск с параметром для удаления. Или аналогичную работу как-то вынести в MlrThr. Годный вариант? (насчет AtFree больше беспокоюсь). Вот и результат при максимальном ускорении (секунду на хендшейк надо отбросить еще): 24-Feb-2016 19:52:14 CONNECT To 192.168.0.212 #24554 (1:2/3) 24-Feb-2016 19:52:20 Disconnect from 192.168.0.212 - Complete (1:2/3) IN: 4000 (52,000b) OUT: 0 (0b) Тут другая проблема вылезла. После ускорения сетевого обмена (через модификацию реестра) проявился баг при передаче файлов на шифрованных сеансах связи (в т.ч. на радиусе от 2005 года) в виде разрыва связи. 25-Feb-2016 22:55:57 CONNECT From 192.168.0.75 #24554 25-Feb-2016 22:55:59 Disconnect from 192.168.0.75 - Aborted (222:111/1.2) IN: 0 (0b) OUT: 272 (3,549b) 25-Feb-2016 22:56:29 CONNECT From 192.168.0.75 #24554 25-Feb-2016 22:56:32 Disconnect from 192.168.0.75 - Complete (222:111/1.2) IN: 0 (0b) OUT: 728 (9,464b) 25-Feb-2016 22:57:16 CONNECT From 192.168.0.75 #24554 25-Feb-2016 22:57:20 Disconnect from 192.168.0.75 - Aborted (222:111/1.2) IN: 0 (0b) OUT: 321 (4,186b) 25-Feb-2016 22:58:36 CONNECT From 192.168.0.75 #24554 25-Feb-2016 23:00:05 Disconnect from 192.168.0.75 - Complete (222:111/1.2) IN: 0 (0b) OUT: 2679 (34,827b) 25-Feb-2016 23:00:29 CONNECT From 192.168.0.75 #24554 25-Feb-2016 23:01:57 Disconnect from 192.168.0.75 - Aborted (222:111/1.2) IN: 0 (0b) OUT: 2298 (29,887b) 25-Feb-2016 23:01:57 Sending 'D:\fido\box\02\366' (13b) 25-Feb-2016 23:01:57 Sent/delete '366' 25-Feb-2016 23:01:57 Sending 'D:\fido\box\02\367' (13b) * 25-Feb-2016 23:01:57 Unrec: MGOT "367 13 1456430409" st=Transfer tx=Wait_MGOT rx=WaitEOB blk=НdrНi * 25-Feb-2016 23:01:57 Protocol aborted while sending '367' 25-Feb-2016 23:01:57 Disconnect reason is fatal error * 25-Feb-2016 23:01:57 Session aborted 25-Feb-2016 23:01:57 End С другой стороны: 25-Feb-2016 23:01:56 Receiving '367' (13b) 25-Feb-2016 23:01:56 Received 'C:\Fido\BOX\367' 25-Feb-2016 23:01:57 Aborting due to carrier loss * 25-Feb-2016 23:01:57 Session aborted 25-Feb-2016 23:01:57 End Если реестр не патчить, или не использовать шифрованные соединения, то баг вроде как не проявляется, проверил на 100тыс файлах. И такое чувство, что если положить очень много файлов на отправку, то каждый последующий разрыв сессии будет происходить через бОльшее число успешно переданных в течение сессии файлов. Alexey --- GoldED+/W32 1.1.5-021109 |