J'ai un processeur à 4 cœurs, je crée un pod Kubernetes avec une limite de ressources de processeur de 100 m, ce qui signifie qu'il occupera 1/10 de la puissance du cœur.
Je me demande dans ce cas, 100m n'est même pas un noyau complet, si mon application est une application multithread, les threads de mon application fonctionneront-ils en parallèle? Ou tous les threads s'exécuteront-ils uniquement dans la partie du noyau (100 milli-core)?
Quelqu'un peut-il expliquer davantage le mécanisme derrière?
La réponse la plus proche que j'ai trouvée jusqu'à présent est la suivante ne :
Pour un programme à un seul thread, une utilisation du processeur de 0,1 signifie que si vous pouvez geler la machine à un moment aléatoire et regarder ce que fait chaque core, il y a 1 chance sur 10 que votre thread unique fonctionne à cet instant. Le nombre de cœurs sur la machine n'affecte pas la signification de 0,1. Pour un conteneur avec plusieurs threads, l'utilisation du conteneur est la somme de l'utilisation de son thread (selon la définition précédente.) Il n'y a aucune garantie sur le noyau sur lequel vous exécutez et vous pouvez exécuter sur un autre core à différents moments de la vie de votre conteneur . Une limite de CPU de 0,1 signifie que votre utilisation n'est pas autorisée à dépasser 0,1 pendant une période de temps significative. Une demande de CPU de 0,1 signifie que le système essaiera de s'assurer que vous pouvez avoir une utilisation de CPU d'au moins 0,1, si votre thread ne bloque pas souvent.
Je pense que ci-dessus semble assez logique. Sur la base de ma question, un cœur de 100 m de puissance CPU se répartira sur tous les cœurs de processeur, ce qui signifie que le multithreading devrait fonctionner dans Kubernetes.
Jetez un œil à cette documentation relative aux ressources dans Kubernetes:
Vous pouvez utiliser des ressources comme décrit dans l'article:
Pour spécifier une demande de processeur pour un conteneur, incluez le champ
resources:requests
Dans le manifeste de ressources du conteneur. Pour spécifier une limite CPU, incluezresources:limits
.Dans cet exercice, vous allez créer un pod contenant un conteneur. Le conteneur a une demande de 0,5 CPU et une limite de 1 CPU. Voici le fichier de configuration du Pod:
apiVersion: v1
kind: Pod
metadata:
name: cpu-demo
namespace: cpu-example
spec:
containers:
- name: cpu-demo-ctr
image: vish/stress
resources:
limits:
cpu: "1"
requests:
cpu: "0.5"
args:
- -cpus
- "2"
En plus de votre question: Oui, cela ne fonctionnera pas en parallèle (threads multi-core). Mais vous pouvez afficher quelques core pour votre application dans le pod, puis utiliser plusieurs threads pour l'exécuter.
La section
args
du fichier de configuration fournit des arguments pour le conteneur au démarrage. L'argument-cpus "2"
Indique au conteneur de tenter d'utiliser 2 CPU.