Cosa devo sapere sull'allocazione della CPU in Amazon ECS?

Ultimo aggiornamento: 15/04/2022

Sto cercando informazioni relative all'allocazione della CPU ai processi in Amazon Elastic Container Service (Amazon ECS).

Breve descrizione

Quando si crea una definizione di processo, è possibile definire limiti per le risorse della CPU. Questi limiti possono essere definiti a livello di processo e container.

Le prestazioni complessive del cluster Amazon ECS vengono influenzate da questi limiti. A seconda dei comportamenti di Amazon ECS e del caso d'uso, è necessario regolare i valori di allocazione della CPU a livello di processo e di container. Utilizzare le seguenti informazioni per determinare l'allocazione della CPU che soddisfa i requisiti del carico di lavoro e delle applicazioni.

Risoluzione

Amazon ECS utilizza un'unità di misura standard per le risorse della CPU chiamate unità CPU. 1024 unità CPU sono l'equivalente di 1 vCPU.

Ad esempio, 2048 unità CPU equivalgono a 2 vCPU.

Nota: quando si definiscono le definizioni dei processi, è possibile utilizzare anche 1 vCPU anziché 1024. Quando la definizione del processo è registrata, ECS traduce il valore in unità.

Allocazione della CPU a livello di processo

I processi di Amazon ECS possono essere eseguiti su istanze AWS Fargate o Amazon Elastic Compute Cloud (Amazon EC2).

Quando imposti il parametro cpu a livello di processo, imposterai anche la quantità massima di risorse della CPU consentite ai container in un processo.

AWS Fargate

AWS Fargate richiede un parametro cpu a livello di processo per allocare le risorse richieste al processo. È possibile selezionare la memoria e la CPU tra le dimensioni di processo predefinite disponibili per AWS Fargate. Per ulteriori informazioni sulle diverse combinazioni, consulta la sezione Memoria e CPU dei processi nella Guida per gli sviluppatori di AWS Fargate.

Amazon EC2

Quando si eseguono processi su Amazon EC2, il parametro cpu è facoltativo.

Se definisci il parametro cpu, considera quanto segue:

  • I container avranno un accesso limitato in base alla quantità di cpu definita.
  • La quantità definita nel parametro cpu diventa la prenotazione della CPU per il processo da pianificare su un'istanza del container.
    Nota: questo vale anche per la definizione a livello di container.

Ad esempio, un parametro cpu definito su Amazon EC2 con la seguente configurazione avrà 1024 unità CPU rimaste nel suo pool:

  • Un'istanza EC2 m5.large registrata in un cluster ECS come istanza di container per un totale di 2048 unità CPU.
  • Un processo con cpu: 1024 definita a livello di processo è in esecuzione sull'istanza.
  • CPUUtilization EC2 dell'istanza attuale è pari al 68%.

L’attuale CPUUtilization non influisce sul numero di unità CPU disponibili nell'istanza di container per la pianificazione dei processi. Anche se l'istanza supera il 50% del suo utilizzo, la metà delle unità del pool sarà comunque disponibile per l'avvio di nuovi processi. Questo perché il parametro agisce solo come riserva e limite della CPU e non si traduce direttamente nell'utilizzo della CPU stessa.

Con questo esempio, ci sono diversi risultati che possono verificarsi quando si tiene conto solo della CPU:

  • È possibile pianificare altre due processi con cpu: 512 definita nelle definizioni a livello di processo o a livello di container.
  • È possibile pianificare un processo, con due container, con cpu: 1024 definita a livello di processo e cpu: 512 definita a livello di container in ciascun container.
  • Se la cpu non è definita, è possibile pianificare tutte i processi supportati da ECS per la modalità di rete selezionata. Le unità CPU disponibili nell'istanza del container ECS per la pianificazione non vengono influenzate.

Allocazione della CPU a livello di container

Le definizioni della cpu a livello di container vengono considerate nei seguenti scenari:

Al momento della pianificazione:

  • Quando la definizione della cpu a livello di processo non è impostata, la quantità totale di unità CPU definite nei container diventa la prenotazione della CPU.
  • Il numero totale di unità di CPU nella definizione a livello di container della cpu non può essere maggiore delle unità CPU definite nell'allocazione a livello di processo.

Nel tempo di esecuzione e non ci sono conflitti sulla CPU:

  • Se è impostata la definizione della cpu a livello di processo, i container hanno accesso solo alle risorse della cpu fino al valore definito dalla cpu a livello di processo.
  • Se la definizione della cpu a livello di processo non è impostata, i container nel processo hanno accesso a tutte le risorse della CPU disponibili nell'istanza, indipendentemente dalla definizione della cpu impostata a livello di container.
  • Se si utilizzano processi di Windows e la cpu a livello di processo non è supportata, i container sono sempre limitati alla definizione di cpu a livello di container.

La contesa della CPU si verifica quando più processi richiedono il tempo della cpu. Quando si verifica un conflitto della CPU, i container vengono limitati alla quantità di risorse definita sulla cpu nella definizione a livello di container.

Importante: assicurati di verificare se l'applicazione in esecuzione su ECS è compatibile con i container. Alcune applicazioni, come Java 10, sono compatibili con i container e utilizzano solo i limiti definiti nella definizione della cpu a livello di container, indipendentemente dal fatto che vi sia o meno conflitto della CPU.

Le definizioni della cpu a livello di container vengono mappate direttamente ai parametri cpuShares dell'API Crea un docker remoto per il container.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?