распределенная система: анализ затраченного "времени"

NataNata

Постановка: пусть у меня имеется система, которая на дюжине "клиентских" компьютерах считает некие микрозадачки. то есть, "клиентский" компьютер получает микрозадачу, обсчитывает ее и отсылает ответ, получает новую. есть 1 "серверный" компьютер, который раздает задачи "клиентским" компьютерам, собирает результаты и выдает некие отчеты.
Есть внешние факторы: "клиентские" компьютеры неодинаковы по производительности. По базовой производительности (камни разные) и по производительности во времени: на них сидят люди, что-то постоянно делают, работают антиспамы и антивирусы и т.д. Кроме того, число "клиентских" машин может меняться: кто-то завис, кто-то наоборот подключился к расчетам.
Вопрос: как оценить некую "производительность" этой системы при запуске определенной задачи, так, чтобы эта "производительность" не зависела от внешних факторов? Для примера: в качестве такой "производительности" может выступать число потраченных всеми вычислявшими процессорами операций с плавающей запятой, однако практически такую величину посчитать не удастся. Суммарное время, затраченное на вычислениями каждым из процессоров в качестве искомой величины выступать не может.
размышления, расспросы и гугл ничего не дали... 8(

durka82

А никак нельзя оценить трудоемкость микрозадачи при отдаче?
Ну или можно на каждом клиенте брать не время, а интегрировать по нему загрузку проца на микрозадаче?..

NataNata

нельзя, потому что микрозадачи - итерационные, причем число итераций заведомо неясно. да и хочется отследить эффекты прироста "производительности" не только в 10 раз, но на 10%.
Ну или можно на каждом клиенте брать не время, а интегрировать по нему загрузку проца на микрозадаче?..
камни могут быть разные на клиентских машинах.

durka82

нельзя, потому что микрозадачи - итерационные, причем число итераций заведомо неясно.
А почему бы тогда не считать итерации?
Они ведь по ресурсам бм равноценны?
камни могут быть разные на клиентских машинах.
Ввести рейтинг быстродействия машин.
Например по времени выполнения стандартного теста.

NataNata

А почему бы тогда не считать итерации?
Они ведь по ресурсам бм равноценны?
ну это я уже начну тогда вводить какие-то внешние условия, мол, если так, а если сяк...
хочется общий подход, когда нет условий, что итерации равноценны. потому что для другого вида расчетов они могут быть сильно неравноценны
Ввести рейтинг быстродействия машин.
Например по времени выполнения стандартного теста.
ну как-то оно неизящно получается. тем более, что сравнивать между собой камни intel-а и amd - это еще вопрос, как правильно сравнивать. в инете немеренная туча сравнений разных камней, черт знает какой тест предпочесть и кто прав

durka82

ну это я уже начну тогда вводить какие-то внешние условия, мол, если так, а если сяк...
В смысле?
хочется общий подход, когда нет условий, что итерации равноценны. потому что для другого вида расчетов они могут быть сильно неравноценны
Ну тогда надо привязываться к элементарным (процессорным? но тогда мб проблемы со всякими процессорными расширениями :( ) операциям.
ну как-то оно неизящно получается. тем более, что сравнивать между собой камни intel-а и amd - это еще вопрос, как правильно сравнивать. в инете немеренная туча сравнений разных камней, черт знает какой тест предпочесть и кто прав
А кто мешает взять свой тест?
Например тем же алгоритмом, которым считаются микрозадачи, посчитать маленький стандартный тест.
Соотв единицы измерения будут самые правильные.
Причем считать его лучше неоднократно при каждом удобном случае.
Если задачи сильно разные - сделать несколько таких тестов и гонять их циклически.
Собственно если ты хочешь что-то мерить - тебе нужна "линейка".
То, о чем я пишу - всего лишь процесс ее калибровки.
А в условиях явно неоднородной по вычислительной мощности среды без множественной калибровки не обойтись.
п.с.: а что, в таких готовых вычислителях функции измерения нет?

NataNata

п.с.: а что, в таких готовых вычислителях функции измерения нет?
вот не нашел я стандартных алгоритмов решения данной проблемы

tamusyav

Может, проще будет сначала озвучить цель анализа "времени"?

NataNata

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

durka82

Эээ.
Обычно задача обсчитывается для достижения определенного результата.
А вот чтобы ее обсчитывать для определения оптимальности ее обсчета - это как-то странно...

tamusyav

То есть ты хочешь провести некие бенчмарки пару дней, чтобы потом иметь возможность сократить время счета с, скажем двух месяцев до 50 дней? То есть правильно ли я понимаю, что выгаданная таким образом неделя стоит того, чтобы этим заморачиваться?

NataNata

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

durka82

Я тебе описал варианты и так и не понял, почему тебе ни один не подошел.
Мб есть какой-то волшебный способ, но он как-то не придумался :(
п.с.: для платформ с виртуальными машинами (java, .net) возможно есть встроенные в виртуальные машины средства - никогда не интересовался
еще можно попробовать все это распределенное запускать под профайлером ;)

NataNata

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