web-dev-qa-db-fra.com

Inconvénients de la gestion d'un serveur de travailleurs AWS à 100% de la CPU

Sur une machine (AWS M5.Large) qui ne fonctionne que Nice 'D Emploi de traitement de fond (c.-à-d. Aucun serveur Web/DB/ETC présent), existe-t-il des inconvénients pour exécuter systématiquement la CPU à 100%?

Je comprends que l'exécution du système de sorte qu'il consomme 100% de la mémoire disponible n'est pas une bonne idée. Sans échange, le système va simplement tuer des processus lorsqu'il manque de mémoire. Même avec échange, le système commencera à échanger des pages qui ralentit considérablement le système complet.

Cependant, ma compréhension est qu'un système avec Nice 'D processus exécutant à 100% d'utilisation de la CPU fonctionnera sans ralentissement dramatique. Est-ce correct?

Ou, serait-il préférable d'essayer de configurer les processus d'arrière-plan de manière à que le système reste dans la plage de 60% à 90% de la CPU?

10
rinogo

Que ce soit Nice _ ou non, exécuté à 100% de CPU signifie que vous ne traiterez pas vos emplois aussi rapidement que possible, si vous aviez plus de CPU disponible. L'ensemble du système ralentit effectivement. La seule chose Nice fait pour vous de vous laisser indiquer quels processus ont une priorité plus élevée ou plus basse et devraient avoir plus ou moins de votre processeur déjà limité.

Si vos emplois sont plus lents que prévu, la seule chose qui fera une différence significative est de leur donner plus de processeur. Si vous le prenez d'autres emplois, ces travaux ralentissent. Si vous mettez à niveau votre CPU, tout fonctionnera plus vite. Bien sûr, puisque c'est EC2, vous pouvez également ajouter d'autres instances.

6
Michael Hampton

Il n'y a pas de problème à exécuter une CPU à 100%.

Même dans le cas improbable que votre matériel spécifique avait un problème de refroidissement menant à la surchauffe, car il s'agit d'un serveur AWS, ce serait le problème d'Amazon, pas le vôtre (soyez assuré, ils ont pris en compte dans leur modèle de tarification)

Si cela n'a pas fait ce travail, il serait resserré inactif, donc si vous avez besoin d'un emploi de $, mieux le faire. Vous ne voulez pas vous restreindre artificiellement.

L'inconvénient principal utiliserait la CPU en continu à 100% aura besoin de plus de puissance. Mais vous vouliez que cette tâche soit faite, non? ¹

(¹ Notez que dans certains cas comme mining Bitcoin, le coût de l'électricité est supérieur à la valeur des bitcoins ministres)

Deuxièmement, si la CPU système est entièrement utilisée à 100% de faire une tâche non trop importante (comme Crunching Stiti Packets), il pourrait arriver que quelque chose de plus important est arrivé (comme une demande interactive du propriétaire), mais l'ordinateur ne "T Faites attention à cela très rapidement parce qu'il était occupé à traiter ces paquets. Ceci est résolu en ne faisant pas une tâche moins importante. Ensuite, le système connaît comment les hiérarchiser et vous éviter ce problème.

Dans certains endroits, vous pouvez voir qu'il est mauvais d'avoir un serveur qui fonctionne à 100%. Un serveur avec CPU à 100% montre un goulot d'étranglement dans le processus. Vous pourriez produire plus avec plus de processeurs ou plus rapidement, mais aussi longtemps que vous êtes assez heureux avec le débit, c'est bon. Vous pouvez penser à cela comme un magasin où tous les greffiers où toujours occupé. C'est probablement mauvais, car plus de clients ne peuvent pas acheter là-bas car ils ne peuvent pas être servis.

Cependant, si nous avons un entrepôt avec des articles à trier, sans date limite particulière et suffisamment de travail pour les 5 années suivantes, vous volonté Vous voulez que tout le monde travaille à plein temps, ne pas garder à l'heure actuelle.

Si l'entrepôt se trouve à proximité du magasin, vous pouvez combiner les choses: vous avez les commis au service des clients, et quand il ne reste plus de clients, ils avancent le tri de l'entrepôt, jusqu'à ce que le prochain client arrive.

Traditionnellement, vous avez un certain matériel dédié et c'est à vous de l'utiliser plus ou moins. Dans un modèle comme AWS, vous avez plus d'options, cependant. (Remarque: je suppose que votre tâche est composée de nombreux petits morceaux facilement parallélisables)

  • Utilisez une seule instance de taille X pour aussi longtemps que nécessaire
  • Utilisez une instance plus rapide de taille x + n
  • Utilisez une instance plus lente mais moins chère, prenant plus de temps
  • Utiliser plusieurs instances

Dans certains cas, vous pouvez utiliser plusieurs autres cas pour le coût d'un gros, obtenir plus de résultats (alors que d'autres ensembles de tâches ne le feraient pas).

De plus, les coûts ne sont pas fixes. Vous pouvez probablement profiter en lançant des instances supplémentaires hors des heures, quand elles sont moins chères mais les rétrécissantes quand elles seront plus chères. Supposons que vous ayez pu emprunter le greffier des magasins voisins (à un certain taux variable). Le magasin ouvert 24 heures sur 24 pouvait heureusement vous laisser l'employé de faire le quart de nuit Trier certains de vos articles d'entrepôt à moindre coût, car seule une poignée de clients passera par. Cependant, si vous vouliez une paire supplémentaire de mains sur le vendredi noir, ce serait beaucoup plus cher. (En fait, mieux de ne pas avoir personne de trier l'entrepôt ce jour-là)

AWS vous permet de faire beaucoup de charge dynamique, et lorsque vous n'avez pas aux réponses de l'heure x, vous pouvez optimiser vos coûts sensiblement. Cependant, ils ont "trop ​​d'options" et ils sont complexes à comprendre. Vous devez également comprendre assez bien votre charge de travail afin de prendre les bonnes décisions.

4
Ángel

Cela dépend

Certaines charges de travail, telles que l'apprentissage de la machine, le rendu 3-D, le transcodage multimédia, l'exploitation minière de cryptocurrence, sont conçues pour fonctionner à 100% de CPU (*). Ces types de charges de travail sont souvent optimisés pour diviser leurs tâches en blocs de forme égale et utiliser 100% de tout pipeline d'instructions de chaque processeur sur la boîte. Si vous faites une puanteur d'utilisation de 100% de la CPU dans ces cas, vos collègues pensent que vous êtes un idiot. Votre question ne mentionne aucune de ces charges de travail spécialisées, alors lisez-la.

Pour les charges de travail professionnelles générales, vous traitez souvent des logiciels trop compliqués et mal écrits qui doivent traiter des tâches dans des blocs en forme irrégulière arrivant à des intervalles imprévisibles. Pour ce type de charge de travail, la faim de la CPU peut entraîner une instabilité du système et des spirales de mort en raison de "co-morbidités". Certaines de ces "co-morbidités" incluent une utilisation de la mémoire imprévisible, des connexions de base de données, un verrouillage de la base de données et des configurations de délai de sortie.

Exemple: Supposons que vous ayez un processus qui prend deux minutes à compléter lorsqu'il dispose de 100% de la CPU à elle-même, mais le temps augmente à 10 minutes lorsque cela doit partager la CPU avec quatre autres processus. Supposons maintenant que chaque processus détient une connexion de base de données externe tout au long de son exécution et que le pool de connexion recycle des connexions de plus de 10 minutes. Puis...

Bzzzzzz.

C'est le son de votre téléavertisseur au milieu de la nuit en raison d'une défaillance mystérieuse de ce travail de lot qui n'a pas été modifiée dans mois, car le nombre de connexions de base de données a été maximum. ou la durée de connexion a commencé à se ramener au-dessus du maximum de 10 minutes configuré. Une spirale de mort débute à mesure que les processus passent en mode réessayant et que de nouvelles tâches arrivent, et très bientôt, vous ne pouvez même obtenir aucune télémétrie ou connexion à l'instance.

(*) Ignorons les charges de travail liées à GPU pour l'instant, ce serait une nouvelle question.

2
Alex R

Oui, en cours d'exécution à 100% de processeur, c'est bien, pas besoin d'utiliser Nice Ici, ce qui ne réduit que les processus prioritaires des processus vs des processus que vous n'avez pas.

Si ce sont des calculs uniquement avec une extrémité définie et qu'aucune interactivité n'est attendue, j'irais plus loin et utilisez-les SCHED_BATCH, qui augmente les tranches de temps à plus d'une seconde et dans une situation de mémoire faible priorise la progression de l'équité en matière d'équité dans la planification, sous l'hypothèse que les processus finissent par se terminer et libérer toute leur mémoire si vous leur donnez plus de temps de processeur.

2
Simon Richter