Материал для ознакомления: https://nag.ru/material/37838
Оно непросто, но даст понять, что разное оборудование у провайдеров по-разному управляет ресурсами и полосой. Чтобы получить ресурсы и полосу, вам надо создать нагрузку на ресурсы и полосу, а вы её не создаете! В режиме TCP размер блока у iperf (параметр l) по-умолчанию всего 128К, а время теста (параметр t) 10 секунд. Умный маршрутизатор/коммутатор провайдера даже не воспримет это, это не нагрузка, это так, мелкий бёрст. Чтобы получить "трубу" надо создать поток в "трубу", и надежнее всего делается это через многопоточность. Ну если так хочется в один поток, то создавайте "напор" - большие блоки и время теста минут 10, чтобы весь Интернет по пути осознал, проникся и вывалил нужные ресурсы - буферы, очереди и т.п. (ну или записал вас в потенциально нежелательную активность типа DOS и загнал в резервацию, такой исход тоже возможен).