Je voudrais comprendre de manière approfondie le coût de performance d'exécution d'un conteneur Docker. J'ai trouvé des références à la mise en réseau anecdotique étant ~ 100µs plus lente .
J'ai également trouvé des références au coût d'exécution "négligeable" et "proche de zéro" mais j'aimerais savoir plus précisément quels sont ces coûts. Idéalement, j'aimerais savoir ce que Docker fait avec un coût de performance et les choses qui sont abstraites sans coût de performance. Réseaux, CPU, mémoire, etc.
De plus, s'il y a des coûts d'abstraction, existe-t-il des moyens de contourner le coût d'abstraction. Par exemple, je peux peut-être monter un disque directement contre virtuellement dans Docker.
performance
docker
Luke Hoersten
la source
la source
Réponses:
Un excellent document de recherche IBM 2014 « Une comparaison des performances mise à jour des machines virtuelles et des conteneurs Linux » par Felter et al. fournit une comparaison entre les conteneurs bare metal, KVM et Docker. Le résultat général est: Docker est presque identique aux performances natives et plus rapide que KVM dans toutes les catégories.
L'exception à cela est le NAT de Docker - si vous utilisez le mappage de port (par exemple,
docker run -p 8080:8080
), vous pouvez vous attendre à un impact mineur dans la latence, comme indiqué ci-dessous. Cependant, vous pouvez désormais utiliser la pile du réseau hôte (par exemple,docker run --net=host
) lors du lancement d'un conteneur Docker, qui fonctionnera de manière identique à la colonne Native (comme indiqué dans les résultats de latence Redis plus bas).Ils ont également effectué des tests de latence sur quelques services spécifiques, tels que Redis. Vous pouvez voir qu'au-dessus de 20 threads client, la surcharge de latence la plus élevée va Docker NAT, puis KVM, puis un lien approximatif entre Docker hôte / natif.
Juste parce que c'est un document vraiment utile, voici quelques autres chiffres. Veuillez le télécharger pour un accès complet.
Jetez un œil aux E / S disque:
Examinons maintenant les frais généraux du processeur:
Maintenant, quelques exemples de mémoire (lisez le document pour plus de détails, la mémoire peut être très compliquée):
la source
--net=host
(deux tirets) et-p 8080:8080
(minuscule 'p') pour NAT.Docker n'est pas la virtualisation en tant que telle - c'est plutôt une abstraction en plus de la prise en charge du noyau pour différents espaces de noms de processus, espaces de noms de périphériques, etc. un espace de noms n'est pas intrinsèquement plus cher ou inefficace qu'un autre, donc ce qui fait réellement Docker avoir un impact sur les performances est une question de ce qui est réellement dans ces espaces de noms.
Les choix de Docker en termes de configuration des espaces de noms pour ses conteneurs ont des coûts, mais ces coûts sont tous directement associés aux avantages - vous pouvez les abandonner, mais ce faisant, vous renoncez également aux avantages associés:
Et ainsi de suite. Dans quelle mesure ces coûts vous affectent réellement dans votre environnement - avec vos modèles d'accès au réseau, vos contraintes de mémoire, etc. - est un élément pour lequel il est difficile de fournir une réponse générique.
la source
Voici quelques références supplémentaires par
Docker based memcached server
rapport à l'host native memcached server
utilisation de l'outil de référence Twemperf https://github.com/twitter/twemperf avec 5000 connexions et un taux de connexion de 20kLa surcharge de temps de connexion pour les memcaches basés sur les dockers semble être en accord avec le livre blanc ci-dessus à environ deux fois la vitesse native.
Twemperf Docker Memcached
Twemperf Centmin Mod Memcached
Voici les bencmarks en utilisant l'outil de benchmark memtier
memtier_benchmark docker Memcached
memtier_benchmark Centmin Mod Memcached
la source
avg 200.5 min 0.6 max 263.2 stddev 73.85