Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как тестировать? 
:(
    Опции темы
konshyn
Дата 10.3.2015, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Есть сетевая прилага. Ее нужно протестировать на нагрузку. Понять, почему ограничивается скорость - ethernet-платой или, может, записью информации на диск.
Как вообще проводят тестирование (не функциональное) сетевых утилит?


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
tzirechnoy
Дата 10.3.2015, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



1) Выясняют, почему им неподходит netperf.
2) Пытаются найти что-нибудь такое жэ, но другое.
PM MAIL   Вверх
konshyn
Дата 11.3.2015, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(tzirechnoy @  10.3.2015,  18:30 Найти цитируемый пост)
1) Выясняют, почему им неподходит netperf.
2) Пытаются найти что-нибудь такое жэ, но другое. 

А как измеряют нагрузку на систему (загрузка ОП, загрузка процессора)?
Интересен еще такой факт, как узнать, куда записывается пакет сетевая карта - в оперативную память или сразу в кэш (для эффективного использования процессорного кэша)? 
Как узнать время обработки пакета? Как я понию, то только тесты, написанные вручную, или подойдут утилиты, которые измеряют время работы участка кода? Где-то видел такие, но не понимаю, как работают. Смотрят ли они только написанный пользователем код или считают еще системные вызовы? А что с динамической линковкой?

Добавлено через 6 минут и 14 секунд
И какие есть средства и/или методы, для увеличения производительности?


--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
bsa
Дата 13.3.2015, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Цитата(konshyn @  11.3.2015,  12:43 Найти цитируемый пост)
Интересен еще такой факт, как узнать, куда записывается пакет сетевая карта - в оперативную память или сразу в кэш (для эффективного использования процессорного кэша)?
вопрос бредовый. К кэшу процессора имеет доступ только сам процессор. Сетевая карта принимает данные в свою внутреннюю память, а потом по требованию выдает. Теоретически возможен вариант, когда сетевуха использует системную память для этого, но не думаю, что в обычных машинах это используется (ради экономии нескольких десятков центов геморроиться с синхронизацией?). Если сетевая карта хоть немного умная (не только PHY), то процессор она грузит по минимуму - ему остается только принимать/передавать готовые пакеты данных (преобразование и проверку целостности производит сама сетевуха, а когда данные готовы, то высылает сигнал процессору).
Цитата(konshyn @  11.3.2015,  12:43 Найти цитируемый пост)
Как узнать время обработки пакета? Как я понию, то только тесты, написанные вручную, или подойдут утилиты, которые измеряют время работы участка кода?
Если речь про твой код, то профилер тебе в помощь (man gprof).
Цитата(konshyn @  11.3.2015,  12:43 Найти цитируемый пост)
Где-то видел такие, но не понимаю, как работают. Смотрят ли они только написанный пользователем код или считают еще системные вызовы?
Профилеровщики считают разницу времени на входе и выходе из твоей функции.
Цитата(konshyn @  11.3.2015,  12:43 Найти цитируемый пост)
А что с динамической линковкой?
А что не так?
Цитата(konshyn @  11.3.2015,  12:43 Найти цитируемый пост)
И какие есть средства и/или методы, для увеличения производительности?
Это все имеет общее название "оптимизация". Для начала включи оптимизацию компиляции (попробуй каждый вариант: -Os, -O2, -O3), если не поможет, то тогда надо с помощью профилеровщика найти узкое место и как-то его ускорить. Возможно, придется применить openmp, opencl или даже ассемблер.
PM   Вверх
xvr
Дата 13.3.2015, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 6996
Регистрация: 28.8.2007
Где: Химки, Московская обл

Репутация: 20
Всего: 222



Цитата(bsa @  13.3.2015,  11:20 Найти цитируемый пост)
вопрос бредовый. К кэшу процессора имеет доступ только сам процессор.

Как это не странно, вопрос не совсем бредовый  smile У Intel есть технология DCA (Direct Cache Access) в группе Intel I/O Acceleration Technology, которая позволяет заливать данные с PCIe непосредственно в кэш:
Цитата

Direct Cache Access (DCA) allows a capable I/O device, such as a network controller, to place data directly into CPU cache, reducing cache misses and improving application response times.
Доступно только в серверных чипсетах, и никаких спеков не нее нет (только рекламные брошюры)  smile 


PM MAIL   Вверх
konshyn
Дата 15.3.2015, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 19.9.2013

Репутация: нет
Всего: нет



Цитата(bsa @  13.3.2015,  11:20 Найти цитируемый пост)
вопрос бредовый.

я читал про прямой доступ к кэшу здесь

Как правильно сказал xvr, у Intel есть такая технология, чего я, к слову, не заметил, что речь идет только про intel, а не все современные процессоры.

Цитата(bsa @  13.3.2015,  11:20 Найти цитируемый пост)
ради экономии нескольких десятков центов геморроиться с синхронизацией?

почему нет, если это не идет в убыток компании, проекту или еще чему-нибудь?
да и тем более, если можно это сделать и проверить, почему бы это не попробовать, если хочется?
Но не об этом спор:)



Цитата(bsa @  13.3.2015,  11:20 Найти цитируемый пост)
Если речь про твой код, то профилер тебе в помощь (man gprof).

Да, про него читал, спасибо:)


Цитата(bsa @  13.3.2015,  11:20 Найти цитируемый пост)
Это все имеет общее название "оптимизация". Для начала включи оптимизацию компиляции (попробуй каждый вариант: -Os, -O2, -O3),

Это понятно. Но это то, на что я не совсем могу влиять. Я могу только компилятору помочь. А вот как помочь, вот об этом и спрашиваю, а не о самих алгоритмах:)
Чтобы было понятнее, вот примеры:
Ключевое слово restrict
или что-то такое
Код

