Инструменты пользователя

Инструменты сайта


net:channel_performance_measuring

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
net:channel_performance_measuring [2022/03/01 10:22] – [Предварительная подготовка] sannet:channel_performance_measuring [2022/03/01 12:15] (текущий) – [Эксперимент №5 - делаем программу отправки трафика напрямую в сетевой интерфейс] san
Строка 1: Строка 1:
 ====== Измерение пропускной способности канала: флудим по полной ====== ====== Измерение пропускной способности канала: флудим по полной ======
  
-**Дано:** есть арендованный оптический канал со скоростью 2 гигабита по договору. С одной стороны этот канал можно воткнуть в сервер, другая сторона находится далеко и разместить там измерительное оборудование не представляется возможным. С удаленной стороны канал подключен к коммутатору с которого можно снять значения приходящего из канала трафика.+**Дано:** есть арендованный оптический канал со скоростью 2 гигабита по договору. С одной стороны этот канал можно воткнуть в сервер в котором есть 10G оптическая сетевуха, другая сторона находится далеко и разместить там измерительное оборудование не представляется возможным. С удаленной стороны канал подключен к коммутатору с которого можно снять значения приходящего из канала трафика.
  
 **Требуется:** проверить что обещанные 2 гигабита предоставляются арендованным каналом. **Требуется:** проверить что обещанные 2 гигабита предоставляются арендованным каналом.
Строка 25: Строка 25:
  
 <file console> <file console>
- ens9f1                                                                                                                                                                                                    bmon 4.0 + eth1                                                                                                                                                                                                      bmon 4.0 
 Interfaces                     │ RX bps       pps     %│ TX bps       pps     % Interfaces                     │ RX bps       pps     %│ TX bps       pps     %
- >ens9f1                       │      0              │   1.03GiB 733.75K+ >eth1                         │      0              │   1.03GiB 733.75K
 ───────────────────────────────┴───────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ───────────────────────────────┴───────────────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
                             (RX Bytes/second)                                                                MiB                      (TX Bytes/second)                             (RX Bytes/second)                                                                MiB                      (TX Bytes/second)
Строка 317: Строка 317:
  struct ifreq if_idx;  struct ifreq if_idx;
  struct ifreq if_mac;  struct ifreq if_mac;
- int tx_len = 0; 
  struct ether_header *eh = (struct ether_header *) sendbuf;  struct ether_header *eh = (struct ether_header *) sendbuf;
  struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header));  struct iphdr *iph = (struct iphdr *) (sendbuf + sizeof(struct ether_header));
Строка 359: Строка 358:
  /* Ethertype field */  /* Ethertype field */
  eh->ether_type = htons(ETH_P_IP);  eh->ether_type = htons(ETH_P_IP);
- tx_len += sizeof(struct ether_header); 
  
  /* IP Header */  /* IP Header */
Строка 375: Строка 373:
  /* Destination IP address */  /* Destination IP address */
  iph->daddr = inet_addr(server);  iph->daddr = inet_addr(server);
- tx_len += sizeof(struct iphdr); 
  
  udph->source=htons(55555);  udph->source=htons(55555);
Строка 381: Строка 378:
 // udph->len // udph->len
 // udph->check // udph->check
- tx_len += sizeof(struct udphdr); 
  
  /* Packet data */  /* Packet data */
Строка 460: Строка 456:
 </file> </file>
 Если на сетевой карте выставить MTU в 9000, то можно увеличить загрузку однопоточным зафлуживанием канала. В многопоточном варианте все-равно все упирается в потолок 1.08GiB/s, но зато можно снизить число запускаемых потоков для достижения этого "потолка". Если на сетевой карте выставить MTU в 9000, то можно увеличить загрузку однопоточным зафлуживанием канала. В многопоточном варианте все-равно все упирается в потолок 1.08GiB/s, но зато можно снизить число запускаемых потоков для достижения этого "потолка".
 +
 +Результатов превышающих абсолютно все описанные удалось добиться при использовании udpblast в многопоточном режиме **1.16GiB 150.92K** **1,16*8=9,28 гигабит в секунду**, что близко к максимальной полосе испытываемого 10гигабитного интерфейса, однако все остальные эксперименты были тоже интересны.
 +
 +Вот скрипт многопоточного флуда с помощью tcpblast
 +<file bash netflood-max.sh>
 +#!/bin/bash
 +
 +threads=32
 +buflen=65535
 +pkt="$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w $buflen| head -n 1)"
 +
 +for i in $(seq 1 $threads)
 +do
 + (echo "$pkt" |udpblast -4q -s 32kb -c1m 192.168.10.25:5555) &
 + echo "Run thread $i"
 + sleep 0.1
 +done
 +read -p "Flood Started! Press enter to terminate flood"
 +killall -9 udpblast
 +</file>
 +
 +
 +{{tag>linux shell Си network}}
net/channel_performance_measuring.1646119360.txt.gz · Последнее изменение: 2022/03/01 10:22 — san

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki