Utiliser Onload

Cette page explique comment utiliser Onload pour les instances Compute Engine à latence ultra-faible.

Onload est une pile réseau haute performance pour les applications sensibles à la latence qui nécessitent une latence ultra-faible, une gigue minimale et des performances constantes. Onload fournit une implémentation TCP/IP qui contourne le kernel du système d'exploitation et s'exécute directement dans l'espace utilisateur, tout en permettant aux applications d'utiliser les API de socket BSD standards.

L'utilisation d'Onload avec la solution ULL inclut la prise en charge des éléments suivants :

  • Direction de flux : avec les interfaces réseau ULL, vous pouvez contourner le hachage RSS (Receive Side Scaling) par défaut en dirigeant des flux de trafic spécifiques directement vers une file d'attente de réception (RX) désignée. Pour le trafic ULL (unicast et multicast), le steering de flux 3-tuple est compatible (protocole, adresse IP de destination, port de destination).

Type d'instance et image d'OS requis

Pour utiliser Onload, vous devez créer des instances Compute Engine ULL (U4P ou U4C) en utilisant le projet d'image et l'image fournis par Google pour les tests, comme décrit dans Créer des instances Compute Engine ULL.

Lorsque vous utilisez l'image requise, Onload est préinstallé et chargé au démarrage. Vous pouvez ensuite exécuter des processus avec Onload, comme décrit dans les procédures de cette page.

Démarrer et arrêter onload

Cette section explique comment démarrer et arrêter Onload. Vous devez démarrer Onload pour effectuer les procédures décrites dans les sections suivantes.

Pour démarrer Onload, exécutez la commande suivante :

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

Pour arrêter Onload, exécutez la commande suivante :

sudo /opt/gcp_tp-scripts/unload-onload

Activer l'interrogation d'état occupé

Pour obtenir une latence ultra-faible et minimiser la gigue, activez l'interrogation intensive.

Pour activer l'interrogation occupée, procédez comme suit :

  1. Si ce n'est pas déjà fait, connectez-vous à l'instance à l'aide de SSH.

  2. Vous pouvez activer l'interrogation d'état occupé pour toutes les files d'attente ou de manière plus précise. Choisissez l'option qui correspond à votre cas d'utilisation :

    • Toutes les files d'attente :

      sudo /opt/gcp_tp-scripts/busypoll-all-queues
      
    • File d'attente RX spécifique utilisée par une pile Onload :

      1. Si ce n'est pas déjà fait, démarrez une pile Onload en exécutant la commande suivante :

        gcp_tp-onload /opt/neper/tcp_rr &
        
      2. Pour obtenir le stack-id de la pile que vous avez démarrée, exécutez la commande suivante :

        onload_stackdump
        
      3. Pour obtenir les numéros d'index de vos interfaces réseau, exécutez la commande suivante :

        cat /sys/class/net/NIC_NAME/ifindex
        

        Remplacez NIC_NAME par le nom de l'interface réseau dans l'OS invité, par exemple eth1 ou eth2.

      4. Pour activer l'interrogation occupée, exécutez la commande suivante :

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

        Remplacez les éléments suivants :

        • STACK_ID : ID de pile que vous avez obtenu précédemment
        • NIC_INDEX : numéro d'index de l'interface réseau pour laquelle vous souhaitez activer l'interrogation d'occupation, par exemple 1 ou 2.
        • CPU_ID : ID du processeur pour lequel activer l'interrogation intensive.

          • Nous vous recommandons de ne pas utiliser le processeur 0 ni aucun processeur utilisé par une application.
          • Assurez-vous d'utiliser des cœurs de processeur locaux au nœud NUMA de l'interface réseau que vous avez spécifiée. Exemple :

            • eth1 utilise le nœud NUMA 0, qui utilise les cœurs de processeur 0-29.
            • eth2 utilise le nœud NUMA 2. qui utilise les cœurs de processeur 60-89.

Vous pouvez désactiver l'interrogation intensive à l'aide de la commande suivante :

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

Étapes suivantes

  • Pour synchroniser l'horloge système de votre instance avec l'horloge de la carte d'interface réseau physique de son serveur hôte, consultez Configurer une heure précise.