Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ под Linux
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.53/19: Рейтинг темы: голосов - 19, средняя оценка - 4.53
pomkalk
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
1

Как правильно выбрать размер буфера

07.08.2011, 01:46. Просмотров 3429. Ответов 12
Метки нет (Все метки)

Здравствуйте! Подскажите, как правильно выбрать размер буфера, например в сокетах, какой размер выбрать, или копируя файл средствами FILE* - т.е. Все что касается выбора размера буфера!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.08.2011, 01:46
Ответы с готовыми решениями:

Как правильно выбрать размер кластера NTFS
Доброго времени! Собственно к делу: подключили мне HDD на 2Tb на котором будут...

Как правильно выбрать размер локального типа-массива
Преподаватель задал вопрос, ответить надо в строгой форме, а у меня с собой нет...

Микроконтроллер от B&R, как получить размер буфера
Программируется микроконтроллер на нём пишется сетевой обмен(Сервер) TCP язык...

Как изменить размер окна, а не только буфера
HANDLE out_handle = GetStdHandle(STD_OUTPUT_HANDLE); COORD crd = {18, 13};...

размер буфера
принимаю с imap сервера ответ, в массив byte; и ответ добивает пустыми...

12
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
07.08.2011, 01:49 2
поясните примером
0
pomkalk
365 / 247 / 24
Регистрация: 03.04.2011
Сообщений: 558
Записей в блоге: 1
07.08.2011, 02:01  [ТС] 3
Мм..например копирование файла
C++
1
2
3
4
5
6
7
8
FILE* t,s;
char buf[?];
s = fopen("file","rb");
t = fopen("file2","wb");
fread(buf,sizeof(char)sizeof(buf),s);
fwrite(buf,sizeof(char),sizeof(buf),t);
fclose(t);
fclose(f);
Корявый пример, но смысл думаю понятен! В принцепи меня интересует именно при сокетах, так как там почти одно и тоже - так вот какой размер буфера выбрать, что бы была максимальная производительность, да много памяти не ел))
0
alex_x_x
бжни
2455 / 1661 / 134
Регистрация: 14.05.2009
Сообщений: 7,162
07.08.2011, 02:27 4
в <cstdio> или stdio.h объявлена BUFSIZ, попробуйте ее
1
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
15.08.2011, 14:14 5
Цитата Сообщение от pomkalk Посмотреть сообщение
В принцепи меня интересует именно при сокетах, так как там почти одно и тоже - так вот какой размер буфера выбрать, что бы была максимальная производительность, да много памяти не ел))
Вообще, зависит от характера вышележащего протокола, но в общем случае размер_буфера = 2 * задержка(латентность) * ширина_канала будет близко к оптимальной. Если хочется большой точности, то вместо "задержка * 2" берите RTT. А вообще не парьтесь, можно считать что грамотный админ уже настроил систему оптимально, или вынесите эти размеры в настройки.
1
odip
Эксперт С++
7164 / 3222 / 77
Регистрация: 17.06.2009
Сообщений: 14,160
16.08.2011, 11:00 6
А вообще не парьтесь, можно считать что грамотный админ уже настроил систему оптимально
То есть грамотный админ прописал размер буфера во всех программах ?
О-О-О!!!
0
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
16.08.2011, 11:23 7
Цитата Сообщение от odip Посмотреть сообщение
То есть грамотный админ прописал размер буфера во всех программах ?
во всех и сразу ни выйдет, а настроить более-менее оптимальный дефолт или просто включить авто-тюнинг вполне можно. Причем практически все сервера ориентированные на bulk трафик (http/ftp/...) таки позволяют администратору настраивать изначальный размер tcp окна.
0
odip
Эксперт С++
7164 / 3222 / 77
Регистрация: 17.06.2009
Сообщений: 14,160
16.08.2011, 11:26 8
Причем практически все сервера ориентированные на bulk трафик (http/ftp/...) таки позволяют администратору настраивать изначальный размер tcp окна.
Дык это сервера, а тут клиентская программа
0
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
16.08.2011, 12:01 9
Цитата Сообщение от odip Посмотреть сообщение
Дык это сервера, а тут клиентская программа
Во первых, с чего вы это взяли? а во вторых, например у меня wget вполне себе режет окно под указанную полосу. А в третьих я не вижу особого смысла делать такие настройки в клиентском софте если речь не идет о чем-то "эксклюзивном", т.е. требующем каких-то углубленных знаний для тюнинга, т.к. пользователь не знает и знать не хочет кто такое тцп окно. И повторюсь, ядерный авто-тюнинг (tcp_moderate_rcvbuf) вполне себе прилично работает в большинстве ситуаций.
0
odip
Эксперт С++
7164 / 3222 / 77
Регистрация: 17.06.2009
Сообщений: 14,160
16.08.2011, 15:36 10
В данном случае речь идет не о настройке ядра, а о банальном размере буфера в программе

Добавлено через 4 минуты
И повторюсь, ядерный авто-тюнинг (tcp_moderate_rcvbuf) вполне себе прилично работает в большинстве ситуаций.
Работает, но далеко не всегда хорошо
Сейчас пошли очень интересные каналы - когда пропускная способность очень большая, а время туда-сюда не очень маленькое
Например качаем большой файл через магистральный канал с другого континента
Обычный TCP не справляется
Да и размер окна стандартного TCP тоже ограничен - в 64K-1 если правильно помню
В результате пишутся новые RFС для TCP как раз для таких каналов
Ну и реализации разумеется появляются в FreeBSD, Linux
0
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
16.08.2011, 16:26 11
Цитата Сообщение от odip Посмотреть сообщение
В данном случае речь идет не о настройке ядра, а о банальном размере буфера в программе
Ну извините, я как-то не подумал что ТС спрашивает о размере буфера для recv()/send()
Цитата Сообщение от odip Посмотреть сообщение
В результате пишутся новые RFС для TCP как раз для таких каналов
Ну и реализации разумеется появляются в FreeBSD, Linux
Какие такие rfc??? Упомянутый вами лимит размера окна научились обходить где-то в начале 90х, гуглить некогда, но думаю WSOPT будет хорошим ключевым словом.
К слову, у линукса и фри в tcp стеке не так много отличий т.к. у них общий предок, единственный не bsdi стек который я видел это cisco.
0
odip
Эксперт С++
7164 / 3222 / 77
Регистрация: 17.06.2009
Сообщений: 14,160
17.08.2011, 10:02 12
К слову, у линукса и фри в tcp стеке не так много отличий
Если в смысле использования то отличий быть не должно
А вот в смысле реализации - могу поспорить что реализации отличаются кардинально

Добавлено через 41 секунду
Ну извините, я как-то не подумал что ТС спрашивает о размере буфера для recv()/send()
Это в первом посту написано
0
g_u_e_s_t
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
17.08.2011, 10:24 13
Цитата Сообщение от odip Посмотреть сообщение
А вот в смысле реализации - могу поспорить что реализации отличаются кардинально
Можете просто рассказать, мне реально интересно. И пожалуйста, про новые RFC.

Цитата Сообщение от odip Посмотреть сообщение
Это в первом посту написано
Я там вижу "буфер сокета" вы понимаете это как 3й параметр send, я как 4й у setsockopt(,,SO_RCVBUF,,), ну и Бог с ним)
0
17.08.2011, 10:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2011, 10:24

Размер буфера у wsprintf
Здравствуйте ув. форумчане! Есть такой код: invoke wsprintfA, buf,...

WinInet и размер буфера
Начал недавно изучать WinInet (да и С++ в целом конечно). И назрел такой вот...

Передать размер буфера
strcpy_s(Name, sizeof Name, newName); // либо же strcpy_s(Name, Name,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru