web-dev-qa-db-fra.com

Quel est le nombre maximal de cœurs de processeur virtuel disponibles dans AWS Lambda?

J'essaie de trouver le nombre maximal de cœurs de processeur virtuel disponibles dans AWS Lambda. La documentation officielle implique qu'elle évolue avec la quantité de mémoire configurée:

Dans le modèle de ressource AWS Lambda, vous choisissez la quantité de mémoire que vous souhaitez pour votre fonction et vous allouez une puissance CPU proportionnelle et d'autres ressources. Par exemple, choisir 256 Mo de mémoire alloue environ deux fois plus de puissance CPU à votre Lambda. fonctionnent comme demandant 128 Mo de mémoire et la moitié de la puissance CPU par rapport au choix de 512 Mo de mémoire.

Cependant, l'exécution de l'extrait de code suivant m'obtient Number of cores = 2 même si je configure la plus grande quantité de mémoire requise: 1536 Mo.

package example;

import Java.io.{ InputStream, OutputStream }

class Main {
  def main(input: InputStream, output: OutputStream): Unit = {   
    val result = "Number of cores = " + Runtime.getRuntime().availableProcessors()
    output.write(result.getBytes("UTF-8"))
  }
}

Alors qu'est-ce qui se passe ici? Suis-je en train d'utiliser les processeurs disponibles () de manière incorrecte ou erronée? Ou existe-t-il d'autres configurations qui nécessitent davantage de cœurs?

28

Conformément à AWS Lambda documentation et forum , AWS ne précise pas quels types d'instance qu'AWS utilise pour ce service. Fin 2014, AWS a utilisé des instances similaires à compute-optimize . Et maintenant, AWS utilise des instances générales - similaires.

Le partage CPU dédié à une fonction est basé sur la fraction de sa mémoire allouée, pour chacun des deux cœurs. Par exemple, une instance avec ~ 3 Go de mémoire disponible pour les fonctions lambda où chaque fonction peut avoir jusqu'à 1 Go de mémoire signifie au plus que vous pouvez utiliser ~ 1/3 * 2 cœurs = 2/3 du CPU. Les détails peuvent être revus à l'avenir, mais c'est la nature fractionnaire de notre modèle d'utilisation.

Vous ne pouvez utiliser que la puissance CPU proportionnelle à la mémoire. Bien que la mémoire inférieure et supérieure se trouvent dans la même instance, elles partageront la puissance CPU proportionnelle, ce qui signifie que la mémoire supérieure obtiendra plus de puissance CPU. Si vous lisez le nombre total de cœurs de votre processeur est 2, cela ne signifie pas que vous pouvez utiliser pleinement tout le processeur.

Actuellement, il n'y a aucun moyen de configurer le CPU. Seule la mémoire totale que vous pouvez ajuster.

22
Edward Samuel

Vous posez la mauvaise question, je pense (ou voulez utiliser Lambda pour quelque chose où il n'est pas conçu). Une fonction Lambda ne dispose que d'un ou deux cœurs, cependant, la puissance de Lambda est que vous pouvez en exécuter des centaines en même temps. La limite par défaut du nombre de fonctions Lambda actives est de 100, mais ce n'est qu'une limite pour protéger l'infrastructure (et votre portefeuille). Vous pouvez en demander plus.

Ainsi, votre compte peut avoir 100 fonctions Lambda en cours d'exécution en même temps, que vous pourriez voir comme 100 cœurs (mais ce n'est pas le cas). Si vous demandez une augmentation de limite, celle-ci peut également être de 1 000 ou 10 000 ou 100 000.

Analogie: au lieu d'avoir 1 ordinateur 100 cœurs, vous avez 100 ordinateurs 1 cœur.

17
Luc Hendriks

Alors qu'AWS jusqu'à aujourd'hui n'a divulgué aucun détail concernant la puissance de traitement des fonctions AWS Lambda, ils l'ont fait après annonçant une augmentation de la mémoire maximale de 1536 Mo à 3008 Mo . Leur documentation indique maintenant:

Les fonctions supérieures à 1536 Mo se voient allouer plusieurs threads de CPU et un code multi-thread ou multi-processus est nécessaire pour tirer parti des performances supplémentaires.

Sur cette base, nous pouvons conclure que toutes les fonctions AWS Lambda jusqu'à 1536 Mo de mémoire ont un seul cœur de processeur virtuel disponible, tandis que les fonctions avec plus de mémoire ont deux cœurs disponibles.

Mise à jour:

Bien que cette partie de la documentation ne soit plus disponible, Chris Munns d'AWS récemment lors de la journée de démarrage sans serveur AWS le 2018-07-10 a révélé que toutes les fonctions AWS Lambda avec plus de 1,8 Go de mémoire sont fonctionnant sur plusieurs cœurs. Donc, apparemment, la frontière entre un cœur et plusieurs cœurs pour les fonctions AWS Lambda est passée de 1,5 Go à 1,8 Go.

10
Dunedan