Utilizzare Onload

Questa pagina descrive come utilizzare Onload per le istanze Compute Engine a latenza ultra bassa (ULL).

Onload è uno stack di rete ad alte prestazioni per applicazioni sensibili alla latenza che richiedono latenza molto bassa, jitter minimo e prestazioni costanti. Onload fornisce un'implementazione TCP/IP che ignora il kernel del sistema operativo e viene eseguita direttamente nello spazio utente, consentendo alle applicazioni di utilizzare le API socket BSD standard.

L'utilizzo di Onload con la soluzione ULL include il supporto per quanto segue:

  • Steering del flusso: con le interfacce di rete ULL, puoi bypassare l'hashing RSS (Receive Side Scaling) predefinito indirizzando flussi di traffico specifici direttamente a una coda di ricezione (RX) designata. Per il traffico unicast e multicast ULL, è supportato lo steering del flusso a 3 tuple (protocollo, indirizzo IP di destinazione, porta di destinazione).

Tipo di istanza e immagine sistema operativo obbligatori

Per utilizzare Onload, devi creare istanze di Compute Engine ULL (U4P o U4C) utilizzando il progetto di immagine e l'immagine forniti da Google per i test, come descritto in Creare istanze di Compute Engine ULL.

Quando utilizzi l'immagine richiesta, Onload viene preinstallato e caricato all'avvio. Puoi quindi eseguire i processi con Onload come descritto nelle procedure in questa pagina.

Avviare e interrompere onload

Questa sezione descrive come avviare e arrestare Onload. Devi avviare Onload per completare le procedure nelle sezioni seguenti.

Per avviare Onload, esegui questo comando:

sudo /opt/gcp_tp-scripts/load-onload-and-tune

Per arrestare Onload, esegui questo comando:

sudo /opt/gcp_tp-scripts/unload-onload

Attivare il polling occupato

Per ottenere una latenza molto bassa e ridurre al minimo il jitter, abilita il polling occupato.

Per attivare il polling occupato:

  1. Se non l'hai ancora fatto, connettiti all'istanza utilizzando SSH.

  2. Puoi attivare il polling occupato per tutte le code o in modo più granulare. Scegli l'opzione corrispondente al tuo caso d'uso:

    • Tutte le code:

      sudo /opt/gcp_tp-scripts/busypoll-all-queues
      
    • Coda RX specifica utilizzata da uno stack Onload:

      1. Se non l'hai ancora fatto, avvia uno stack Onload eseguendo questo comando:

        gcp_tp-onload /opt/neper/tcp_rr &
        
      2. Per ottenere l'stack-id dello stack che hai avviato, esegui questo comando:

        onload_stackdump
        
      3. Per ottenere i numeri di indice delle interfacce di rete, esegui questo comando:

        cat /sys/class/net/NIC_NAME/ifindex
        

        Sostituisci NIC_NAME con il nome dell'interfaccia di rete nel sistema operativo guest, ad esempio eth1, eth2.

      4. Per abilitare il polling occupato, esegui questo comando:

        sudo /opt/gcp_tp-scripts/busypoll-onload-stack STACK_ID enable NIC_INDEX CPU_ID
        

        Sostituisci quanto segue:

        • STACK_ID: l'ID stack ottenuto in precedenza
        • NIC_INDEX: il numero di indice dell'interfaccia di rete per la quale vuoi attivare il polling occupato, ad esempio 1 o 2.
        • CPU_ID: l'ID della CPU per cui attivare il polling occupato.

          • Ti consigliamo di non utilizzare la CPU 0 o qualsiasi CPU in uso da un'applicazione.
          • Assicurati di utilizzare i core della CPU locali del nodo NUMA dell'interfaccia di rete che hai specificato. Ad esempio:

            • eth1 utilizza il nodo NUMA 0, che utilizza i core della CPU 0-29.
            • eth2 utilizza il nodo NUMA 2. che utilizza i core CPU 60-89.

Puoi disattivare il polling occupato utilizzando il seguente comando:

sudo /opt/gcp_tp-scripts/busypoll-onload-stack STACK_ID disable NIC_INDEX CPU_ID

Passaggi successivi

  • Per sincronizzare l'orologio di sistema dell'istanza con l'orologio della scheda di NIC fisica del server host, consulta Configurare l'ora esatta.