Deckhouse Prom++: как мы сжали разметку метрик Prometheus и снизили расход памяти в 2,5 раза с помощью статистики данных

Хотели избежать копирования данных, придумали свою служебную разметку, а потом обнаружили: она занимает почти столько же места, сколько сам исходный текст. Мы перестали гадать, посмотрели на реальные данные и применили простые, но эффективные подходы: числа переменной длины, отказ от double в пользу целых типов и умные if-else вместо switch . Итог: мы сжали разметку в 2,5 раза и при этом даже немного выиграли в скорости. Рассказываем, как знание предметной области помогло нам не усложнять код, а сделать его быстрее и легче.

https://habr.com/ru/companies/flant/articles/1048018/

#c++ #c++23 #prometheus #prom++ #jemalloc #switch #unroll #ifelse #varint #offset

Deckhouse Prom++: как мы сжали разметку метрик Prometheus и снизили расход памяти в 2,5 раза с помощью статистики данных

Миллионы метрик, чистый код, но аллокатор показывает в разы больше памяти, чем должно занимать «полезное» содержимое. Профайлер светит на парсинг, а вы гадаете: куда деваются мегабайты? Привет, меня...

Хабр
🌘 更好的varint
➤ 協議快取 varint LEB128 VLQ
https://dcreager.net/2021/03/a-better-varint/
許多二進制文件格式需要存儲整數值。而這些整數值通常是“小”的。因此,保存空間可以通過使用更少的字節來將整數值編碼。
+ 很好地闡述瞭如何處理小範圍整數的問題以及搜索效率高
+ 整體描述細致入微和易於理解
#整數存儲 #varint 編碼
A better varint

🌘 壓縮大展覽:在僅使用40億CPU週期中解壓縮50億Varints
➤ 介紹Varint編碼和Stream VByte格式,並分享在Rust中實現該算法的發現
https://www.bazhenov.me/posts/rust-stream-vbyte-varint-decoding/
Varint是一種廣泛使用的壓縮整數流技術,本文介紹了Stream VByte格式,該格式通過SSSE3指令實現了完全向量化解碼。作者在Rust中實現了該算法,包括編碼和解碼原始碼,並能夠從RAM和磁盤讀取數據。該算法在多個平台上進行了測試,解碼速度平均為0.75 CPU週期每個整數。
✤ Varint編碼是一種壓縮整數流的廣泛使用技術,但解碼速度緩慢。Stream VByte格式通過將長度信息和數據分開成獨立的流,實現了完全向量化解碼。作者在Rust中實現了該算法,包括編碼和解碼原始碼,並能夠從RAM和磁盤讀取數據。該算法在多個平台上進行了測試,解碼速度平均為0.75 CPU週期每個整數。
+ 這篇文章非常詳盡地
#性能 #Rust #CPU #壓縮 #Varint #Stream VByte
Compress-a-Palooza: Unpacking 5 Billion Varints in only 4 Billion CPU Cycles

Introduction Link to heading Varint is a widely recognized technique used for compressing integer streams. Essentially, it suggests that it can be more efficient to encode a number using a variable-length representation instead of a fixed-size binary representation. By removing leading zeros from the binary number, the overall representation size can be reduced. This technique works particularly well for encoding smaller numbers. In this article, I provide a brief introduction and rationale for varint encoding.