for (int i = 0; i < INF; i++)
    for (int j = 0; j < f(i) * something[i]; j += f(i))
        ...
 
Вот тут выражение 
Код

f(i) * something[i]
 
будет при каждой итерации высчитывать или только один раз?
Если при каждой, то можно ведь сделать так:
Код

for (int i = 0; i < INF; i++) {
    k = f(i) * something[i];
    for (int j = 0; j < k; j += f(i)) {
        ...
    }


Вот о каких-то таких практиках имел ввиду smile
Есть такая организация CERT, где на у них на сайте собраны стандарты по безопасному программированию и книги есть. Вот и подумал, что может есть какой-то ресурс(ы), где что-нибудь собирают подобное для лучшей оптимизации под определенный компилятор. Конечно, меня интересует gcc, но было бы интересно посмотреть и на другие:)



--------------------
«Потому что ценность акта действия в этой стране возрастает в несколько раз».
PM MAIL Skype   Вверх
baldina
Дата 16.3.2015, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 1
Всего: 101



Цитата(konshyn @  15.3.2015,  22:38 Найти цитируемый пост)
Вот тут выражение 
код C++
1:
f(i) * something[i]
 
будет при каждой итерации высчитывать или только один раз?
Если при каждой, то можно ведь сделать так:

в таких простых местах и вручную сделать хорошо - понятнее будет, и компилятор сообразит. сообразил или нет важно только во время оптимизации (для ее начала нужно иметь повод - недостаточно быстрая работа и результаты профайлера), ну или академически (тогда смотрим результирующий асм)

Цитата(konshyn @  15.3.2015,  22:38 Найти цитируемый пост)
для лучшей оптимизации под определенный компилятор

про intel - на сайте intel
PM MAIL   Вверх
tzirechnoy
Дата 16.3.2015, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Цитата
А как измеряют...


Здесь просто слишком много вопросов, некоторые из них показывают столь большое расхождение представлений с типичными представлениями -- что ответ на каждый будет довольно большой.

Я не знаю, с чего начать отвечать, и вряд ли когда-нибудь соберусь.

Добавлено через 3 минуты и 52 секунды
Цитата
Как узнать время обработки пакета?


Осцыллографом. Я серьёзен -- учитывая буфера карточки, все программные методы требуют слишком хорошэго понимания жэлеза (PCI/конкретная карточка/вот это всё), чтобы пытаться начать выяснять на них этот вопрос.

Впрочем, этот вопрос чаще всего интересует людей для HFT. для всего остального -- измеримого на соседней с испытуемой системе раундтрипа в 200мкс вполне достаточно, а интересует throughput, который ужэ вполне реально померить.

Добавлено через 14 минут и 37 секунд
Цитата
будет при каждой итерации высчитывать или только один раз?


Результат выполнения (включая побочные эффекты) должэн быть тот жэ, что и при вычислении при каждой итэрацыи.

Если f(i) -- какая-то достаточно простая функцыя без побочных эффектов (в частности, без записи глобальных переменных, да вроде дажэ и без чтения, хотя здесь я могу ошыбаться, и чтение переменных, не объявленных volatile допускается если там потом в цыкле тожэ всё вычислимо и не изменяет этой жэ переменной), которая определена в том жэ исходнике, что и этот цыкл или вообще является макросом, и something[i] -- не объявлен volatile и не изменяется в теле этого цыкла -- то компилятор можэт решыть, что можно и закэшыровать значение этого выражэния.

Шансов на это, впрочем, не много, и если ты считаешь, что k = f(i)*something[i] будет быстрее -- то лучшэ ставь так.

Впрочем, практика -- критэрий истины...

Да, первые проблемы в скорости, которые обычно надо решать -- алгоритмические. Т.е. O(n^2) где достаточно O(n*log(n)) или наоборот иницыализатор итэратора O(log(n)) занимает большэ, чем в среднем требуется для простого прохода O(n^2).

Потом -- cache locality, оптимизацыя хранения и выборки данных, вот это всё.

Вопросы правильного заполнения конвеера (нужными командами и малым количеством нужных ветвлений) -- идут чаще на третьем месте.
PM MAIL   Вверх
tzirechnoy
Дата 16.3.2015, 02:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Цитата
А как измеряют нагрузку на систему (загрузка ОП, загрузка процессора)?


Стрэсс-тэстами, чаще всего.

А на боевую систему -- есть top, iotop, несколько других и системы мониторинга (nagios/zabbix/etc), которые рисуют графики и шлют сообщения при перегрузках.
PM MAIL   Вверх
tzirechnoy
Дата 16.3.2015, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



Цитата
куда записывается пакет сетевая карта - в оперативную память или сразу в кэш 


Правильная -- в оперативную память (ну, возможно, сейчас в L3 кэш, в общем, именно туда, куда PCIe контроллер пишэт), херовые -- сразу в кэш.

Поскольку правильные работает через busmaster или другой DMA, а херовые -- требуют чтобы процэссор читал данные из них по одному слову в каком-нибудь своём исполняющемся потоке.
PM MAIL   Вверх
xvr
Дата 16.3.2015, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 6996
Регистрация: 28.8.2007
Где: Химки, Московская обл

Репутация: 20
Всего: 222



Цитата(konshyn @  15.3.2015,  22:38 Найти цитируемый пост)
где что-нибудь собирают подобное для лучшей оптимизации под определенный компилятор.

Под архитектуру есть - http://www.intel.com/content/dam/www/publi...tion-manual.pdf

PM MAIL   Вверх
korol
Дата 4.3.2016, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 4.3.2016

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
Google
  Дата 21.8.2019, 10:05 (ссылка)  





  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0962 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.