Тест продуктивності використання памʼяті Watch

Вимірювання продуктивності для спостерігачів etcd

ПРИМІТКА: Функції спостереження знаходяться в активній розробці, і їх використання памʼяті може змінюватися в процесі розвитку. Ми не очікуємо значного збільшення понад зазначені нижче цифри.

Основною метою etcd є підтримка дуже великої кількості спостерігачів, які виконують величезну кількість спостережень. etcd прагне підтримувати O(10k) клієнтів, O(100K) потоків спостереження (O(10) потоків на клієнта) і O(10M) загальних спостережень (O(100) спостережень на потік). Памʼять, яку споживає кожне окреме спостереження, становить найбільшу частину загального використання памʼяті etcd, і тому є обʼєктом поточних та майбутніх оптимізацій.

Три повʼязані компоненти спостереження etcd споживають фізичну памʼять: кожен grpc.Conn, кожен потік спостереження та кожен екземпляр спостереження. grpc.Conn підтримує фактичне TCP-зʼєднання та інший стан зʼєднання gRPC. Кожен grpc.Conn споживає O(10kb) памʼяті та може мати кілька прикріплених потоків спостереження.

Кожен потік спостереження є незалежним HTTP2-зʼєднанням, яке споживає ще O(10kb) памʼяті. Кілька спостережень можуть ділити один потік спостереження.

Спостереження — це фактична структура, яка відстежує зміни в сховищі ключ-значення. Кожне спостереження повинно споживати < O(1kb).

conn

stream1

stream2

stream3

watch foo

watch bar

Теоретичне споживання памʼяті спостереження можна приблизно оцінити за формулою:

memory = c1 * number_of_conn + c2 * avg_number_of_stream_per_conn + c3 * avg_number_of_watch_stream

Тестове середовище

версія etcd

Тип машини GCE n1-standard-2

  • 7.5 ГБ памʼяті
  • 2x CPU

Загальне використання памʼяті

Загальне використання памʼяті відображає, скільки RSS споживає etcd з клієнтськими спостерігачами. Хоча результат може варіюватися до 10%, він все ще є значущим, оскільки метою є дізнатися про приблизне використання памʼяті та патерн розподілу.

З результатами тесту ми можемо приблизно розрахувати, що c1 = 17kb, c2 = 18kb і c3 = 350bytes. Таким чином, кожне додаткове клієнтське зʼєднання споживає 17kb памʼяті, кожен додатковий потік споживає 18kb памʼяті, а кожне додаткове спостереження споживає лише 350bytes. Один сервер etcd може підтримувати мільйони спостережень з кількома ГБ памʼяті в нормальному випадку.

клієнтипотоки на клієнтаспостереження на потікзагальне спостереженнявикористання памʼяті
1k111k50MB
2k112k90MB
5k115k200MB
1k10110k217MB
2k10120k417MB
5k10150k980MB
1k50150k1001MB
2k501100k1960MB
5k501250k4700MB
1k5010500k1171MB
2k50101M2371MB
5k50102.5M5710MB
1k501005M2380MB
2k5010010M4672MB
5k5010025MOOM