Aller au contenu

Vue imprimable multi-pages de cette section. .

Retour à la version par défaut.

Benchmarks

Mesures de performance pour etcd

Benchmarks

Les benchmarks etcd seront publiés régulièrement et suivis pour chaque version ci-dessous :

Benchmarks d’utilisation mémoire

Il enregistre l’utilisation mémoire attendue dans différents scénarios.

1 - Benchmark de l'utilisation de la mémoire de stockage

Mesures de performance pour le stockage etcd (index en mémoire et cache de pages)

Deux composants du stockage etcd consomment de la mémoire physique. Le processus etcd alloue un index en mémoire afin d’accélérer la recherche des clés. La mémoire tampon de pages, gérée par le système d’exploitation, stocke les données récemment accessibles sur disque pour une réutilisation rapide.

L’index en mémoire stocke toutes les clés dans une structure de données arbre B , accompagnées de pointeurs vers les données sur disque (les valeurs). Chaque clé dans l’arbre B peut contenir plusieurs pointeurs, chacun faisant référence à une version différente de sa valeur. La consommation mémoire théorique de l’index en mémoire peut donc être approximée par la formule :

N * (c1 + avg_key_size) + N * (avg_versions_of_key) * (c2 + size_of_pointer)

où c1 représente la surcharge liée aux métadonnées de clé et c2 la surcharge liée aux métadonnées de version.

Le graphique montre la structure détaillée de l’arbre B en mémoire.



                                In mem index

                               +------------+
                               | key || ... |
  +--------------+             |     ||     |
  |              |             +------------+
  |              |             | v1  || ... |
  |   disk    <----------------|     ||     | Tree Node
  |              |             +------------+
  |              |             | v2  || ... |
  |           <----------------+     ||     |
  |              |             +------------+
  +--------------+       +-----+    |   |   |
                         |     |    |   |   |
                         |     +------------+
                         |
                         |
                         ^
                      ------+
                      | ... |
                      |     |
                      +-----+
                      | ... | Tree Node
                      |     |
                      +-----+
                      | ... |
                      |     |
                      ------+

La mémoire du cache Page cache est gérée par le système d’exploitation et n’est pas traitée en détail dans ce document.

Environnement de test

Version etcd

Type de machine GCE n1-standard-2

  • 7,5 Go de mémoire
  • 2x processeurs

Utilisation mémoire de l’index en mémoire

Dans ce test, nous ne mesurons que la consommation mémoire de l’index en mémoire. L’objectif est de déterminer c1 et c2 mentionnés ci-dessus, afin de comprendre la limite maximale de consommation mémoire du stockage.

Nous calculons la consommation de mémoire à l’aide de Go runtime.ReadMemStats. Nous déterminons la différence entre le nombre total d’octets alloués avant la création de l’index et après sa création. Cette méthode ne reflète pas parfaitement la consommation de mémoire de l’index en mémoire mais permet toutefois d’observer le profil de consommation approximatif.

Nversionstaille de cléutilisation mémoire
100K164 octets22 Mo
100K564 octets39 Mo
1M164 octets218 Mo
1M564 octets432 Mo
100K1256 octets41 Mo
100K5256 octets65 Mo
1M1256 octets409 Mo
1M5256 octets506 Mo

En fonction du résultat, nous pouvons calculer c1=120bytes, c2=30bytes. Nous n’avons besoin que de deux jeux de données pour calculer c1 et c2, car ce sont les seules variables inconnues dans la formule. Les valeurs c1=120bytes et c2=30bytes correspondent à la moyenne des 4 jeux de c1 et c2 que nous avons calculés. La surcharge liée aux métadonnées clés reste encore relativement importante (50 %) pour des paires clé-valeur de petite taille. Toutefois, il s’agit d’une amélioration significative par rapport au vieux magasin, qui présentait au moins une surcharge de 1000 %.

Utilisation mémoire globale

La consommation mémoire globale indique la quantité de mémoire RSS utilisée par etcd, y compris le stockage. La taille des valeurs devrait avoir très peu d’impact sur la consommation mémoire globale d’etcd, car les valeurs sont conservées sur disque et seules les valeurs fréquemment utilisées sont conservées en mémoire, gérées par le cache de pages du système d’exploitation.

Nversionstaille clétaille valeurutilisation mémoire
100K164 octets256 octets40 Mo
100K564 octets256 octets89 Mo
1M164 octets256 octets470 Mo
1M564 octets256 octets880 Mo
100K164 octets1 Ko102 Mo
100K564 octets1 Ko164 Mo
1M164 octets1 Ko587 Mo
1M564 octets1 Ko836 Mo

En fonction des résultats, nous savons que la taille des valeurs n’a pas d’impact significatif sur la consommation mémoire. Une légère augmentation est observée en raison de données supplémentaires conservées dans le cache de page du système d’exploitation.

2 - Benchmark de l'utilisation mémoire de la surveillance

Mesures de performance pour les observateurs etcd
Note

Les fonctionnalités de surveillance sont en développement actif, et leur utilisation mémoire peut évoluer au cours de ce développement. Nous ne prévoyons pas d’augmentation significative au-delà des valeurs indiquées ci-dessous.

Un objectif principal d’etcd est de prendre en charge un très grand nombre d’observateurs effectuant une surveillance massivement étendue. etcd vise à supporter O(10k) clients, O(100K) flux de surveillance (O(10) flux par client) et O(10M) surveillance totale (O(100) surveillance par flux). La mémoire consommée par chaque surveillance individuelle représente la plus grande partie de l’utilisation globale d’etcd, et constitue donc le point focal des optimisations actuelles et futures.

Trois composants liés de la surveillance etcd consomment de la mémoire physique : chaque grpc.Conn, chaque flux de surveillance et chaque instance d’activité de surveillance. grpc.Conn maintient la connexion TCP réelle et l’état de connexion gRPC associé. Chaque grpc.Conn consomme environ 10 ko de mémoire, et peut avoir plusieurs flux de surveillance attachés.

Chaque flux de surveillance est une connexion HTTP2 indépendante qui consomme une autre quantité de mémoire O(10 ko). Plusieurs surveillance peuvent partager un même flux de surveillance.

La surveillance est la structure réelle qui suit les modifications apportées au magasin clé-valeur. Chaque surveillance ne doit consommer que < 1 Ko.

                                          +-------+
                                          | watch |
                              +---------> | foo   |
                              |           +-------+
                       +------+-----+
                       |   stream   |
      +--------------> |            |
      |                +------+-----+     +-------+
      |                       |           | watch |
      |                       +---------> | bar   |
+-----+------+                            +-------+
|            |         +------------+
|   conn     +-------> |   stream   |
|            |         |            |
+-----+------+         +------------+
      |
      |
      |
      |                +------------+
      +--------------> |   stream   |
                       |            |
                       +------------+

La consommation mémoire théorique de la surveillance peut être approximée par la formule suivante : memory = c1 * number_of_conn + c2 * avg_number_of_stream_per_conn + c3 * avg_number_of_watch_stream

Environnement de test

Version etcd

Type de machine GCE n1-standard-2

  • 7,5 Go de mémoire
  • 2x processeurs

Utilisation mémoire globale

La consommation mémoire globale indique la quantité de RSS consommée par etcd, incluant les observateurs clients. Bien que le résultat puisse varier jusqu’à 10 %, il reste significatif, car l’objectif est de comprendre l’usage mémoire approximatif et le schéma d’allocation.

À partir des résultats du benchmark, nous pouvons estimer approximativement que c1 = 17kb, c2 = 18kb et c3 = 350bytes. Ainsi, chaque connexion cliente supplémentaire consomme 17 ko de mémoire, chaque flux supplémentaire consomme 18 ko de mémoire, et chaque surveillance supplémentaire n’entraîne qu’une augmentation de 350 octets. Un serveur etcd unique peut maintenir des millions de surveillance avec quelques gigaoctets de mémoire dans un cas normal.

clientsflux par clientsurveillance par fluxsurveillance totaleutilisation mémoire
1k111k50Mo
2k112k90Mo
5k115k200Mo
1k10110k217Mo
2k10120k417Mo
5k10150k980Mo
1k50150k1001Mo
2k501100k1960Mo
5k501250k4700Mo
1k5010500k1171Mo
2k50101M2371Mo
5k50102.5M5710Mo
1k501005M2380Mo
2k5010010M4672Mo
5k5010025MOOM

3 - Benchmarking d'etcd v3

Mesures de performance pour etcd v3

Machines physiques

Type de machine GCE n1-highcpu-2

  • 1 disque SSD local dédiqué monté sous /var/lib/etcd
  • 1 disque lent dédié pour le système d’exploitation
  • 1,8 Go de mémoire
  • 2 processeurs
  • version etcd 2.2.0

etcd cluster

1 membre etcd en mode démonstration v3

Test

Utilisez l’outil de benchmark etcd v3 .

Performances

lecture d’une seule clé

taille de la clé en octetsnombre de clientsQPS de lecturelatence au 90e percentile (ms)
256127160,4
25664166236,1
2562561662221,7

Les performances sont presque identiques à celles obtenues avec un gestionnaire de serveur vide.

lecture d’une seule clé après mise

taille de la clé en octetsnombre de clientsQPS de lecturelatence au 90e percentile (ms)
256122690,5
25664135828,6
2562561326247,5

La performance avec un gestionnaire de serveur vide n’est pas affectée par une opération put. Le dégradé de performance doit donc être dû au package de stockage.

4 - Benchmarking etcd v2.2.0-rc-memory

Mesures de performance pour etcd v2.2.0-rc-memory

Machine physique

Type de machine GCE n1-standard-2

  • 1 disque SSD local dédié monté sous /var/lib/etcd
  • 1 disque lent dédié pour le système d’exploitation
  • 7,5 Go de mémoire
  • 2 processeurs

etcd

etcd Version: 2.2.0-rc.0+git
Git SHA: 103cb5c
Go Version: go1.5
Go OS/Arch: linux/amd64

Test

Démarrez un cluster etcd composé de 3 membres, chacun utilisant 2 cœurs.

La longueur du nom de clé est toujours de 64 octets, ce qui constitue une longueur raisonnable pour une clé moyenne.

Utilisation maximale mémoire

  • etcd peut utiliser une mémoire maximale si un suiveur est défaillant et que le leader continue d’envoyer des instantanés.
  • max RSS est la consommation mémoire maximale enregistrée sur 3 exécutions.
taille valeur (octets)nombre de cléstaille données (Mo)RSS maximal (Mo)débit maximal RSS/data sur le leader
12850000643372x
1281000001265954x
12820000024146661x
10245000048125326x
102410000096234424x
1024200000192436122x

Seuil de taille des données

  • Lorsque etcd atteint le seuil de taille des données, il peut déclencher facilement une élection de leader et rejeter une partie des propositions.
  • Dans la plupart des cas, le cluster etcd fonctionne correctement s’il ne dépasse pas ce seuil. Si le fonctionnement est dégradé en raison d’une ressource insuffisante, réduisez la taille des données.
taille en octetslimitation sur le nombre de clésseuil de taille de données suggéré (Mo)mémoire RSS consommée (Mo)
128400K482400
1024300K2926500

5 - Benchmarking etcd v2.2.0-rc

Mesures de performance pour etcd v2.2.0-rc

Machine physique

Type de machine GCE n1-highcpu-2

  • 1 disque SSD local dédié monté sous /var/lib/etcd
  • 1 disque lent dédié pour le système d’exploitation
  • 1,8 Go de mémoire
  • 2 processeurs

etcd cluster

3 membres etcd 2.2.0-rc, chacun exécuté sur une seule machine.

Versions détaillées :

etcd Version: 2.2.0-alpha.1+git
Git SHA: 59a5a7e
Go Version: go1.4.2
Go OS/Arch: linux/amd64

En outre, nous utilisons 3 membres etcd 2.1.0 en phase alpha pour constituer le cluster et obtenir des performances de base. La tête du commit d’etcd est située à c7146bd5 , identique à celle utilisée dans benchmark etcd 2.1 .

Test

Initialisez une autre machine et utilisez l’outil de benchmark HTTP hey pour envoyer des requêtes à chaque membre etcd. Consultez le guide de manipulation du benchmark pour des instructions détaillées.

Performances

lecture d’une seule clé

taille de la clé en octetsnombre de clientsserveur etcd cibledébit de lecture (QPS)latence au 90e percentile (ms)
641seul leader2804 (-5%)0,4 (+0 %)
6464seul leader17816 (+0 %)5,7 (-6%)
64256seul leader18667 (-6%)20,4 (+2 %)
2561seul leader2181 (-15%)0,5 (+25 %)
25664seul leader17435 (-7%)6,0 (+9 %)
256256seul leader18180 (-8%)21,3 (+3 %)
6464tous les serveurs46965 (-4%)2,1 (+0 %)
64256tous les serveurs55286 (-6%)7,4 (+6 %)
25664tous les serveurs46603 (-6%)2,1 (+5 %)
256256tous les serveurs55291 (-6%)7,3 (+4 %)

écriture d’une seule clé

taille de la clé en octetsnombre de clientsserveur etcd cibledébit d’écriture QPSlatence au 90e percentile (ms)
641seul leader76 (+22%)19,4 (-15%)
6464seul leader2461 (+45%)31,8 (-32%)
64256seul leader4275 (+1%)69,6 (-10%)
2561seul leader64 (+20%)16,7 (-30%)
25664seul leader2385 (+30%)31,5 (-19%)
256256seul leader4353 (-3%)74,0 (+9%)
6464tous les serveurs2005 (+81%)49,8 (-55%)
64256tous les serveurs4868 (+35%)81,5 (-40%)
25664tous les serveurs1925 (+72%)47,7 (-59%)
256256tous les serveurs4975 (+36%)70,3 (-36%)

explication des modifications de performance

  • Le QPS de lecture est généralement réduit de 5 à 8 % dans la plupart des scénarios. La raison en est que etcd enregistre des métriques pour chaque opération de stockage. Ces métriques sont importantes pour la surveillance et le débogage, ce qui rend cette réduction acceptable.

  • Le QPS d’écriture vers le leader augmente de 20 à 30 %. Cela est dû à la déconnexion de la boucle principale Raft et de la boucle d’application des entrées, ce qui empêche leurs blocages mutuels.

  • Le débit d’écriture QPS sur tous les serveurs augmente de 30 à 80 % car le suiveur peut recevoir plus tôt l’index de validation le plus récent et valider les propositions plus rapidement.

6 - Benchmarking d'etcd v2.2.0

Mesures de performance pour etcd v2.2.0

Machines physiques

Type de machine GCE n1-highcpu-2

  • 1 disque SSD local dédié monté en répertoire de données etcd
  • 1 disque lent dédié pour le système d’exploitation
  • 1,8 Go de mémoire
  • 2 processeurs

etcd cluster

3 membres etcd 2.2.0, chacun exécuté sur une machine unique.

Versions détaillées :

etcd Version: 2.2.0
Git SHA: e4561dd
Go Version: go1.5
Go OS/Arch: linux/amd64

Test

Initialisez une autre machine, en dehors du cluster etcd, puis exécutez l’outil de benchmark HTTP hey avec un correctif de réutilisation de connexion pour envoyer des requêtes à chaque membre du cluster etcd. Consultez les instructions de benchmark pour obtenir le correctif et les étapes permettant de reproduire nos procédures.

Les performances sont calculées à partir des résultats de 100 itérations de benchmark.

Performances

Performance de lecture d’une clé unique

taille de la clé en octetsnombre de clientsserveur etcd cibledébit moyen de lecture (QPS)écart-type du débit de lecture (QPS)latence moyenne au 90e percentile (ms)écart-type de la latence
641seul leader23032000,490,06
6464seul leader150486857,600,46
64256seul leader1450843429,761,05
2561seul leader21622140,520,06
25664seul leader147897927,690,48
256256seul leader1442451229,921,42
6464tous les serveurs4575220482,470,14
64256tous les serveurs46592127310,140,59
25664tous les serveurs4533218472,480,12
256256tous les serveurs46485134010,180,74

Performance d’écriture pour une clé unique

taille de la clé en octetsnombre de clientsserveur etcd cibledébit moyen d’écriture QPSécart-type du débit d’écriture QPSlatence moyenne au 90e percentile (ms)écart-type de la latence
641leader uniquement55424,5113,26
6464leader uniquement213912535,233,40
64256leader uniquement458158170,5310,22
2561leader uniquement56422,374,33
25664leader uniquement205215136,834,20
256256leader uniquement444256071,5910,03
6464tous les serveurs16258558,515,14
64256tous les serveurs446129889,4736,48
25664tous les serveurs15999460,116,43
256256tous les serveurs431519388,987,01

Améliorations des performances

  • Comme etcd enregistre désormais des métriques pour chaque appel d’API, la performance en QPS de lecture semble légèrement diminuer dans la plupart des scénarios. Ce léger impact sur les performances a été jugé acceptable en échange de la richesse des informations de surveillance et de débogage fournies.

  • Le taux de requêtes d’écriture QPS vers les leaders du cluster semble avoir légèrement augmenté. Cela est dû au fait que la boucle principale et les boucles d’entrée ont été déconnectées dans la logique Raft d’etcd, éliminant plusieurs blocages entre elles.

  • Le QPS d’écriture vers tous les membres semble avoir augmenté de manière significative, car les suiveurs reçoivent désormais l’index de validation le plus récent plus rapidement, et traitent les propositions de validation plus rapidement.

7 - Test de performance d'etcd v2.1.0

Mesures de performance pour etcd v2.1.0

Machines physiques

Type de machine GCE n1-highcpu-2

  • 1 disque SSD local dédié monté sous /var/lib/etcd
  • 1 disque lent dédié pour le système d’exploitation
  • 1,8 Go de mémoire
  • 2 processeurs
  • version etcd 2.1.0 alpha

etcd cluster

3 membres etcd, chacun exécuté sur une machine unique

Test

Initialisez une autre machine et utilisez l’outil de benchmark HTTP hey pour envoyer des requêtes à chaque membre etcd. Consultez le guide de manipulation du benchmark pour des instructions détaillées.

Performances

lecture d’une seule clé

taille de la clé en octetsnombre de clientsserveur etcd cibleQPS de lectureLatence au 90e percentile (ms)
641seul leader15340,7
6464seul leader101259,1
64256seul leader1389227,1
2561seul leader15300,8
25664seul leader1010610,1
256256seul leader1466727,0
6464tous les serveurs242003,9
64256tous les serveurs3330011,8
25664tous les serveurs248003,9
256256tous les serveurs3300011,5

écriture d’une seule clé

taille de la clé en octetsnombre de clientsserveur etcd cibledébit d’écriture (QPS)latence au 90e percentile (ms)
641seul leader6021,4
6464seul leader1 74246,8
64256seul leader3 98290,5
2561seul leader5820,3
25664seul leader1 77047,8
256256seul leader4 157105,3
6464tous les serveurs1 028123,4
64256tous les serveurs3 260123,8
25664tous les serveurs1 033121,5
256256tous les serveurs3 061119,3