Reduzir a latência usando políticas de posicionamento compacto

Neste documento, explicamos como reduzir a latência de rede entre as VMs de um job especificando uma política de posicionamento compacto.

Ter hosts de VM fisicamente mais próximos uns dos outros em uma zona pode reduzir a latência da rede entre as VMs. Esse benefício de desempenho pode ser especialmente útil para jobs com tarefas acopladas, como tarefas que se comunicam usando bibliotecas MPI. Ao criar um job, você pode exigir que as VMs de um job fiquem mais próximas umas das outras, especificando uma política de posicionamento compacta. Caso contrário, a colocação de VM padrão normalmente distribui VMs em hosts separados para minimizar o impacto de falhas de energia.

Para saber mais sobre as políticas de posicionamento compacto, consulte Sobre as políticas de posicionamento na documentação do Compute Engine.

Antes de começar

  1. Se você nunca usou o Batch, consulte Começar a usar o Batch e ative o Batch concluindo os pré-requisitos para projetos e usuários.
  2. Para receber as permissões necessárias para criar um job, peça ao administrador para conceder a você os seguintes papéis do IAM:

    Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

    Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

Restrições

Além das restrições gerais para políticas de posicionamento compactas, os lotes também têm as seguintes restrições:

  • Quando você especifica que um job deve usar uma política de posicionamento compacta, o lote cria e exclui automaticamente uma política de posicionamento compacta para as VMs do job. Não é possível especificar uma política de posicionamento compacta para um job.
  • Não é possível especificar um número de VMs para a política de posicionamento compacto. A política de posicionamento compacta para um job é aplicada independentemente de quantas VMs o job executa.

Criar e executar um job que usa uma política de posicionamento

É possível especificar que um job use uma política de posicionamento compacto definindo o campo collocation como COLLOCATED usando a CLI gcloud ou a API Batch.

gcloud

  1. Crie um arquivo JSON que especifique os detalhes de configuração do job e defina o campo collocation como COLLOCATED.

    Por exemplo, para criar um job de script básico que especifique uma política de posicionamento compacta, crie um arquivo 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 o job, use o comando gcloud batch jobs submit:

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

    Substitua:

    • JOB_NAME: o nome do job.

    • LOCATION: o local do job.

    • JSON_CONFIGURATION_FILE: o caminho para um arquivo JSON com os detalhes de configuração do job.

API

Faça uma solicitação POST ao método jobs.create que define o campo collocation como COLLOCATED.

Por exemplo, para criar um job de script básico que especifique uma política de posicionamento compacta, faça a seguinte solicitação:

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:

  • PROJECT_ID: o ID do projeto do seu projeto.

  • LOCATION: o local do job.

  • JOB_NAME: o nome do job.

A seguir