Utilisez Netperf et sockperf pour tester le taux de transfert de paquets (PPS), la bande passante réseau et la latence réseau des instances ECS.
Afin d'éviter toute perte de données, effectuez les tests de performances réseau sur de nouvelles instances ECS ne contenant aucune donnée.
Les métriques des types d'instance sont validées dans un environnement de test. Les performances réelles peuvent varier en fonction de facteurs tels que la charge de l'instance et le modèle de mise en réseau.
Prérequis
Préparatifs
-
Créez des instances ECS destinées aux tests. Consultez la rubrique Lancer des instances ECS personnalisées.
ImportantUtilisez des instances du même type pour garantir des résultats de test précis et comparables.
Assurez-vous que toutes les instances de test se trouvent dans le même Virtual Private Cloud (VPC), sont connectées au même vSwitch et appartiennent au même groupe de sécurité.
Environnements d'exemple
Les tableaux ci-dessous répertorient les types et quantités d'instances recommandés pour les machines de test et les machines de test auxiliaires. Sélectionnez les machines en tant que serveurs ou clients selon votre scénario de test.
-
Tester le taux de transfert de paquets (instances Linux uniquement)
RemarqueAucun outil n'est disponible pour tester le taux de transfert de paquets des instances Windows.
Taux de transfert de paquets inférieur à 6 000 000 pps
Élément de test
Machine de test
Machine de test auxiliaire
Type d'instance
ecs.g7.large
ecs.g7.large
Image
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3
Nombre d'instances
1
1
Réseau
Des adresses IP publiques sont attribuées.
Taux de transfert de paquets supérieur à 6 000 000 pps et inférieur à 20 000 000 pps
Élément de test
Machine de test
Machine de test auxiliaire
Type d'instance
ecs.g7,16xlarge
ecs.g7,16xlarge
Image
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3
Nombre d'instances
1
3
Réseau
Des adresses IP publiques sont attribuées.
Taux de transfert de paquets supérieur à 20 000 000 pps
Élément de test
Machine de test
Machine de test auxiliaire
Type d'instance
ecs.g7,32xlarge
ecs.g7,32xlarge
Image
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3
Nombre d'instances
1
3
Réseau
Des adresses IP publiques sont attribuées.
-
Tester la bande passante et la latence du réseau
Instance Linux
Élément de test
Machine de test
Machine de test auxiliaire
Type d'instance
ecs.g7.large
ecs.g7.large
Image
Alibaba Cloud Linux 3
Alibaba Cloud Linux 3
Nombre d'instances
1
1
Réseau
Des adresses IP publiques sont attribuées.
Instance Windows
Élément de test
Machine de test
Machine de test auxiliaire
Type d'instance
ecs.g7.large
ecs.g7.large
Image
Windows Server 2022
Windows Server 2022
Nombre d'instances
1
1
Réseau
Des adresses IP publiques sont attribuées.
Procédure
Tester le taux de transfert de paquets (Linux uniquement)
Aucun outil n'est disponible pour tester le taux de transfert de paquets des instances Windows.
Taux de transfert de paquets inférieur à 6 000 000 pps
-
Connectez-vous à la machine de test et aux machines de test auxiliaires. Consultez la rubrique Se connecter à une instance Linux à l'aide de Workbench.
-
Sur les deux machines, téléchargez le package d'installation de Netperf :
wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gz -
Sur les deux machines, installez Netperf et sar.
-
Décompressez le package d'installation de Netperf :
sudo yum install -y gcc autoconf automake libtool sysstat tar -zxvf netperf-2.7.0.tar.gz -
Consultez le numéro de version de GNU Compiler Collection (
GCC).gcc -v 2>&1 -
Si
GCCest ultérieur à la version 10 sur l'une des machines, effectuez les opérations suivantes pour garantir une compilation correcte parGCC. Sinon, ignorez cette étape.-
Ouvrez le fichier
nettest_omni.c.cd netperf vim src/nettest_omni.c -
Appuyez sur i pour passer en mode Insertion et supprimez les variables déclarées suivantes du fichier
nettest_omni.c:/* different options for the sockets */ int loc_nodelay, /* don't/do use NODELAY locally */ rem_nodelay, /* don't/do use NODELAY remotely */ loc_sndavoid, /* avoid send copies locally */ loc_rcvavoid, /* avoid recv copies locally */ rem_sndavoid, /* avoid send copies remotely */ rem_rcvavoid; /* avoid recv_copies remotely */ Appuyez sur Échap, saisissez
:wqet appuyez sur Entrée pour enregistrer et fermer le fichier.
-
-
Installez Netperf et sar.
cd netperf sudo ./configure sudo make && sudo make install
-
-
Sur la machine de test, démarrez 64 services netserver :
#!/bin/bash for j in `seq 64`; do netserver -p $[16000+j] > server_$[16000+j].netperf > /dev/null 2>&1 & done -
Consultez l'adresse IP privée de la machine de test :
ifconfig || ip addr
-
Sur la machine de test auxiliaire, envoyez du trafic vers la machine de test :
#!/bin/bash server_ip=<Private IP address of the test machine> for j in `seq 64`; do port=$[16000+j] netperf -H ${server_ip} -l ${run_time:-300} -t UDP_STREAM -p $port -- -m 1 -D > /dev/null 2>&1 & doneRemplacez
<Private IP address of the test machine>par l'adresse IP privée réelle obtenue à l'étape précédente.
-
Sur la machine de test, testez le taux de transfert de paquets :
sar -n DEV 1Vérifiez la colonne
rxpck/s. La valeurrxpck/sindique le nombre de paquets reçus par seconde. Dans cet exemple, la valeur est d'environ 940 000.
Taux de transfert de paquets supérieur à 6 000 000 pps et inférieur à 20 000 000 pps
-
Connectez-vous à la machine de test et aux machines de test auxiliaires. Consultez la rubrique Se connecter à une instance Linux à l'aide de Workbench.
-
Sur les quatre machines (trois auxiliaires + une de test), installez sockperf :
sudo yum install -y autoconf automake libtool gcc-c++ cd /opt sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz sudo tar -zxf 3.8.tar.gz cd sockperf-3.8/ sudo ./autogen.sh sudo ./configure sudo make -j `cat /proc/cpuinfo| grep process | wc -l` sudo make install -
Consultez l'adresse IP privée de la machine de test :
ifconfig || ip addr
-
Sur chaque machine de test auxiliaire, envoyez du trafic vers la machine de test :
server_ip="<Private IP address of the test machine>" threads=64 msg_size=14 run_time=60 basePort=6666 for((i=0;i<$threads;++i));do nohup sockperf tp -i $server_ip --pps max -m ${msg_size} -t ${run_time} --port $[${basePort}+${i}] 2>&1 & doneRemplacez
<Private IP address of the test machine>par la valeur réelle. Le paramètrerun_timespécifie la durée du trafic. -
Sur les quatre machines, testez le taux de transfert de paquets :
sar -n DEV 1Vérifiez la colonne
rxpck/ssur la machine de test. La valeurrxpck/sindique le nombre de paquets reçus par seconde. Dans cet exemple, la valeur est d'environ 12 000 000 pps.
Taux de transfert de paquets supérieur à 20 000 000 pps
-
Connectez-vous à la machine de test et aux machines de test auxiliaires. Consultez la rubrique Se connecter à une instance Linux à l'aide de Workbench.
-
Sur les quatre machines (trois auxiliaires + une de test), installez sockperf :
sudo yum install -y autoconf automake libtool gcc-c++ cd /opt sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz sudo tar -zxf 3.8.tar.gz cd sockperf-3.8/ sudo ./autogen.sh sudo ./configure sudo make -j `cat /proc/cpuinfo| grep process | wc -l` sudo make install -
Sur la machine de test, associez les demandes d'interruption (IRQ) aux cœurs CPU.
L'association des IRQ à des cœurs CPU spécifiques réduit les changements de contexte et améliore l'efficacité du traitement des paquets à haut débit PPS.
a=$(cat /proc/interrupts | grep virtio2-input | awk -F ':' '{print $1}') cpu=0 for irq in $a; do echo $cpu >/proc/irq/$irq/smp_affinity_list let cpu+=2 done -
Consultez l'adresse IP privée de la machine de test :
ifconfig || ip addr
-
Sur chaque machine de test auxiliaire, envoyez du trafic vers la machine de test :
server_ip="<Private IP address of the test machine>" threads=64 msg_size=14 run_time=60 basePort=6666 for((i=0;i<$threads;++i));do nohup sockperf tp -i $server_ip --pps max -m ${msg_size} -t ${run_time} --port $[${basePort}+${i}] 2>&1 & doneRemplacez
<Private IP address of the test machine>par la valeur réelle. Le paramètrerun_timespécifie la durée du trafic. -
Sur les quatre machines, testez le taux de transfert de paquets :
sar -n DEV 1Vérifiez la colonne
rxpck/ssur la machine de test. La valeurrxpck/sindique le nombre de paquets reçus par seconde. Dans cet exemple, la valeur est d'environ 20 000 000 pps.
Tester la bande passante réseau
Instance Linux
-
Connectez-vous à la machine de test et à la machine de test auxiliaire. Consultez la rubrique Se connecter à une instance Linux à l'aide de Workbench.
-
Sur les deux machines, téléchargez le package d'installation de Netperf :
wget https://benchmark-packages.oss-cn-qingdao.aliyuncs.com/netperf-2.7.0.tar.gz -
Sur les deux machines, installez Netperf et sar.
-
Décompressez le package d'installation de Netperf.
sudo yum install -y gcc autoconf automake libtool sysstat tar -zxvf netperf-2.7.0.tar.gz -
Consultez le numéro de version de
GCC.gcc -v 2>&1 -
Si
GCCest ultérieur à la version 10 sur l'une des machines, effectuez les opérations suivantes pour garantir une compilation correcte parGCC. Sinon, ignorez cette étape.-
Ouvrez le fichier
nettest_omni.c.cd netperf vim src/nettest_omni.c -
Appuyez sur i pour passer en mode Insertion et supprimez les variables déclarées suivantes du fichier
nettest_omni.c:/* different options for the sockets */ int loc_nodelay, /* don't/do use NODELAY locally */ rem_nodelay, /* don't/do use NODELAY remotely */ loc_sndavoid, /* avoid send copies locally */ loc_rcvavoid, /* avoid recv copies locally */ rem_sndavoid, /* avoid send copies remotely */ rem_rcvavoid; /* avoid recv_copies remotely */ Appuyez sur Échap, saisissez
:wqet appuyez sur Entrée pour enregistrer et fermer le fichier.
-
-
Installez Netperf et sar.
cd netperf sudo ./configure sudo make && sudo make install
-
-
Sur la machine de test, démarrez 64 services netserver :
#!/bin/bash for j in `seq 64`; do netserver -p $[16000+j] > server_$[16000+j].netperf 2>&1 & done -
Consultez l'adresse IP privée de la machine de test :
ifconfig || ip addr[ecs-user@izxxx ecZ ~]$ ifconfig || ip addr eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 17.xxx.xxx.15 netmask 25xxx.0 broadcast 17.xxx.55 inet6 fexxx38:c158 prefixlen 64 scopeid 0x20<link> ether 00:xxx:xxx txqueuelen 1000 (Ethernet) RX packets 178595 bytes 106030163 (101.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 116902 bytes 70189540 (66.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 2 bytes 140 (140.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2 bytes 140 (140.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 -
Sur la machine de test auxiliaire, envoyez du trafic vers la machine de test :
#!/bin/bash server_ip=<Private IP address of the test machine> for j in `seq 64`; do port=$[16000+j] netperf -H ${server_ip} -l ${run_time:-300} -t TCP_STREAM -p $port -- -D > /dev/null 2>&1 & doneRemplacez
<Private IP address of the test machine>par l'adresse IP privée réelle obtenue à l'étape précédente.#!/bin/bash server_ip=<Private IP address of the test machine> for j in `seq 64`; do port=$[16000+j] netperf -H ${server_ip} -l ${run_time:-300} -t TCP_STREAM -p $port -- -D > /dev/null 2>&1 & done [1] 5100 [2] 5101 [3] 5102 [4] 5103 -
Sur la machine de test, testez la bande passante réseau :
sar -n DEV 1Vérifiez la colonne
rxkB/s. La valeurrxkB/sindique la taille des paquets reçus en Ko/s. Multipliez par 8 pour convertir en Kbit/s et obtenir la valeur de la bande passante réseau.
Instance Windows
Connectez-vous à la machine de test et à la machine de test auxiliaire. Consultez la rubrique Se connecter à une instance Windows à l'aide d'un mot de passe ou d'une clé.
-
Installez les outils de test et désactivez le pare-feu sur les deux machines.
Téléchargez l'outil ntttcp.exe et notez le chemin d'accès où l'outil est stocké.
Ouvrez la boîte de dialogue Exécuter. Saisissez powershell et cliquez sur OK pour démarrer PowerShell.
-
Désactivez le pare-feu sur les deux machines pour éviter le blocage des connexions :
Set-NetFirewallProfile -Profile * -Enabled:falseVous pouvez également créer une règle de pare-feu entrant autorisant NTTTCP (ntttcp.exe) sur les deux machines :
$ntttcpPath = "<Path of ntttcp.exe>" New-NetFirewallRule -DisplayName ntttcp -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $ntttcpPathRemarqueRemplacez
<Path of ntttcp.exe>par la valeur réelle.
-
Sur la machine de test, configurez la mise à l'échelle côté réception (RSS) pour la carte réseau.
La RSS répartit les paquets reçus sur plusieurs cœurs CPU afin d'améliorer les performances réseau. Définissez les files d'attente RSS en fonction du nombre de processeurs :
Si la machine possède jusqu'à 16 cœurs CPU, définissez le nombre de files d'attente de réception RSS égal au nombre de cœurs CPU.
Si la machine possède plus de 16 cœurs CPU, désactivez la RSS. La plupart des cartes réseau prennent en charge jusqu'à 16 files d'attente RSS ; dépasser cette limite peut entraîner une allocation inégale des ressources.
$cpuNum = (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors if ($cpuNum -le 16) { Set-NetAdapterRss -Name <Name of the network adapter on the test machine> -NumberOfReceiveQueues $cpuNum } else { Disable-NetAdapterRss -Name <Name of the network adapter on the test machine> }RemarqueRemplacez
<Name of the network adapter on the test machine>par la valeur réelle. ExécutezGet-NetAdapter | Select-Object Namepour obtenir les noms des adaptateurs.La modification de la configuration RSS redémarre le service de la carte réseau, ce qui peut interrompre les connexions. Attendez la reconnexion avant de poursuivre.
-
Sur la machine de test, préparez-vous à recevoir des données :
$serverIp = (Get-NetIPConfiguration -InterfaceAlias <Name of the network adapter on the test machine>).IPv4Address.IPAddress $cpuNum = (Get-CimInstance -ClassName Win32_Processor).NumberOfLogicalProcessors $threadNum = $cpuNum & <Path of ntttcp.exe on the test machine> -r -m $threadNum,0,$serverIp -t 300RemarqueRemplacez
<Name of the network adapter on the test machine>et<Path of ntttcp.exe on the test machine>par les valeurs réelles. -
Sur la machine de test auxiliaire, envoyez des données :
$serverIp = "<Private IP address of the test machine>" $threadNum = "<Thread number of the test machine>" <Path of ntttcp.exe on the auxiliary test machine> -s -m $threadNum,*,$serverIp -t 100RemarqueRemplacez
<Private IP address of the test machine>,<Thread number of the test machine>et<Path of ntttcp.exe on the auxiliary test machine>par les valeurs réelles. Exécutezipconfigpour obtenir l'adresse IP privée et$cpuNumpour obtenir le nombre de threads. -
Consultez la bande passante réseau sur la machine de test.
La valeur
Throughput(MB/s)indique la bande passante réseau.
Tester la latence réseau
Instance Linux
-
Connectez-vous à la machine de test et à la machine de test auxiliaire. Consultez la rubrique Se connecter à une instance Linux à l'aide de Workbench.
-
Sur les deux machines, installez
sockperf:sudo yum install -y autoconf automake libtool gcc-c++ cd /opt sudo wget https://github.com/Mellanox/sockperf/archive/refs/tags/3.8.tar.gz sudo tar -zxf 3.8.tar.gz cd sockperf-3.8/ sudo ./autogen.sh sudo ./configure sudo make -j `cat /proc/cpuinfo| grep process | wc -l` sudo make install -
Consultez l'adresse IP privée de la machine de test :
ifconfig || ip addrDans la sortie de la commande, l'adresse inet de l'interface eth0 correspond à l'adresse IP privée de l'instance.
[ecs-user@izxxx ecZ ~]$ ifconfig || ip addr eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 17.xxx.xxx.15 netmask 25xxx.0 broadcast 17.xxx.55 inet6 fexxx38:c158 prefixlen 64 scopeid 0x20<link> ether 00:xxx:xxx txqueuelen 1000 (Ethernet) RX packets 178595 bytes 106030163 (101.1 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 116902 bytes 70189540 (66.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (Local Loopback) RX packets 2 bytes 140 (140.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2 bytes 140 (140.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 -
Sur la machine de test, démarrez sockperf :
sockperf sr --tcp --daemonize -
Sur la machine de test auxiliaire, envoyez du trafic vers la machine de test :
sockperf pp -i <Private IP address of the test machine> --tcp -t 30 -m 14 --full-log=result.jsonRemplacez
<Private IP address of the test machine>par la valeur réelle obtenue à l'étape précédente. -
Consultez les résultats de latence réseau.
Dans les données renvoyées :
avg-latency: latence moyenne en microsecondes.percentile 99.000: latence du 99e percentile en microsecondes.

Instance Windows
Connectez-vous à la machine de test et à la machine de test auxiliaire. Consultez la rubrique Se connecter à une instance Windows à l'aide d'un mot de passe ou d'une clé.
-
Installez les outils de test et désactivez le pare-feu sur les deux machines.
Téléchargez l'outil latte.exe et notez le chemin d'accès où l'outil est stocké.
Ouvrez la boîte de dialogue Exécuter. Saisissez powershell et cliquez sur OK pour démarrer PowerShell.
-
Désactivez le pare-feu sur les deux machines pour éviter le blocage des connexions :
Set-NetFirewallProfile -Profile * -Enabled:falseVous pouvez également créer une règle de pare-feu entrant autorisant Latte (latte.exe) sur les deux machines :
$lattePath = "<Path of latte.exe>" New-NetFirewallRule -DisplayName Latte -Protocol Any -Direction Inbound -Action Allow -Enabled True -Profile Any -Program $lattePathRemarqueRemplacez
<Path of latte.exe>par la valeur réelle.
-
Sur la machine de test, préparez-vous à recevoir des données :
$serverIp = (Get-NetIPConfiguration | Where-Object {$_.InterfaceAlias -eq '<Name of the network adapter on the test machine>'} | Select-Object -ExpandProperty IPv4Address).IPAddress $port = <Communication port> & "<Path of latte.exe on the test machine>" -a "$serverIp`:$port" -i 65535RemarqueRemplacez
<Name of the network adapter on the test machine>et<Path of latte.exe on the test machine>par les valeurs réelles. ExécutezGet-NetAdapter | Select-Object Namepour obtenir les noms des adaptateurs.Spécifiez un numéro de port pour
<Communication port>. Utilisez le même port sur les deux machines.
-
Sur la machine de test auxiliaire, envoyez des données :
$serverIp = "<Private IP address of the test machine>" $port = <Communication port> & "<Path of latte.exe on the auxiliary test machine>" -c -a "${serverIp}:$port" -i 65535RemarqueRemplacez
<Private IP address of the test machine>et<Path of latte.exe on the auxiliary test machine>par les valeurs réelles. Exécutezipconfigpour obtenir l'adresse IP privée.Spécifiez un numéro de port pour
<Communication port>. Utilisez le même port sur les deux machines.
-
Consultez les résultats de latence réseau.
La valeur
Latency(usec)indique la latence réseau moyenne en microsecondes.