Skip to content

CPU optimization#1

Open
foxy-eyed wants to merge 13 commits intospajic:masterfrom
foxy-eyed:cpu-optimization
Open

CPU optimization#1
foxy-eyed wants to merge 13 commits intospajic:masterfrom
foxy-eyed:cpu-optimization

Conversation

@foxy-eyed
Copy link

@foxy-eyed foxy-eyed commented Mar 11, 2019

  • Построить и проанализировать отчёт ruby-prof в режиме Flat;
  • Построить и проанализировать отчёт ruby-prof в режиме Graph;
  • Построить и проанализировать отчёт ruby-prof в режиме CallStack;
  • Построить и проанализировать отчёт ruby-prof в режиме CallTree c визуализацией в QCachegrind;
  • Профилировать работающий процесс rbspy;
  • Построить и проанализировать отчёт flamegraph с помощью rbspy;
  • Добавить в программу ProgressBar;
  • Научиться пользоваться Valgrind massif с massif-visualizer. Построить профиль использования памяти для итоговой версии вашей программы и добавить скриншот в PR;
  • Написать хотя бы самый простой тест на производительность: assert, что время выполнения скрипта меньше значения, которое чуть больше реального, чтобы не давать ложных срабатываний;

@foxy-eyed foxy-eyed marked this pull request as ready for review March 15, 2019 18:56
Copy link
Owner

@spajic spajic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Отличная работа, поревьюшил с удовольствием!

# Case-study оптимизации

## Актуальная проблема
Начало истории [тут](./case-study-1-memory.md)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

скрипт `utils/asymptotics.rb`, который замеряет метрику на файлах разного размера с шагом 0.5Mb.

Для генерации файлов нужного размера из исходного подготовила небольшой вспомогательный
скрипт `utils/prepare-data-chunks.rb`
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

скрипт `utils/prepare-data-chunks.rb`

Результаты замеров представлены ниже.
В конце этого документа можно увидеть сравнение этих показателей с результирующими.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Я предприняла несколько попыток оптимизировать это место:
- попробовала последовательно перебирать символы в строке и писать в хэш подстроки до первой встречной запятой;
- попробовала передавать в методы `parse_session` и `parse_user` уже обрезанную строку без лишнего;
- ради интереса протестировала библиотеку `CSV` (построчная обработка в цикле `CSV.foreach`) – работает почти
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍


Увы, тут экономия на спичках мне ничего не дала, поэтому я сосредоточилась на `Array#include?`.
Этот метод мы используем, чтобы добиться уникальности элементов в массиве браузеров.
Вместо массива мы можем попробовать использовать `Set`, поскольку он сам по себе гарантирует уникальность.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Увы, тут экономия на спичках мне ничего не дала, поэтому я сосредоточилась на `Array#include?`.
Этот метод мы используем, чтобы добиться уникальности элементов в массиве браузеров.
Вместо массива мы можем попробовать использовать `Set`, поскольку он сам по себе гарантирует уникальность.
Более того, можем в будущем избавиться от сортировки, если возьмем `SortedSet`.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍


Отчет ruby-prof показал, что оптимизация дала небольшой эффект – доля времени, которую занимает работа цикла `IO#each`,
снизилась с 44 до 40%.
А замеры подтвердили, что метрика выросла с **3.0 до 4.5 i/s**
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

На 50%!

------ | -----
![stack_before](https://ucarecdn.com/6f271373-b78a-4f61-8b6f-b87370913253/ScreenShot20190315at003138.png) | ![stack_after](https://ucarecdn.com/3ec9ad92-1e2c-4001-b15c-de7ff3bd93da/ScreenShot20190315at003157.png)

К сожалению, метрика выросла незначительно – **5.2 i/s**. Но откатывать изменения я не стала.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ну, 5% то не лишние!

@foxy-eyed foxy-eyed changed the title [WIP] CPU optimization CPU optimization Mar 19, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants