Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2016, 20:16   #1
dimoni414
Пользователь
 
Регистрация: 20.09.2014
Сообщений: 13
Вопрос Сокеты. Разделяемая память. Резкое падение скорости при увеличении размера передаваемого файла.

Долго думал, в какую тему написать этот вопрос. Написал сюда.
В общем, балуюсь с сокетами и разделяемой памятью, передавая между клиентом и сервером большие файлы.
И я обратил внимание на очень интересную закономерность:
Как только файл превышает ~580MБ Скорость передачи разко падает(происходит резкий скачок).
На разделяемой памяти удалось поймать точное мето:
  • 576M - 498 мс SH_SIZE = 32768 KБ
  • 576M - 532 мс
  • 576M - 541 мс
  • 577M - 808 мс
  • 577M - 758 мс
  • 577M - 818 мс
У меня есть мысли, что грешит диск, то есть мы начинаем упираться в скорость переключения диска между цилиндрами, а не в пропускную способность шины. Или может это ядро Linux...
1) Какие мысли есть у вас на этот счет?
Данные:
  • 100M - 118 мс
  • 100M - 94 мс
  • 100M - 105 мс
  • 500M - 427 мс
  • 500M - 451 мс
  • 500M - 398 мс
  • 625M - 1190 мс
  • 625M - 1178 мс
  • 625M - 1132 мс
  • 750M - 2413 мс
  • 750M - 3337 мс
  • 750M - 2511 мс
  • 1G - 8673 мс
  • 1G - 9704 мс
  • 1G - 10147 мс
  • 2G - 26851 мс
  • 2G - 31320 мс
  • 2G - 25229 мс

Также проводил эксперементы с размером разделяемой памяти => скорости передачи. И к моему удивлению, скорость не зависит от размера блока разделяемой памяти(64 МБ - 64 КБ). Для меня это оказалось странным, так как я думал, что чем меньше размер, тем больше будет переключений между семафорами => увеличится время передачи.
2)Почему так может быть? Прав я или не прав?

Все действия производились на одном компьютере. Ubuntu.

Последний раз редактировалось dimoni414; 18.05.2016 в 20:29.
dimoni414 вне форума Ответить с цитированием
Старый 19.05.2016, 07:41   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Симафоп до 0.1 милиона в секунду успевает.

Перемещение головки между "дорожками" компенсирует кэш в самом диске. SATA 3 в теории выдаёт 600 мбайт/ с. Скорость перемещения головки из центра к краю 10-20 мс.
За товремя пока головка скачет в этот кэш успеет попасть 600*0.020=12 мб.

При линейной записи вы скорость головки просто незаметите. Головка движется радиально со скоростью R/20 мс, а сам диск 90 оборотов/c.

Есть ещё и кэш ОС. Под кэш диска используется вся доступная память. Утилиты памяти просто не показывают этот факт. Как только ваша программа её забивает информация начинает сбрасываться на диск.
А реальная скорость диска у вас не 600 мбтс а 100-150 мбайт/с. Вот ваша прога и начинает тормозить.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 19.05.2016, 08:08   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Я "за" кэш.
Это легко проверить вызовом syncfs() - если скорость станет равномерной, значит кэш.
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Предача файла. Разделяемая память. Заполнение при считывании dimoni414 Общие вопросы C/C++ 2 18.05.2016 18:48
2 проги на С++, потоки и разделяемая память. Salec Фриланс 1 12.06.2013 18:28
Разделяемая память в unix на C Cannibal Помощь студентам 0 07.06.2013 08:28
Разделяемая память Spb Общие вопросы C/C++ 0 25.12.2011 14:49
Speed drop падение скорости Ivn Софт 1 12.02.2009 07:17