797 votes

Quel est le coût de performance de DUREE d’un conteneur de Docker

J'aimerais complètement comprendre les performances d'exécution coût d'un conteneur Docker. J'ai trouvé des références à la mise en réseau de façon anecdotique être ~100µs plus lent.

J'ai aussi trouvé des références à l'exécution, le coût étant "négligeable" et "proche de zéro", mais j'aimerais savoir plus précisément ce que ces coûts. Idéalement, j'aimerais savoir ce Panneau est l'abstraction avec un coût de performance et les choses qui sont extraites sans un coût de performance. Mise en réseau, CPU, mémoire, etc.

En outre, s'il y a abstraction des coûts, il y a des façons de contourner l'abstraction des coûts. Par exemple, peut-être que je peut monter un disque directement contre pratiquement dans le Panneau.

722voto

Hamy Points 5700

Ici est un excellent IBM document de recherche intitulé "Une mise à Jour de Comparaison des Performances des Machines Virtuelles Linux et Conteneurs" par Felter et coll. qui fournit une comparaison entre le métal nu, KVM, et les conteneurs Docker.

Ils comparent diskIO, CPU, réseau, etc. Le résultat général est que Docker est plus rapide que KVM dans chaque catégorie et à peine pire que de Natifs. Malheureusement, ils n'ont pas fini de toutes les comparaisons des réseaux, de sorte que certains du réseau des tables de ressembler à l'image ci-dessous.

Docker network overhead

Maintenant, NAT est une jolie chose lourde et le Panneau de mise en œuvre de ce n'est pas exactement la bataille a testé plus de 10 ans, donc peut-être l'ed NAT la surcharge du réseau est le seul cas où KVM surpasse Docker. Cependant, vous pouvez maintenant utiliser le réseau de l'hôte de la pile lors du lancement d'un conteneur Docker. Si vous faites cela, je pense que la plupart des chercheurs conviennent que (compte tenu des autres résultats dans le papier), le résultat attendu de la surcharge du réseau serait mentir entre les Indigènes et KVM (par exemple, dans le diagramme ci-dessus, une barre de menu fixe Hôte devrait être tout au plus ~62us de haut).

Ci-dessous l'a confirmé - ils ont couru un test de réseau sur quelques-uns des services spécifiques tels que le Redis. Vous pouvez voir que plus de 20 threads de client, la latence la plus élevée de surcharge va Docker NAT, puis KVM, puis un accidenté de la cravate pour le Panneau d'accueil/native.

docker redis latency overhead

Si vous êtes si incliné, envoyez un courriel aux auteurs pour une mise à jour et demander s'ils ont des résultats terminé sur le NAT frais généraux - la plupart des auteurs sont très heureux d'aider quelqu'un qui est intéressé dans leurs résultats!

Juste parce que c'est vraiment utile de papier, voici quelques autres chiffres. S'il vous plaît télécharger pour un accès complet.

En prenant un coup d'oeil à e / s de Disque:

IO docker vs kvm vs native

Maintenant à la recherche à la charge du CPU:

docker cpu overhead

Maintenant quelques exemples de mémoire (lire l'article pour plus de détails, la mémoire peut être très compliqué)

docker memory comparison

183voto

Charles Duffy Points 34134

Docker n'est pas de la virtualisation, en tant que tel, au lieu de cela, c'est une abstraction sur le dessus de la charge du noyau pour les différents processus d'espaces de noms, périphérique d'espaces de noms, etc.; un espace de noms n'est pas forcément les plus chers ou inefficace qu'un autre, donc ce qui fait réellement Docker ont un impact sur les performances est une question de ce qui est fait dans ces espaces de noms.


Le panneau de choix en termes de la façon dont il configure les espaces de noms pour ses conteneurs ont des coûts, mais ces coûts sont directement associées à des avantages -- vous pouvez leur donner, mais vous donnent aussi les avantages associés:

  • En couches des systèmes de fichiers sont cher, exactement ce que les coûts varient avec chacun (et Docker prend en charge plusieurs backends), et avec vos habitudes d'utilisation (la fusion de plusieurs grands répertoires, ou la fusion d'un très profond ensemble de systèmes de fichiers seront particulièrement cher), mais ils ne sont pas gratuits. D'autre part, une grande partie de Support de la fonctionnalité, en étant capable de construire des invités d'autres invités dans une copie sur écriture manière, et d'obtenir le stockage des avantages implicite dans le même -- monter à payer ce coût.
  • DNAT se coûteux à l'échelle-mais vous donne l'avantage d'être en mesure de configurer votre client de réseau indépendamment de votre accueil et d'avoir une interface pratique pour le transfert uniquement les ports que vous souhaitez entre eux. Vous pouvez remplacer ce dernier par un pont à une interface physique, mais encore une fois, de perdre le bénéfice.
  • Être en mesure d'exécuter chaque pile logicielle avec ses dépendances installé dans le plus commode manière, indépendant de l'hôte de la distribution, de la libc, et d'autres versions de la bibliothèque, qui est un grand avantage, mais avoir besoin de charger des bibliothèques plus d'une fois (lors de leurs versions diffèrent) est le coût que vous attendez.

Et ainsi de suite. Combien de ces coûts réellement un impact sur vous, dans votre environnement -- avec votre réseau de modèles d'accès, de vos contraintes de mémoire, etc, c'est un élément pour lequel il est difficile de fournir une réponse générique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X