Введение 4
Постановка задачи 6
1. Обзор предметной области 7
1.1. Термины 7
1.2. Классическая версия задачи о разладке 7
1.2.1 Алгоритм поиска двоичной сегментации 8
1.2.2 Алгоритм скользящего окна 8
1.2.3 Алгоритм объединения отрезков снизу вверх 8
1.3. Интервальная версия задачи о разладке 8
1.4. Анализ производительности программ 9
1.5. Выводы 9
2. Методы и алгоритмы 10
2.1. Методы 10
2.2. Метрики 11
2.3. Объединение точек в интервалы 11
2.4. Алгоритм поиска двоичной сегментации 11
2.5. Алгоритм скользящего окна 12
2.6. Алгоритм объединения отрезков снизу вверх 13
3. Результаты 15
3.1. Тестовый набор данных 15
3.2. Функция оценки 15
3.3. Результаты на тестовом наборе данных 17
3.3.1 Алгоритм поиска двоичной сегментации с использованием метрик 17
3.3.2 Алгоритм скользящего окна с использованием метрик . 18
3.3.3 Алгоритм скользящего окна с использованием критериев 18
3.3.4 Алгоритм объединения отрезков снизу вверх с использованием метрик 18
3.3.5 Алгоритм объединения отрезков снизу вверх с использованием критериев 19
3.4. Результаты на реальных данных 19
3.5. Материалы работы 21
Заключение 22
Список литературы 23
Для крупных современных информационных систем очень важно следить за производительностью, чтобы ни одна часть огромного продукта в процессе разработки не начинала работать медленнее. В хоть сколько-то крупной системе отслеживать такие изменения вручную практически невозможно из-за больших объемов работы. Поэтому очень важно, чтобы эта часть мониторинга была автоматизирована.
Данные, по которым можно отслеживать изменения производительности, снимаются с помощью регулярного проведения замеров времени работы каждой части кода в отдельности. И уже по этим данным необходимо находить изменения.
Важно заметить, что производительность участка кода может не только снижаться или увеличиваться после внесения правок, но и иметь более сложный характер изменений. Например, на части входных данных код может начать работать медленнее, а на части - ускоряться. И такие изменения тоже необходимо отслеживать. Для этого нужно находить моменты, когда меняется распределение времен замеров в целом, а не только какие-то его параметры.
Также для необходимой быстрой реакции на меняющиеся изменения нужно оперативно уметь определять, что в распределении поступающих из тестов данных что-то поменялось. Полезно учитывать данные тестирования не только окончательных версий продукта, но и всех рабочих версий разработчиков. Это не только позволяет увеличить размер анализируемых данных, а значит точность результата, но и дает возможность находить проблемы с производительностью на ранних этапах разработки. Важная тонкость, которую нужно учитывать в такой постановке - изменения в распределении в серии данных происходят не мгновенно, по какому-то одному коммиту, а происходят в течение какого-то промежутка времени, пока изменяющий код доставляется до всех рабочих версий. Это приводит к необходимости на этапе анализа данных искать интервал времени, в который произошло изменение, а не точную временную метку. Стоит также отметить, что решение задачи в такой постановке может позволить упростить соблюдение важного свойства такого мониторинга - персистентности. При добавлении новых измерений во временную серию определяемые точки разладки могут незначительно сдвигаться, что очень не удобно с точки зрения обработки результатов. В случае, когда работа идет с интервалами — небольшой сдвиг интервала не так критичен, его можно пересечь с интервалами находящимися рядом и найденными на прошлых итерациях, и получить фиксированный достоверный интервал разладки.
Научная ценность данной работы заключается в представлении расширения существующего подхода к автоматическому мониторингу производительности в крупных информационных системах. Результаты исследования будут полезны для разработчиков и технических специалистов, занимающихся оптимизацией производительности систем, а также для научного сообщества, занимающегося проблемами автоматического мониторинга производительности.
В рамках работы были разработаны новые алгоритмы решения интервальной версии задачи о разладке на основе существующих решений для решения классической версии задачи. Была построена программная реализация алгоритмов на языке Python. Все результаты были применены на искусственных данных и проверены на реальных данных. Программный код размещен в открытом доступе и может быть использован в дальнейших работах по этой теме. Данная тема имеет множество перспектив для дальнейшего развития.
[1] V. Jandhyala, S. Fotopoulos, I. Macneill, and P. Liu. Inference for single and multiple change-points in time series. Journal of Time Series Analysis, 34(4):423-446, 2013.
[2] K. Haynes, I. A. Eckley, and P. Fearnhead. Computationally efficient changepoint detection for a range of penalties. Journal of Computational and Graphical Statistics, 26(1):134-143, 2017.
[3] Z. Harchaoui, F. Vallet, A. Lung-Yut-Fong, and O. Capp e. A regularized kernel-based approach to unsupervised audio segmentation. In Proceedings of the IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), pages 1665-1668, Taipei, Taiwan, 2009.
[4] N. Seichepine, S. Essid, C. Fevotte, and O. Capp e. Piecewise constant nonnegativematrix factorization. In Proceedings of the IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), pages 6721-6725, Florence, Italy, 2014
[5] M. Lavielle and G. Teyssi‘ere. Adaptive detection of multiple change-points in asset price volatility. In Long-Memory in Economics, pages 129-156. Springer Verlag, Berlin, Germany, 2007.
[6] F. Picard, S. Robin, M. Lavielle, C. Vaisse, and J.-J. Daudin. A statistical approach for array CGH data analysis. BMC Bioinformatics, 6(1):27, 2005.
[7] S. Liu, A. Wright, and M. Hauskrecht. Change-point detection method for clinical decision support system rule monitoring. Artificial Intelligence In Medicine, 91:49-56, 2018.
[8] Shohreh Deldari, Daniel V. Smith, Hao Xue, Flora D. Salim. Time Series Change Point Detection with Self-Supervised Contrastive Predictive Coding. arXiv preprint, arxiv:2011.14097 2021.
[9] Charles Truonga, Laurent Oudreb, Nicolas Vayatis. Selective review of offline change point detection methods. arXiv preprint, arxiv:1801.00718 (2020).
[10] Yang Cao, Ye Zhu, Kai Ming Ting, Flora D. Salim, Hong Xian Li, Gang Li. Detecting Change Intervals with Isolation Distributional Kernel. arXiv preprint, arxiv:2212.14630, 2023
[11] K. M. Ting, B. -C. Xu, T. Washio and Z. -H. Zhou. Isolation Distributional Kernel: A New Tool for Point and Group Anomaly Detections. In IEEE Transactions on Knowledge and Data Engineering, pages. 2697-2710, 2023
[12] Xingyu Zhao, Radu Calinescu, Simos Gerasimou, Valentin Robu, David Flynn. Interval change-point detection for runtime probabilistic model checking. In Proceedings of the 35th IEEE/ACM International Conference on Automated Software Engineering, pages 163-174, 2020
[13] David Daly, William Brown, Henrik Ingo, Jim O’Leary, David Bradford. The Use of Change Point Detection to Identify Software Performance Regressions in a Continuous Integration System. In Proceedings of the ACM/SPEC International Conference on Performance Engineering, pages 67-75, 2020