| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
2% int'ов сидят в Escape. pepe watafa.
<https://nda.ya.ru/t/AJC4zGq27VFEkb>
Тут играясь с блоками получилось на реальном cgi из прода \~33% срезать. Мелочь, а приятно. На самом деле, хотелось бы узнать как правильно делать "некрасивую, но ускоряющую" гадость в library/cpp. Все тесты работают, но тем не менее =)
До: <https://nda.ya.ru/t/Iv6Y0jQf7VFEkc>
После: <https://nda.ya.ru/t/KO_Rgvi87VFEke>
Тут, к сожалению не на прогрузе, но уже видно.
commit_hash:671028887e7d9320c8e9a393a0abb203207eb883
|
| |
|
|
| |
commit_hash:9f82ca4e286c6bda445d50e69dbf631f07eab5b6
|
| |
|
|
| |
commit_hash:76b32cc3992d0c6ce820f0b52a06deade4fa7558
|
| |
|
|
|
| |
_Все вызовы вида YLOG\*\_F(...) заменены на YLOG\*_(...) по всему дереву unified\_agent (например, YLOG\_DEBUG\_F → YLOG\_DEBUG, YLOG\_ERR\_F → YLOG\_ERROR).
commit_hash:483c6f5cb6db2d44e9d71b427a697dc2850cba1f
|
| |
|
|
|
|
| |
Since [23 Jan](https://github.com/llvm/llvm-project/commit/6f684816e25d8b4e5fb2cbc7d0560d608a8bd938) llvm deny some specializations.
Original errors you can see [here](https://nda.ya.ru/t/_TK4X_pD7UuYMK
commit_hash:b1ebaf654c8aba01e0fc1b7957a5c93002fa6904
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
# Улучшения библиотеки логирования и переход на троттлинг логов
## Описание
Этот PR содержит улучшения системы логирования unified\_agent с акцентом на предотвращение флуда логов и добавление метрик логирования.
## Основные изменения
### 1. Улучшения библиотеки логирования (`library/cpp/unified_agent_client/logger`)
- **Встроенный троттлинг логов**: Добавлена поддержка ограничения частоты логирования на уровне библиотеки
- Новые макросы `YLOG_*_T` с автоматическим троттлингом (20 логов на 10 секунд по умолчанию)
- Независимый троттлинг для каждой точки логирования (по `__FILE__:__LINE__`)
- Автоматический подсчет подавленных сообщений с выводом `[+N suppressed]`
- **Метрики логирования**: Добавлены счетчики для мониторинга активности логирования
- `RecordsReceived` - общее количество попыток логирования
- `RecordsDropped` - количество подавленных сообщений из-за троттлинга
- Счетчики передаются через `TLogger::TCounters` при создании логгера
- **Оптимизация производительности**:
- Использование `GetCycleCount()` для быстрого получения времени (вместо системных вызовов)
- Relaxed memory ordering для атомарных операций (достаточно для троттлинга)
- Минимальные накладные расходы при отключенном логировании
### 2. Переход всех логов агента на троттлинг
- **Унификация макросов**: Все макросы `YLOG_*` в `logbroker/unified_agent/common/util/logger.h` теперь используют троттлинг
- `YLOG_DEBUG`, `YLOG_INFO`, `YLOG_WARNING`, `YLOG_ERROR` и т.д. теперь автоматически применяют троттлинг
- Старые макросы `YLOG_*_F` теперь алиасы для новых троттлированных версий
- Обратная совместимость полностью сохранена
- **Обновление документации**: Файл `for_ai_cpp.md` обновлен с новыми рекомендациями по логированию
### 3. Интеграция метрик логирования в телеметрию
- **Новые счетчики в `TAgentLogCounters`**:
- `RecordsReceived` - rate метрика `agent.log.records_received`
- `RecordsDropped` - rate метрика `agent.log.records_dropped`
- **Экспорт метрик**: Метрики логирования автоматически собираются и отправляются в телеметрию агента
- **Рефакторинг конструктора `TAgent`**:
- Упрощена передача счетчиков через структуру `TAgent::TCounters`
- Счетчики логирования передаются в `TLogger` при инициализации
### 4. Тесты
- **Перенос тестов**: Тесты логирования перемещены из `logbroker/unified_agent/tests/gtests/logger_tests` в `library/cpp/unified_agent_client/ut`
- **Расширенное покрытие**:
- Тесты базового троттлинга
- Тесты счетчика подавленных сообщений
- Тесты независимого троттлинга для разных точек логирования
- Тесты форматирования сообщений
- Тесты счетчиков метрик
### 5. Исправления и улучшения
- **Удаление дублирования кода**: Логика троттлинга теперь находится только в `library/cpp/unified_agent_client/logger.cpp`
- **Упрощение API**: Удален отдельный файл `logbroker/unified_agent/common/util/logger.cpp`
- **Обновление импортов**: Все файлы обновлены для использования правильных заголовочных файлов
## Преимущества
1. **Защита от флуда логов**: Автоматическое ограничение частоты логирования предотвращает переполнение логов
2. **Наблюдаемость**: Метрики логирования позволяют отслеживать активность и проблемы с логированием
3. **Производительность**: Минимальные накладные расходы благодаря оптимизированной реализации
4. **Простота использования**: Троттлинг работает автоматически, не требует изменений в коде
5. **Обратная совместимость**: Все существующие макросы продолжают работать
## Тестирование
- ✅ Все unit-тесты логирования проходят
- ✅ Integration тесты обновлены (исключение нестабильной метрики `RecordsReceived` из сравнений)
- ✅ Проверена работа троттлинга в реальных условиях
commit_hash:75fc97a8576114446bfb9ec11efbb80df322e443
|
| |
|
|
| |
commit_hash:444f289f3b980580fac9b80c59f1bf1a255b9e12
|
| |
|
|
| |
commit_hash:96d6c16b241e44c6cd7910b16864fd0d037c6e8b
|
| |
|
|
| |
commit_hash:058958336f8d0f263f11997b6bf41f858fdc55a0
|
| |
|
|
| |
commit_hash:18757b3abf06220d28029bbcf9777ac15824637b
|
| |
|
|
| |
commit_hash:0d473923289c49fa726588cccb3f93909c81745b
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
### Добавлен троттлинг логов для предотвращения флуда
**Основная цель:** Защита от переполнения логов повторяющимися сообщениями.
#### Что добавлено:
1. **Механизм троттлинга логов** ([`common/util/logger.h`](common/util/logger.h), [`common/util/logger.cpp`](common/util/logger.cpp))
- Ограничение: по умолчанию максимум 20 сообщений за 10 секунд для каждой точки логирования
- Независимый троттлинг для каждого места вызова `YLOG` (через `static` переменную состояния)
- Подсчёт пропущенных сообщений с выводом в формате `[+N suppressed]`
- Минимальные накладные расходы: использует `GetCycleCount()` вместо системных вызовов времени
- Атомарные операции для потокобезопасности
2. **Настраиваемый троттлинг**
- Макрос `YLOG_THROTTLED(logger, priority, maxLogs, intervalSec, ...)` для кастомных лимитов
- Макросы `YLOG_THROTTLE_MAX_LOGS` и `YLOG_THROTTLE_INTERVAL_SECS` для глобальной настройки (например, в тестах)
3. **Поддержка C++20 `std::format`**
- Макросы `YLOG_*` теперь поддерживают форматирование в стиле C++20: `YLOG_ERR("value: {}", x)`
- Обратная совместимость с `YLOG_*_F` макросами сохранена
- Специальная обработка `TStringBuilder` для избежания проблем с временными объектами
4. **Тесты** ([`tests/gtests/logger_tests/`](tests/gtests/logger_tests/))
- Проверка базового троттлинга
- Проверка счётчика пропущенных сообщений
- Проверка независимости троттлинга для разных точек логирования
- Проверка форматирования сообщений
#### Технические изменения:
**Изменён порядок аргументов в макросе `YLOG`:**
- Было: `YLOG(priority, message, logger)`
- Стало: `YLOG(logger, priority, message, ...)`
Это изменение потребовало обновления всех вызовов `YLOG` в кодовой базе (~30 файлов), но обеспечивает:
- Единообразие с другими логирующими библиотеками
- Возможность использования variadic arguments для форматирования
- Правильную работу с `const auto&` для продления времени жизни временных объектов
#### Примеры использования:
```cpp
// Базовое использование (троттлинг 20 логов/10 сек)
YLOG_ERR("Error occurred");
YLOG_INFO("Processing item: {}", itemId);
```
#### Влияние на производительность:
- Минимальные накладные расходы: ~10-20 наносекунд на вызов (использование CPU cycles вместо системного времени)
- Атомарные операции только при необходимости логирования
- Отсутствие дополнительных (по сравнению с текущим кодом) аллокаций памяти в hot path
#### Обратная совместимость:
- Все существующие `YLOG_*` и `YLOG_*_F` макросы работают как раньше
- Добавлен троттлинг по умолчанию для всех логов (может потребовать внимания при отладке)
commit_hash:d6e98b82486b99b945a1ba264fb2da969db4fcfc
|
| |
|
|
| |
commit_hash:1ad357a58cab779a09a8074175650e4147a845e5
|
| |
|
|
| |
commit_hash:703067c8695868118d5e3360507697c32e6a4002
|
| |
|
|
| |
commit_hash:7752326f65dbdee180e3b9fba78f6a2743bf948e
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
+20-30% throughput on UpdateColumnarStatistics benchmark (with large statistics enabled)
- Do not factor in value.Id when calculating column digest
- Pack metadata directly instead of multiple HashCombine calls
- Use SplitMix64 finalizer for proper bit distribution
- Use cheaper xor with metadata instead of HashCombine
- Use XXH3 for strings
- Remove unnecessary copy
- Measured quality increased: on 20 (c=1..20) sequences `{nc | n \in [1..10^6]}` MAE dropped from ~36% to ~20%
HLL digests might temporarily suffer a 2x increase upon merging with the previously computed ones.
commit_hash:0bf661245cf1848ba9ef8b6c840c18dfd05bd2a4
|
| |
|
|
|
|
| |
inside SetSparseFeatureBlock.,
commit_hash:0f88c1d2928f092c09638d654fca3baa6cb4f505
|
| |
|
|
| |
commit_hash:d1060afa655a4f9d6d4599152e96f7d19f25a506
|
| |
|
|
| |
commit_hash:e0aa8f376556b2915197320fdf60c810b71962cf
|
| |
|
|
|
|
| |
Original errors you can see [here](https://nda.ya.ru/t/cIW6kCld7U2bZB
or [here](https://nda.ya.ru/t/kpJPyHA27U2bZJ
commit_hash:d932f70eceac25c1d3b701b7a60be1b823b1f08b
|
| |
|
|
| |
commit_hash:e587d328242a2cf210cd1f612b4971e747e2c4c7
|
| |
|
|
| |
commit_hash:8a1fe870b29249760b698ef95b4513fd0bbf8745
|
| |
|
|
| |
commit_hash:a2c20ffc1acc83385a3195d76eb95818b3ad6a67
|
| |
|
|
| |
commit_hash:9aba7173fb1ef0a42bfc7d91ec99a376e09834eb
|
| |
|
|
| |
commit_hash:f257ebdacfbf0549a0f55cc37df2c059629bac3a
|
| |
|
|
| |
commit_hash:e8fdd005d2e57ea8b88f027e3b7eae245d89bcd9
|
| |
|
|
| |
commit_hash:cdde08394e643fc08d9b4ea1b93e3191c3d93786
|
| |
|
|
| |
commit_hash:cb111b7213d55cae50a1d922786827d715b2ce4e
|
| |
|
|
| |
commit_hash:0981fb113212b130cb676672e125982188e4fd20
|
| |
|
|
| |
commit_hash:dec1324c908f86e371bfda82e5cb1d90f06a9d06
|
| |
|
|
| |
commit_hash:b99ce0014bc419134aa5cd9d21ec17472a7efcce
|
| |
|
|
| |
commit_hash:d3337fcf8e16f28dc99d9466172f80b83d2fe569
|
| |
|
|
| |
commit_hash:d0a59b050291e7d3758b46f92f524fd3c60fac54
|
| |
|
|
| |
commit_hash:4a586fb909dc17910cd4b1f43efe932a2839d67a
|
| |
|
|
| |
commit_hash:297b5880340725ec9a28608c1af7a50742ef4995
|
| |
|
|
| |
commit_hash:bfc1eb4f21ecb804205db2c38e09cda4b5b9cea4
|
| |
|
|
|
| |
<https://nda.ya.ru/t/nesU8Ssd7StzZd>
commit_hash:3b5733332bec71a4f2f26e6e878afb23dde01fe7
|
| |
|
|
|
| |
The NewPromise() function should not be called if the singleton has already been constructed.
commit_hash:9e3b6c8908bbef648bf52ca2506ff0ae03ed0530
|
| |
|
|
| |
commit_hash:4373219e5a3e59d3b6020a500b3953d735a28ef0
|
| |
|
|
| |
commit_hash:579e0752cfe1226a83d5b52df5ba612ad4621493
|
| |
|
|
| |
commit_hash:ab4ceb4485a087a6294a6497e8cb9b331ddc036a
|
| |
|
|
|
|
| |
declaration
commit_hash:6060ce65f9cdc998b9763fcc429bdd79188f522b
|
| |
|
|
| |
commit_hash:1e6b73c17aaaf69b19ff38a4b20246c45aeb3266
|
| |
|
|
| |
commit_hash:47bef2786d6025ec7e078b5989df54417315ac77
|
| |
|
|
| |
commit_hash:a39ed963e1f26fffdbc6055970b66490b2503ec5
|
| |
|
|
| |
commit_hash:3705bbac91a604b06838ca310e992f1b7728426d
|
| |
|
|
| |
commit_hash:709abab383d9e399b60eb6acf6ade302420aefcd
|
| |
|
|
| |
commit_hash:4412172db084730a7f35a60c927e848477ccbcfb
|
| |
|
|
| |
commit_hash:d4bf2f7b3c17de411be28ab682a4a6c323720b60
|
| |
|
|
| |
commit_hash:7ba419fb89ea78bf52e012fc9ef4ecccf35edca9
|