Reduza a latência usando políticas de posicionamento compactas

Este documento explica como reduzir a latência da rede entre as VMs de uma tarefa especificando uma política de posicionamento compacta.

Ter anfitriões de VMs fisicamente mais próximos uns dos outros numa zona pode reduzir a latência de rede entre VMs. Esta vantagem de desempenho pode ser especialmente útil para trabalhos com tarefas fortemente interligadas, como tarefas que comunicam através de bibliotecas MPI. Quando cria uma tarefa, pode, opcionalmente, exigir que as VMs de uma tarefa estejam localizadas mais próximas umas das outras, especificando uma política de posicionamento compacto. Caso contrário, o posicionamento predefinido de VMs distribui normalmente as VMs por hosts separados para ajudar a minimizar o impacto das falhas de energia.

Para saber mais acerca das políticas de posicionamento compactas, consulte o artigo Acerca das políticas de posicionamento na documentação do Compute Engine.

Antes de começar

  1. Se nunca usou o Batch, reveja o artigo Comece a usar o Batch e ative o Batch concluindo os pré-requisitos para projetos e utilizadores.
  2. Para receber as autorizações de que precisa para criar uma tarefa, peça ao seu administrador para lhe conceder as seguintes funções de IAM:

    Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

    Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Restrições

Além das restrições gerais das políticas de posicionamento compacto, o Batch também tem as seguintes restrições:

  • Quando especifica que uma tarefa deve usar uma política de posicionamento compacta, o Batch cria e elimina automaticamente uma política de posicionamento compacta para as VMs da tarefa. Não pode especificar uma política de posicionamento compacta existente para um trabalho.
  • Não pode especificar um número de VMs para a política de posicionamento compacta. A política de posicionamento compacto para uma tarefa aplica-se independentemente do número de VMs em que a tarefa é executada.

Crie e execute uma tarefa que use uma política de posicionamento

Pode especificar que uma tarefa use uma política de posicionamento compacta definindo o campo collocation como COLLOCATED através da CLI gcloud ou da API Batch.

gcloud

  1. Crie um ficheiro JSON que especifique os detalhes de configuração da tarefa e defina o campo collocation como COLLOCATED.

    Por exemplo, para criar uma tarefa de script básica que especifique uma política de posicionamento compacta, crie um ficheiro JSON com o seguinte conteúdo:

    {
      "taskGroups": [
        {
          "taskSpec": {
            "runnables": [
              {
                "script": {
                  "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
                }
              }
            ]
          },
          "taskCount": 3
        }
      ],
      "allocationPolicy": {
        "placement": {
          "collocation": "COLLOCATED"
        }
      },
      "logsPolicy": {
        "destination": "CLOUD_LOGGING"
      }
    }
    
  2. Para criar e executar a tarefa, use o comando gcloud batch jobs submit:

    gcloud batch jobs submit JOB_NAME \
      --location LOCATION \
      --config JSON_CONFIGURATION_FILE
    

    Substitua o seguinte:

    • JOB_NAME: o nome da tarefa.

    • LOCATION: a localização do trabalho.

    • JSON_CONFIGURATION_FILE: o caminho para um ficheiro JSON com os detalhes de configuração da tarefa.

API

Faça um pedido POST ao método jobs.create que define o campo collocation como COLLOCATED.

Por exemplo, para criar uma tarefa de script básica que especifique uma política de posicionamento compacta, faça o seguinte pedido:

POST https://batch.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/jobs?job_id=JOB_NAME

{
  "taskGroups": [
    {
      "taskSpec": {
        "runnables": [
          {
            "script": {
              "text": "echo Hello world from task ${BATCH_TASK_INDEX}"
            }
          }
        ]
      },
      "taskCount": 3
    }
  ],
  "allocationPolicy": {
    "placement": {
      "collocation": "COLLOCATED"
    }
  },
  "logsPolicy": {
    "destination": "CLOUD_LOGGING"
  }
}

Substitua o seguinte:

O que se segue?