Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > Как тестировать? |
Автор: konshyn 10.3.2015, 15:42 |
Есть сетевая прилага. Ее нужно протестировать на нагрузку. Понять, почему ограничивается скорость - ethernet-платой или, может, записью информации на диск. Как вообще проводят тестирование (не функциональное) сетевых утилит? |
Автор: tzirechnoy 10.3.2015, 18:30 |
1) Выясняют, почему им неподходит netperf. 2) Пытаются найти что-нибудь такое жэ, но другое. |
Автор: bsa 13.3.2015, 11:20 | ||||||
А что не так? Это все имеет общее название "оптимизация". Для начала включи оптимизацию компиляции (попробуй каждый вариант: -Os, -O2, -O3), если не поможет, то тогда надо с помощью профилеровщика найти узкое место и как-то его ускорить. Возможно, придется применить openmp, opencl или даже ассемблер. |
Автор: xvr 13.3.2015, 15:20 | ||||
Как это не странно, вопрос не совсем бредовый ![]()
![]() |
Автор: konshyn 15.3.2015, 22:38 | ||||||||||
я читал про прямой доступ к кэшу http://rus-linux.net/lib.php?name=/MyLDP/hard/memory/memory-6-9.html Как правильно сказал xvr, у Intel есть такая технология, чего я, к слову, не заметил, что речь идет только про intel, а не все современные процессоры.
почему нет, если это не идет в убыток компании, проекту или еще чему-нибудь? да и тем более, если можно это сделать и проверить, почему бы это не попробовать, если хочется? Но не об этом спор:) Да, про него читал, спасибо:)
Это понятно. Но это то, на что я не совсем могу влиять. Я могу только компилятору помочь. А вот как помочь, вот об этом и спрашиваю, а не о самих алгоритмах:) Чтобы было понятнее, вот примеры: Ключевое слово https://ru.wikipedia.org/wiki/Restrict или что-то такое
Вот тут выражение
будет при каждой итерации высчитывать или только один раз? Если при каждой, то можно ведь сделать так:
Вот о каких-то таких практиках имел ввиду ![]() Есть такая организация CERT, где на у них на сайте собраны стандарты по безопасному программированию и книги есть. Вот и подумал, что может есть какой-то ресурс(ы), где что-нибудь собирают подобное для лучшей оптимизации под определенный компилятор. Конечно, меня интересует gcc, но было бы интересно посмотреть и на другие:) |
Автор: baldina 16.3.2015, 00:38 | ||
в таких простых местах и вручную сделать хорошо - понятнее будет, и компилятор сообразит. сообразил или нет важно только во время оптимизации (для ее начала нужно иметь повод - недостаточно быстрая работа и результаты профайлера), ну или академически (тогда смотрим результирующий асм) про intel - на сайте intel |
Автор: tzirechnoy 16.3.2015, 02:14 | ||||||
Здесь просто слишком много вопросов, некоторые из них показывают столь большое расхождение представлений с типичными представлениями -- что ответ на каждый будет довольно большой. Я не знаю, с чего начать отвечать, и вряд ли когда-нибудь соберусь. Добавлено через 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, оптимизацыя хранения и выборки данных, вот это всё. Вопросы правильного заполнения конвеера (нужными командами и малым количеством нужных ветвлений) -- идут чаще на третьем месте. |
Автор: tzirechnoy 16.3.2015, 02:31 | ||
Стрэсс-тэстами, чаще всего. А на боевую систему -- есть top, iotop, несколько других и системы мониторинга (nagios/zabbix/etc), которые рисуют графики и шлют сообщения при перегрузках. |
Автор: tzirechnoy 16.3.2015, 02:46 | ||
Правильная -- в оперативную память (ну, возможно, сейчас в L3 кэш, в общем, именно туда, куда PCIe контроллер пишэт), херовые -- сразу в кэш. Поскольку правильные работает через busmaster или другой DMA, а херовые -- требуют чтобы процэссор читал данные из них по одному слову в каком-нибудь своём исполняющемся потоке. |
Автор: xvr 16.3.2015, 16:36 | ||
Под архитектуру есть - http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf |
Автор: korol 4.3.2016, 13:09 |
Модератор: Сообщение скрыто. |