Crea istanze di Compute Engine ULL

Questa pagina descrive come creare istanze Compute Engine a latenza ultra bassa (ULL) utilizzando i tipi di macchina U4P o U4C della famiglia di macchine U4.

Per una panoramica della procedura di configurazione dell'infrastruttura ULL, consulta Panoramica della configurazione per la soluzione ULL.

Prima di iniziare

Prima di creare istanze di computing ULL, consulta le sezioni seguenti.

Crea reti VPC

Se non l'hai ancora fatto, crea reti VPC per ciascuna delle interfacce di rete della tua istanza, come descritto in Panoramica della configurazione per la soluzione ULL.

Crea una policy di posizionamento

Se vuoi, puoi applicare una policy di posizionamento distribuito alla tua istanza ULL per una maggiore resilienza. Per saperne di più, consulta Crea e applica policy di posizionamento distribuito nella documentazione di Compute Engine.

Configurare il progetto

Imposta gcloud CLI in modo che utilizzi il tuo progetto. In alternativa, puoi includere il flag --project=PROJECT_ID per ogni comando nelle procedure seguenti.

gcloud config set project PROJECT_ID

Sostituisci PROJECT_ID con l'ID del tuo progetto.

Abilita API

Se non l'hai ancora fatto, abilita le seguenti API.

Console

Abilita l'API Compute Engine, se non è già abilitata.

Ruoli richiesti per abilitare le API

Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

Abilitare l'API

gcloud

Abilita l'API Compute Engine, se non è già abilitata:

Ruoli richiesti per abilitare le API

Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore utilizzo servizi (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

gcloud services enable compute.googleapis.com

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per creare istanze Compute Engine, chiedi all'amministratore di concederti i seguenti ruoli IAM:

  • Per creare e gestire le istanze di Compute: Amministratore istanze Compute (compute.instanceAdmin) sul tuo progetto

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Panoramica della configurazione dell'istanza ULL

Per creare un'istanza di computing ULL e configurarla per inviare o ricevere traffico unicast e multicast ULL, segui questi passaggi:

Passaggio Descrizione
Crea un'istanza ULL Crea un'istanza utilizzando un tipo di macchina U4P o U4C e connetti le relative interfacce di rete a una rete VPC per uso generico e a una rete VPC ULL. Se prevedi di utilizzare l'istanza come consumer multicast, imposta il flag igmp-query su IGMP_QUERY_V2.
Configura il routing per le interfacce non nic0 per il traffico unicast ULL Configura il routing basato sull'origine nel sistema operativo guest per assicurarti che i pacchetti in uscita lascino l'interfaccia corretta e impedire il routing asimmetrico.
Configura un'istanza in modo che sia un consumer multicast ULL Completa ognuno dei seguenti passaggi per ricevere traffico multicast sulle interfacce di rete ULL:
Per ottimizzare ulteriormente il rendimento, ti consigliamo di seguire anche le procedure descritte in Utilizzare Onload o Utilizzare DPDK.

Inoltre, puoi utilizzare i comandi di esempio in questa pagina per testare la connettività multicast.

Crea un'istanza ULL

Questa sezione descrive come creare una nuova istanza da utilizzare per ULL unicast e multicast.

Per informazioni generali sulla creazione di istanze di calcolo, incluse opzioni di configurazione aggiuntive, consulta Crea e avvia un'istanza Compute Engine.

gcloud

Per creare un'istanza ULL, utilizza il comando compute instances create.

Il tipo di interfaccia di rete supportato per le istanze ULL è GVNIC. Devi includere il campo queue-count e specificare un valore di 32 per il supporto XDP.

Per le interfacce di rete che si collegano a una rete VPC ULL, deve essere specificato no-address.

Inoltre, il seguente comando include il flag igmp-query per consentire all'istanza di essere un consumer multicast. Questo flag non è obbligatorio se l'istanza è solo un produttore di multicast o se l'istanza invia e riceve solo unicast.

gcloud compute instances create INSTANCE_NAME \
    --zone=ZONE \
    --machine-type=MACHINE_TYPE \
    --image-project=IMAGE_PROJECT \
    --image-family=IMAGE_FAMILY \
    --maintenance-policy=TERMINATE \
    --network-interface=nic-type=GVNIC,queue-count=32,network=GENERAL_PURPOSE_VPC_NETWORK,subnet=GENERAL_PURPOSE_SUBNET \
    --network-interface=nic-type=GVNIC,queue-count=32,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_1,no-address,igmp-query=IGMP_QUERY_V2 \
    --network-interface=nic-type=GVNIC,queue-count=32,network=ULL_VPC_NETWORK,subnet=ULL_SUBNET_2,no-address,igmp-query=IGMP_QUERY_V2

Sostituisci i seguenti valori:

  • ZONE: la zona in cui creare l'istanza
  • INSTANCE_NAME: un nome per l'istanza
  • MACHINE_TYPE: il tipo di macchina U4P o U4C dell'istanza
  • IMAGE_PROJECT: il progetto di immagini, ad esempio rhel-cloud. Consulta Supporto del sistema operativo per i tipi di macchine U4.
  • IMAGE_FAMILY: la famiglia di immagini, ad esempio rhel-10-2-eus-oot-gve. Consulta Supporto del sistema operativo per i tipi di macchine U4.

    Se specifichi una famiglia di immagini, l'istanza viene creata dall'ultima versione non deprecata dell'immagine sistema operativo nella famiglia di immagini. In alternativa, puoi utilizzare il flag --image e specificare una versione dell'immagine.

  • GENERAL_PURPOSE_VPC_NETWORK, GENERAL_PURPOSE_SUBNET: la rete VPC e la subnet a cui collegare l'interfaccia nic0 dell'istanza

  • ULL_VPC_NETWORK: la rete VPC ULL a cui collegare le interfacce non nic0

    • ULL_SUBNET_1: la subnet nella rete VPC ULL a cui collegare l'interfaccia nic1

    • ULL_SUBNET_2: la subnet nella rete VPC ULL a cui collegare l'interfaccia nic2

Configura il routing per le interfacce non nic0 per il traffico unicast ULL

Per impostazione predefinita, un'istanza utilizza la route predefinita associata alla sua interfaccia nic0 per inviare il traffico a qualsiasi destinazione al di fuori della subnet con collegamento diretto. Per maggiori informazioni, consulta la panoramica di più interfacce di rete.

Affinché le interfacce nic1 e nic2 della tua istanza inviino e ricevano correttamente il traffico unicast ULL, devi configurare il routing basato sull'origine nel sistema operativo guest. Questa configurazione garantisce che i pacchetti in uscita lascino l'interfaccia corretta e impedisce il routing asimmetrico, in cui il traffico entra in un'interfaccia ma tenta di uscire tramite nic0.

Per un esempio di come configurare il routing basato su policy, consulta Configura il routing basato su policy nell'esercitazione Configura il routing per un'interfaccia di rete aggiuntiva.

Configura un'istanza in modo che sia un consumer multicast ULL

Questa sezione descrive come configurare un'istanza ULL esistente in modo che sia un consumer multicast.

Abilita la query IGMP su un'istanza ULL esistente

Se non hai attivato IGMP durante la creazione dell'istanza, puoi attivarlo sull'istanza esistente come descritto in questa sezione.

gcloud

Per attivare la query IGMP su un'istanza ULL esistente, utilizza il comando compute instances network-interfaces update.

Ripeti il comando seguente per ogni interfaccia di rete che vuoi ricevere traffico multicast.

gcloud compute instances network-interfaces update INSTANCE_NAME \
    --zone=ZONE \
    --network-interface=NETWORK_INTERFACE_NAME \
    --igmp-query=IGMP_QUERY_V2

Sostituisci i seguenti valori:

  • INSTANCE_NAME: il nome dell'istanza
  • ZONE: la zona dell'istanza
  • NETWORK_INTERFACE_NAME: il nome dell'interfaccia di rete su cui abilitare la query IGMP. In Google Cloud, il formato è nicNUMBER, ad esempio nic0, nic1 o nic2.

Imposta IGMPv2 nel sistema operativo guest

Per impostare IGMPv2 nel sistema operativo guest dell'istanza, procedi nel seguente modo:

  1. Connettiti all'istanza tramite SSH.

  2. Esegui questo comando e identifica i nomi dei dispositivi delle interfacce di rete che vuoi ricevere traffico multicast.

    sudo ifconfig
    
  3. Per ogni interfaccia di rete applicabile, esegui il seguente comando per forzare IGMPv2.

    sudo -i
    echo "2" > /proc/sys/net/ipv4/conf/NETWORK_INTERFACE_DEVICE_NAME/force_igmp_version
    

    Sostituisci NETWORK_INTERFACE_DEVICE_NAME con il nome del dispositivo dell'interfaccia di rete, ad esempio eth0, eth1 o eth2.

Configura il filtro del percorso inverso (rp_filter)

In alcuni casi, ad esempio con le istanze multi-NIC, la convalida rigorosa dell'origine tramite il filtro del percorso inverso (rp-filter) può causare l'eliminazione di pacchetti multicast legittimi. Per evitare che ciò accada, puoi configurare il filtro del percorso inverso per allentare o disattivare la convalida dell'origine sulle interfacce di rete non nic0 che ricevono traffico multicast. Ad esempio, i seguenti comandi configurano il filtro del percorso inverso per disattivare la convalida dell'origine su eth1 e eth2 impostando rp_filter su 0.

sudo sysctl -w net.ipv4.conf.all.rp_filter=0
sudo sysctl -w net.ipv4.conf.eth1.rp_filter=0
sudo sysctl -w net.ipv4.conf.eth2.rp_filter=0

Per ulteriori informazioni su rp_filter, consulta IP Sysctl nella documentazione del kernel Linux.

Aumentare le dimensioni del buffer circolare del driver di rete

Questa sezione descrive come aumentare le dimensioni del buffer circolare del driver di rete sull'istanza.

Per i consumer multicast che ricevono livelli elevati di traffico, aumenta le dimensioni del buffer circolare del driver di rete a un valore di 2048 per evitare la perdita di pacchetti. Esegui questa operazione per ogni interfaccia di rete che riceve traffico multicast.

Vedi i seguenti comandi di esempio, che configurano nic1 e nic2:

sudo ethtool -G eth1 rx 2048 tx 2048
sudo ethtool -G eth2 rx 2048 tx 2048

Comandi di esempio per testare la connettività multicast ULL

Questa sezione fornisce comandi di esempio per testare il traffico multicast senza avviare un carico di lavoro dell'applicazione utilizzando lo strumento iperf. I passaggi descritti in questa sezione richiedono il completamento della configurazione multicast descritta in Panoramica della configurazione per la soluzione ULL.

Invia traffico multicast ULL da un producer multicast

  1. Connettiti all'istanza tramite SSH.

  2. Se non l'hai ancora fatto, installa iperf. iperf3 non supporta il multicast. Il seguente comando utilizza iperf, che installa iperf2.

    sudo yum install iperf
    
  3. Per inviare traffico multicast all'indirizzo IP del gruppo multicast, esegui questo comando:

    iperf -c MULTICAST_GROUP_ADDRESS%NIC -p 1234 -l 512 -i 1 -u -b 1000pps -t 999999 -B NIC_IP_ADDRESS
    

    Sostituisci i seguenti valori:

    • MULTICAST_GROUP_ADDRESS: l'indirizzo IP del gruppo multicast
    • NIC il nome del dispositivo di interfaccia di rete, ad esempio eth1 o eth2
    • NIC_IP_ADDRESS l'indirizzo IP assegnato alla NIC specificata

Unisciti a un gruppo e ricevi il traffico multicast ULL da un consumer multicast

  1. Connettiti all'istanza tramite SSH.

  2. Se non l'hai ancora fatto, installa iperf.

    sudo yum install iperf
    
  3. Per partecipare a un gruppo multicast e registrare il traffico che ricevi, esegui questo comando:

    iperf -s -p 1234 -B MULTICAST_GROUP_ADDRESS%NIC -l 512 -u -i 1
    

    Sostituisci i seguenti valori:

    • MULTICAST_GROUP_ADDRESS l'indirizzo IP del gruppo multicast
    • NIC il nome del dispositivo di interfaccia di rete, ad esempio eth1 o eth2

    Ad esempio, il seguente comando unisce un gruppo con l'indirizzo IP 224.1.0.176 per ricevere pacchetti fino a 512 byte e registra il traffico ricevuto:

    iperf -s -p 1234 -B 224.1.0.176%eth1 -l 512 -u -i 1
    

Nelle interfacce di rete ULL della tua istanza, ethtool mostra lo stato effettivo del collegamento della porta fisica (up/down) e le velocità di collegamento fisico.

Per controllare lo stato e la velocità del collegamento fisico di un'interfaccia di rete ULL, esegui questo comando:

sudo ethtool NIC

Sostituisci NIC con il nome dell'interfaccia di rete assegnata dal sistema operativo guest, ad esempio ens8f0 o ens48f0.

Passaggi successivi

  • Per informazioni generali sulla risoluzione dei problemi relativi alle prestazioni di rete per le istanze bare metal, consulta Risoluzione dei problemi relativi alle prestazioni di rete nella documentazione di Compute Engine. Ad esempio, puoi disattivare gli stati di sospensione della CPU per ottenere prestazioni di larghezza di banda di rete complete.
  • Per configurare Onload o DPDK per ottimizzare le prestazioni, consulta Utilizzare Onload e Utilizzare DPDK.
  • Per sincronizzare l'orologio di sistema dell'istanza con l'orologio della NIC fisica del server host, consulta Configurare l'ora esatta.