

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Considerações sobre memória e vCPU para AWS Batch no Amazon EKS
<a name="memory-cpu-batch-eks"></a>

No AWS Batch do Amazon EKS, você pode especificar os recursos que forem disponibilizados para um contêiner. Por exemplo, você pode especificar valores `requests` ou `limits` para recursos de vCPU e memória.

Os seguintes são as restrições para especificar os recursos de vCPU:
+ Pelo menos um valor de `requests` ou `limits` de vCPU deve ser especificado.
+ Uma unidade de vCPU é equivalente a um núcleo físico ou virtual. 
+ O valor da vCPU deve ser inserido em números inteiros ou em acréscimos de 0,25. 
+ O menor valor válido de vCPU é 0,25.
+ Se ambos forem especificados, o valor de `requests` deverá ser menor que ou igual ao valor de `limits`. Dessa forma, você pode configurar as configurações de vCPU flexíveis e rígidas.
+ Os valores de vCPU não podem ser especificados no formato milliCPU. Por exemplo, `100m` não é um valor válido.
+ AWS Batch utiliza o valor `requests` para decisões em escala. Se um valor `requests` não for especificado, o valor `limits` será copiado para o valor `requests`.

Os seguintes são as restrições para especificar os recursos de memória:
+ Pelo menos um valor de `requests` ou `limits` de memória deve ser especificado.
+ Os valores de memória devem estar em mebibytes (MiBs).
+ Se ambos forem especificados, o valor de `requests` deverá ser igual ao valor de `limits`.
+ AWS Batch utiliza o valor `requests` para decisões em escala. Se um valor de `requests` não for especificado, o valor de `limits` será copiado para o valor de `requests`.

Os seguintes são as restrições para especificar os recursos de GPU:
+ Se ambos forem especificados, o valor de `requests` deverá ser igual ao valor de `limits`.
+ AWS Batch utiliza o valor `requests` para decisões em escala. Se um valor `requests` não for especificado, o valor `limits` será copiado para o valor `requests`.

## Exemplos: definições de trabalho
<a name="memory-cpu-batch-eks-example-job-definition"></a>

O seguinte AWS Batch sobre a configuração de definição de trabalho do Amazon EKS configura compartilhamentos flexíveis de vCPU. Isso permite que o AWS Batch no Amazon EKS use toda a capacidade da vCPU para o tipo de instância. No entanto, caso existam outros trabalhos em execução, ao trabalho será alocado um máximo de `2` vCPUs. A memória é limitada a 2 GB.

```
{
   "jobDefinitionName": "MyJobOnEks_Sleep",
   "type": "container",
   "eksProperties": {
       "podProperties": {
           "containers": [
               {
                   "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
                   "command": ["sleep", "60"],
                   "resources": {
                       "requests": {
                           "cpu": "2",
                           "memory": "2048Mi"
                       }
                   }
               }
           ]
       }
   }
}
```

O seguinte AWS Batch na definição de trabalho do Amazon EKS tem um valor `request` de `1` e aloca um máximo de `4` vCPUs para o trabalho.

```
{
   "jobDefinitionName": "MyJobOnEks_Sleep",
   "type": "container",
   "eksProperties": {
       "podProperties": {
           "containers": [
               {
                   "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
                   "command": ["sleep", "60"],
                   "resources": {
                       "requests": {
                           "cpu": "1"
                       },
                       "limits": {
                           "cpu": "4",
                           "memory": "2048Mi"
                       }
                   }
               }
           ]
       }
   }
}
```

O seguinte AWS Batch na configuração de definição de trabalho do Amazon EKS define um valor `limits` de vCPU de `1` e um valor de `limits` de memória de 1 GB.

```
{
   "jobDefinitionName": "MyJobOnEks_Sleep",
   "type": "container",
   "eksProperties": {
       "podProperties": {
           "containers": [
               {
                   "image": "public.ecr.aws/amazonlinux/amazonlinux:2",
                   "command": ["sleep", "60"],
                   "resources": {
                       "limits": {
                           "cpu": "1",
                           "memory": "1024Mi"
                       }
                   }
               }
           ]
       }
   }
}
```

Quando o AWS Batch traduz um AWS Batch no trabalho do Amazon EKS em um pod do Amazon EKS, o AWS Batch copia o valor de `limits` para o valor de `requests`. Isso ocorre quando um valor de `requests` não é especificado. Quando você envia o exemplo de definição de trabalho de precedência, o pod `spec` é o seguinte.

```
apiVersion: v1
kind: Pod
...
spec:
  ...
  containers:
    - command:
        - sleep
        - 60
      image: public.ecr.aws/amazonlinux/amazonlinux:2
      resources:
        limits:
          cpu: 1
          memory: 1024Mi
        requests:
          cpu: 1
          memory: 1024Mi
      ...
```

## Reserva de Memória e Reserva de Nó de CPU
<a name="memory-cpu-batch-eks-node-cpu-memory-reservations"></a>

AWS Batch depende da lógica padrão do arquivo `bootstrap.sh` para reservas de vCPU e reservas de memória. Para mais informações sobre o arquivo `bootstrap.sh`, consulte [bootstrap.sh](https://github.com/awslabs/amazon-eks-ami/blob/main/templates/al2/runtime/bootstrap.sh). Ao medir o tamanho dos seus recursos de vCPU e memória, considere os exemplos a seguir.

**nota**  
Se nenhuma instância estiver em execução, as reservas de vCPU e reservas de memória podem, de início, afetar a lógica em escala do AWS Batch e a tomada de decisões. Depois que as instâncias estiverem em execução, o AWS Batch ajusta as alocações iniciais.

## Exemplo: reserva de nó de CPU
<a name="memory-cpu-batch-eks-node-cpu-reservations"></a>

O valor da reserva de CPU é calculado em milicores usando o número de vCPUs total disponível para a instância.


| Número da vCPU | Porcentagem reservada | 
| --- | --- | 
| 1 | 6% | 
| 2 | 1% | 
| 3-4 | 0,5% | 
| 4 e acima | 0.25% | 

Usando os valores que precedem, o seguinte é verdadeiro:
+ O valor da reserva de CPU para uma instância `c5.large` com 2 vCPUs é 70 m. Isso é calculado da seguinte maneira: *(1\$160) \$1 (1\$110) = 70 m*.
+ O valor da reserva de CPU para uma instância `c5.24xlarge` com 96 vCPUs é 310 m. Isso é calculado da seguinte maneira: (1\$160) \$1 (1\$110) \$1 (2\$15) \$1 (92\$12.5) = 310 m.

Neste exemplo, há 1930 (calculadas de 2000-70) unidades de vCPU de milicore disponíveis para executar trabalhos em uma instância `c5.large`. Suponha que seu trabalho requeira `2` unidades de vCPU (2\$11000 m). O trabalho não caberá em uma instância única `c5.large`. No entanto, um trabalho que exige `1.75` unidades de vCPU é adequado.

## Exemplo: reserva de memória do nó
<a name="memory-cpu-batch-eks-node-memory-reservations"></a>

O valor da reserva de memória é calculado em mebibytes usando o seguinte:
+ a capacidade da instância em mebibytes. Por exemplo, uma instância de 8 GB tem 7.748 MiB.
+ O valor de `kubeReserved`. O valor de `kubeReserved` é a quantidade de memória a ser reservada para os daemons do sistema. O valor de `kubeReserved` é calculado no campo da seguinte forma: *((11 \$1 número de pods máximo compatível pelo tipo de instância) \$1 255)*. Para informações sobre o número máximo de pods compatível com cada tipo de instância, consulte [eni-max-pods.txt](https://github.com/awslabs/amazon-eks-ami/blob/main/nodeadm/internal/kubelet/eni-max-pods.txt) 
+ O valor `HardEvictionLimit`. Quando a memória disponível fica abaixo do valor `HardEvictionLimit`, a instância tenta remover os pods.

A fórmula para calcular a memória disponível para alocação é a seguinte: (*instance\$1capacity\$1in\$1MiB*) - (11 \$1 (*maximum\$1number\$1of\$1pods*)) - 255 - (*`HardEvictionLimit`valor*)).

 Uma instância `c5.large` suporta até 29 pods. Para uma instância `c5.large` de 8 GB com um valor `HardEvictionLimit` de 100 MiB, a memória disponível para alocação é 7074 MiB. Isso é calculado da seguinte maneira: *(7748 - (11 \$1 29) -255 -100) = 7074 MiB*. Neste exemplo, um trabalho MiB de 8.192 não cabe nessa instância, embora seja uma instância de 8 gibibyte (GiB).

## DaemonSets
<a name="memory-cpu-batch-eks-reservations-daemonset-scaling"></a>

Ao usar DaemonSets, considere o seguinte:
+ Se nenhum AWS Batch nas instâncias do Amazon EKS estiver em execução, DaemonSets pode afetar inicialmente a lógica em escala do AWS Batch e a tomada de decisões. Inicialmente, AWS Batch aloca 0,5 unidades de vCPU e 500 MiB para o DaemonSets esperado. Depois que as instâncias estiverem em execução, o AWS Batch ajusta as alocações iniciais.
+ Se um DaemonSet definir limites de vCPU ou limite de memória, os trabalhos AWS Batch no Amazon EKS terão menos recursos. Recomendamos que você mantenha o número de DaemonSets atribuídos a trabalhos AWS Batch o mais baixo possível.