|
|
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Коллеги кто нибудь знает утилиты для подсчета cache miss/ cache hit в Java приложениях ? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2017, 19:36 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
semensemenovichКоллеги кто нибудь знает утилиты для подсчета cache miss/ cache hit в Java приложениях ? Заранее спасибо. Там в общем то легко сделать свою внутреннюю статистику зачем еще один уровень над JPA городить. Обычно если не в кеше то пишешь в лог, что в кеше не оказалось иду в базу. По логу можно собрать в том же Splunk всю статистику когда и при каких обстоятельств не было в кеше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2017, 22:02 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
semensemenovichКоллеги кто нибудь знает утилиты для подсчета cache miss/ cache hit в Java приложениях ? Заранее спасибо. это от языка не зависит 1) счетчики performance для Linux - для любого приложения покажут. Я не использовал, хотя было нужно, т.к. работал "на живую" на продакшен сервере и ставить под рутом приложения, с которыми я первый раз сталкиваюсь, мне было боязно. 2) Intel VTune вроде с Java работать умел/умеет https://software.intel.com/en-us/node/544058 если не побаловаться, а по серьезному... то кроме Intel VTune при всем богатстве выбора - другой алтернативы нет AFAIK. Но он платный. Java на нем НЕ профилировал, но вроде он с Java умеет работать. Последняя trial версия, которую год назад видел, была вообще не рабочая ))) саппорт Intel рекомендовал взять/найти предыдущие версии ))) или купить ))) На фига выкладывать на сайт нерабочие trial версии - мне не понятно ))) такой хитрый маркетинг наверное ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2017, 00:51 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
VTuneAnalyzing Hardware Metrics VTune Amplifier also provides an advanced profiling option of optimizing Java applications for the CPU microarchitecture utilized in your platform. Although Java and JVM technology is intended to free a developer from hardware architecture specific coding, once Java code is optimized for the current Intel microarchitecture, it will most probably keep this advantage for future generations of CPUs. You may use theHardware Event-based Sampling Collection data collection that monitors hardware events in the CPU's pipeline and can identify coding pitfalls limiting the most effective execution of instructions in the CPU. The CPU Metrics Reference are available and can be displayed against the application modules, functions, and Java code source lines. You may also run the Hardware Event-based Sampling Collection with Stacks when you need to find out a call path for a function called in a driver or middleware layer in your system. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2017, 01:17 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
как-то так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 09:15 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
semensemenovichЯ про https://en.wikipedia.org/wiki/CPU_cache Это задача далеко выходящая за рамки классического программирования на Java. Спешу спросить. А какие решения ты будешь принимать на основе полученных данных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 09:46 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
maytonsemensemenovichЯ про https://en.wikipedia.org/wiki/CPU_cache Это задача далеко выходящая за рамки классического программирования на Java. Спешу спросить. А какие решения ты будешь принимать на основе полученных данных? Высокопроизводительные приложения на Java Прошу только не задавайте мне вопрос почему мы не пишем на С и С++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 12:39 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, chabapok, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 12:42 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
chabapokкак-то так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Коллега, простите за немный вопрос, а Вы не знаете аналогичной тулы для MacOs ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 12:46 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
semensemenovichmaytonпропущено... Это задача далеко выходящая за рамки классического программирования на Java. Спешу спросить. А какие решения ты будешь принимать на основе полученных данных? Высокопроизводительные приложения на Java Прошу только не задавайте мне вопрос почему мы не пишем на С и С++. Я не буду спрашивать про С++. Обычно производительность современного приложения (бизнес-приложения) зависит от производительности сети (если вы ее используете) дисков и БД. И тюнить кеши процессора следует в том случае когда вы исчерпали возможности тюнинга алгоритма и того что я перечислил выше. Что у вас за алгоритм? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 14:19 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
maytonОбычно производительность современного приложения Ох коллега как же вы далеки от разработки по настоящему серьезного софта. То о чем Вы говорите это разработка энтерпрайз бизнес приложений. Я занимаюсь несколько другими задачами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 18:05 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
Так приблизьте меня, коллега. Устал я уже далеко так сидеть. Что за алгоритм-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 18:07 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
maytonТак приблизьте меня, коллега. Устал я уже далеко так сидеть. Что за алгоритм-то? Для начала простой вопрос Что быстрее ArrayList или LinkedList ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 18:08 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
semensemenovichmaytonТак приблизьте меня, коллега. Устал я уже далеко так сидеть. Что за алгоритм-то? Для начала простой вопрос Что быстрее ArrayList или LinkedList ? О боже. Так издалека? Тогда отвечу. Смотря на каких операциях. И давайте перейдем сразу к мясному меню. Что там? Расчет сопротивления материалов? Рендеринг 3D? Копание bitcoins? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 18:15 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
maytonsemensemenovichпропущено... Для начала простой вопрос Что быстрее ArrayList или LinkedList ? О боже. Так издалека? Тогда отвечу. Смотря на каких операциях. И давайте перейдем сразу к мясному меню. Что там? Расчет сопротивления материалов? Рендеринг 3D? Копание bitcoins? Конкретно я сортирую данные ))) Надо написать так дизайно хранения данных в памяти чтоб это было наиболее дружественно с точки зрения кешей CPU и соответственно достигалась бы скорость сортировки большая или равная той что выдает JDK Arrays.sort ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 18:17 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
maytonТогда отвечу. Смотря на каких операциях. Какая из этих структур наиболее эффективно дает использование кешей CPU (минимизирует CACHE MISSES) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 18:19 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
semensemenovichmaytonТогда отвечу. Смотря на каких операциях. Какая из этих структур наиболее эффективно дает использование кешей CPU (минимизирует CACHE MISSES) Ну...я-бы взял Array т.к. есть больше гарантий что соседние элементы (если они примитивы) располагаются рядышком в адресной памяти и соотв у меня больше контроля над ситуацией. Я могу работать блоками кратными кешам и соотв повышать эффективность отклика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 18:23 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
semensemenovichmaytonпропущено... О боже. Так издалека? Тогда отвечу. Смотря на каких операциях. И давайте перейдем сразу к мясному меню. Что там? Расчет сопротивления материалов? Рендеринг 3D? Копание bitcoins? Конкретно я сортирую данные ))) Надо написать так дизайно хранения данных в памяти чтоб это было наиболее дружественно с точки зрения кешей CPU и соответственно достигалась бы скорость сортировки большая или равная той что выдает JDK Arrays.sort А какой тип данных сортируется? Какой ключ? И каково value? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 18:26 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
semensemenovichа Вы не знаете аналогичной тулы для MacOs ? Не знаю, я не яблофил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 19:17 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
semensemenovichНадо написать так дизайно хранения данных в памяти чтоб это было наиболее дружественно с точки зрения кешей CPU и соответственно достигалась бы скорость сортировки большая или равная той что выдает JDK Arrays.sort Кроме кэшей в процессоре есть целая куча других агрегатов, которые задействованы в алгоритме. И перфоманс каунтеры есть далеко не у всех агрегатов. Обычно на сколь-нибудь реальной (и даже синтетической) задаче, если вы оптимизируете алгоритм под дружественный для одного агрегата - то он будет недружественным для других агрегатов. А так, чтобы угодить всем и сразу - не бывает. Разумеется, это не означает, что вопрос производительности надо вообще забыть, а лишь означает, что особо надежд на подобного рода оптимизации лучше не возлагать. Расскажу вам поучительную историю из личного опыта. Решил я разобраться с утилитой perf, заодно и код для оптимизации подвернулся - пример mandelbrot с сайта benchmarks game. Тут надо сделать такую ремарку. То, что на этом сайте меряется неправильно - это ясно. Однако основная цель была не мерять перфоманс - а пощупать утилиту perf. И вобщем, я внимательно посмотрел код: нашел несколько мест в которых можно, согласно моим представлениям, улучшить показатели - и поправил этот код. И ожидаемые показатели действительно улучшились, при этом все остальные либо остались на том же уровне, либо тоже улучшились. Ну супер же? Только вот, единственное, что возросло - это время исполнения. Перформенс-тюнер от бога, бгг ) На самом же деле, немножко поразмыслив над ситуацией, я понял, что там далеко не все обвешено счетчиками производительности, по крайней мере на amd. И я грубо говоря, переписав алгоритм, стал более активно использовать агрегат, у которого нет счетчика, и за счет этого получилась просадка. Эти все моменты, пока их сам не пощупаешь - они все равно не очевидны. Все равно тебе кажется - "щас вот тут подкручу - и станет лучше", но в большинстве случаев из этого ничего не получится. Касаемо Arrays.sort - это, мне кажется, вообще канонический случай, в котором подкрутить уже ничего не выйдет. Единственное что - это если известны некоторые особенности значений данных, которые лежат в массиве, то может можно как-то оптимизировать под эти конкретные особенности, за счет просадки на данных без этих особенностей. Вообще же, оптимизировать Arrays.sort - это примерно как сказать, что килограмм недостаточно килограммистый, англосаксы из международной палаты мер и весов охренели и диктуют миру неверное значение килограмма - и поэтому срочно нужен новый импортозамещенный эталон, дайте денег на это... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 20:19 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
chabapok, добавлю еще несколько наблюдений 1) Лет несколько назад я был не кодером а ДБА. Натурально. И вот как-то я заметил неоптимальность в юзкейсах биллинговой системы. Я заметил что оператору приёма платежей не удобно искать услуги за последний месяц и сортировку по дате услуги. Оператор делал проще. Он выбирал ВСЕ услуги клиента за все года и выводил на экранчик PowebBuilder приложения top 10 услуг по дате. Я забил тревогу. Я видел в Oracle планы курсоров которые бегают по всем услугам с 1996 года. Но оператору было пофиг он просто делал свою работу. Ему лень сделать мышко-клик указывая последний месяц но не лень подождать пару-минут другую. Я крепо задумался. Сортировка - зло. Она не нужна для всей выборки. Нужна сортировка последнего периода или двух. 2) Еще одно наблюдение. Очень часто задачи на собеседование предсавляют собой "сферическую сортировку" в вакууме. Выставляются требования как в контестерах. Алгоритм должен работать не более чем 3000 мс и сортировать 1Гиг целых чисел (к примеру). При этом за кадром остаются следующие вопросы - каким образом эти данные туда попали? Телепортировались? Возможно они качались через wget/ftp/scp e.t.c. и прочее. - как быстро процесс потребитель (consumer) или пользователь сможет этот 1Гиг данных осознать (обработать). Не лучше-ли ему дать Iterator от TreeMap? Не лучше-ли подготовить структуру данных наподобие TreeMap и тихонечко поддерживать ее в актуальном состоянии в памяти а то и вовсе в БД (BerkeleyDB/B+Tree)? 3) Сортировка - самый тяжелый по КПД алгоритм. Можно сказать это краш-тест для канала памяти. В worst сценариях она двигает каждый элемент коллекции и если у вас был 1Гиг worst данных - то весь Гиг будет перелопачен в памяти. Никакому байтику не будет пощады. И с этой вводной я начинаю. Я не осуждаю сам алгоритм сортировки. К нему нет претензии. Я спрашиваю. Вам реально необходимо на каждое пользовательское событие сортировать? Или есть какие-то обходные сценарии? Можно-ли изменить SR таким образом чтобы убрать сортировку за скобки нашего бизнес процесса? Что-там с producer? Это БД? А пускай сортирует. У нее есть бесконечный объем $TMP и способность генерировать сортированные курсоры гораздо гибче чем мы напишем на Java. SQL - реально лучший DSL для выборок. А мы прогоним цикл транформаций на java уже по сортированной ResultSet и выдадим красивый и быстрый результат. Не знаю что там у автора с MacOS. Явно не сервак. Не ставят серваки на Mac обычно. 4) Борьба с Arrays.sort. Выше автор попросил чтобы мы не спрашивали его о С++. Но я замечу в скобках что часть внутренних функций типа строковых операций переписана на С++ для повышения перформанса. И возможно что на некоторых методах Arrays::sort работает не java-кода а intrinsic. В этом случае автор попадает в смешное положение. Впрочем автору это надо проверить. Вообще человеку но осознать даже мегабайт сортированных данных. Ему нужна более мелкая под-выборка. Вот ради этого и стоит пересматривать ТЗ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 21:34 |
|
||
|
Cache miss/hit detector in Java
|
|||
|---|---|---|---|
|
#18+
chabapoksemensemenovichНадо написать так дизайно хранения данных в памяти чтоб это было наиболее дружественно с точки зрения кешей CPU и соответственно достигалась бы скорость сортировки большая или равная той что выдает JDK Arrays.sort Кроме кэшей в процессоре есть целая куча других агрегатов, которые задействованы в алгоритме. И перфоманс каунтеры есть далеко не у всех агрегатов. Обычно на сколь-нибудь реальной (и даже синтетической) задаче, если вы оптимизируете алгоритм под дружественный для одного агрегата - то он будет недружественным для других агрегатов. А так, чтобы угодить всем и сразу - не бывает. Разумеется, это не означает, что вопрос производительности надо вообще забыть, а лишь означает, что особо надежд на подобного рода оптимизации лучше не возлагать. Расскажу вам поучительную историю из личного опыта. Решил я разобраться с утилитой perf, заодно и код для оптимизации подвернулся - пример mandelbrot с сайта benchmarks game. Тут надо сделать такую ремарку. То, что на этом сайте меряется неправильно - это ясно. Однако основная цель была не мерять перфоманс - а пощупать утилиту perf. И вобщем, я внимательно посмотрел код: нашел несколько мест в которых можно, согласно моим представлениям, улучшить показатели - и поправил этот код. И ожидаемые показатели действительно улучшились, при этом все остальные либо остались на том же уровне, либо тоже улучшились. Ну супер же? Только вот, единственное, что возросло - это время исполнения. Перформенс-тюнер от бога, бгг ) На самом же деле, немножко поразмыслив над ситуацией, я понял, что там далеко не все обвешено счетчиками производительности, по крайней мере на amd. И я грубо говоря, переписав алгоритм, стал более активно использовать агрегат, у которого нет счетчика, и за счет этого получилась просадка. Эти все моменты, пока их сам не пощупаешь - они все равно не очевидны. Все равно тебе кажется - "щас вот тут подкручу - и станет лучше", но в большинстве случаев из этого ничего не получится. Касаемо Arrays.sort - это, мне кажется, вообще канонический случай, в котором подкрутить уже ничего не выйдет. Единственное что - это если известны некоторые особенности значений данных, которые лежат в массиве, то может можно как-то оптимизировать под эти конкретные особенности, за счет просадки на данных без этих особенностей. Вообще же, оптимизировать Arrays.sort - это примерно как сказать, что килограмм недостаточно килограммистый, англосаксы из международной палаты мер и весов охренели и диктуют миру неверное значение килограмма - и поэтому срочно нужен новый импортозамещенный эталон, дайте денег на это... Коллега спасибо за помощь и экспертизу Подскажите, пожалуйста, а какие еще значимые агрегаты есть у процессора ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2017, 23:34 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39504621&tid=2122635]: |
0ms |
get settings: |
11ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
68ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 428ms |

| 0 / 0 |
