Появилась задача, узнать какова скорость работы по сети.
Как грамотно это сделать? Возможно ли сделать это в консоли без ГУёв?
(Этот вопрос пришёл мне в почту.)
-
Вряд ли есть именно для измерения скорости, можно посмотреть bmon и iftop. Но придётся что-то качать. Как вариант ещё wget.
-
-
Но всё-таки самый простой - спросить у провайдера :)
-
-
Провайдеры нередко, скажем так, слегка кривят душой, отвечая на вопросы по поводу скорости. :)
-
-
В договоре или тарифном плане обычно это должно быть.
-
-
У прошлого прова в договоре было указано "До мегабита". Когда я пришёл к ним с распечаткой статистики, где явно было видно, что скорость в основном колебалась от 512кбит до ~700кбит, мне показали договор и объяснили, что "до мегабита" - это значит "от нуля до мегабита" в зависимости от нагрузки на канал. Если хочу мегабит, то предложили сменить тарифный план на предусматривающий скорость "Один мегабит" с ценой в два раза выше. Сменил прова из принципа.
У следующего прова, к которому подключился, чётко сказано было "Два мегабита". Сначала всё так и было, а потом скорость ухудшилась и не поднималась выше полутора тысяч килобит. К ним я тоже пришёл с распечаткой, после чего приехали техники, посмотрели, проверили и выяснили, что в моём подъезде повреждён телефонный кабель(а инет через ADSL). Кабель заменили и всё стало прекрасно.
Как говорится, доверяй (провайдеру), но проверяй. :)
-
Если речь оскорости интернета, то http://www.speedtest.net/ =)
Если лан, то вгет.
-
-
-
time wget url:/путь/к/эталонному_файлу
файл обычно от 500К до 1500К
утилита time - покажет время, потраченное на операцию. Дальше арифметика.
-
-
wget и так пишет скорость вроде
-
man ifstat
Утилита показывает текущую скорость передачи как входящих, так и исходящих потоков на любом интерфейсе. Запустив её, можно попробовать загрузить канал несколкими парралельными закачками чего-нибудь большого. Я обычно ставил несколько загрузок с kernel.org, и несколько с образами дисков каких-нибудь дистров. И скорость проверяю, и полезные вещи скачиваю. :)
-
А что именно вы подразумеваете под скорость работы в сети ?
пропускную способность пакетов, объема, латентность ?
-
Вот это можно почитать
-
Хоть я и приверженец Console-free идеологии, все же раз уж попросили (да и такая задача легче решается как раз в консоли), то вот решение:
- Ставим утилиту iperf:
Для ArchLinux
1
2
|
yaourt -S iperf
pacman -S iperf |
Для Ubuntu/Debian:
1
2
|
apt-get install iperf
aptitude install iperf |
Для Mandriva:
urpmi install iperf
Для FreeBSD:
1
2
|
cd /usr/ports/benchmarks/iperf
make install clean |
Для CentOS:
yum install iperf
Для Windows:
На официальной странице iperf для Windows можете найти прямую ссылку на утилиту iperf, которую желательно кинуть в папку, содержащуюся в переменной PATH (например, C:\WINDOWS)
- Запускаем на одной машине в сети iperf в режиме сервера:
iperf -s -p 54321 -D
где -s говорит о том, что iperf запускаем в режиме сервера;
число после -p указывает на используемый для связи порт (по умолчанию используется порт 5001);
параметр -D говорит о том, что iperf запускается в режиме демона
В результате получим следующий вывод:
1
2
3
4
5
|
------------------------------------------------------------
Server listening on TCP port 54321
TCP window size: 65.3 KByte (default)
------------------------------------------------------------ |
при этом терминал будет занят iperf, если опция -D не была указана. В таком случае результаты тестов будут выводиться в терминал по мере их поступления и обработки:
1
2
3
4
5
6
7
8
|
iperf -s -p 54321
------------------------------------------------------------
Server listening on TCP port 54321
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[1840] local 172.16.0.5 port 54321 connected with 172.16.0.1 port 56059
[ ID] Interval Transfer Bandwidth
[1840] 0.0-10.1 sec 4.31 MBytes 3.59 Mbits/sec |
Если же сервер был запущен в режиме демона (опция -D), то процесс не будет занимать терминал, а только выдаст:
1
2
|
Running Iperf Server as a daemon
The Iperf daemon process ID : 5774 |
естественно, у вас ID будет другим и всегда разным
- Запускаем на другой машине в сети iperf в режиме клиента:
iperf -c server_ip -p 54321 -d
где -c указывает на то, что iperf запущен в режиме клиента;
число после -p устанавливает порт для связи (используем тот же порт, что и на сервере)
параметр -d заставит iperf провести "двустороннюю" проверку производительности - скорость до сервера и скорость до клиента (можно убрать этот параметр, так как вряд ли он нужен для обычных пользователей);
server_ip - IP адрес машины, на которой запущен iperf в режиме сервера.
- В результате получим примерно вот такой вывод:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
iperf -c 172.16.0.1 -d -p 54321
------------------------------------------------------------
Server listening on TCP port 54321
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to 172.16.0.1, TCP port 54321
TCP window size: 8.00 KByte (default)
------------------------------------------------------------
[1824] local 172.16.0.5 port 2455 connected with 172.16.0.1 port 54321
[1780] local 172.16.0.5 port 54321 connected with 172.16.0.1 port 60395
[ ID] Interval Transfer Bandwidth
[1824] 0.0-10.1 sec 2.31 MBytes 1.93 Mbits/sec
[1780] 0.0-10.1 sec 2.02 MBytes 1.68 Mbits/sec |
Это на стороне клиента в системе Windows при испольовании двустороннего теста.
Собственно, если вывод этой утилиты вам ничего не говорит, то попробуйте поиграться с параметрами, прочитав man iperf. Также есть другие утилиты для тестирования производительности сети (такие как ntop, netperf, Bandwidth Test Controller (BWCTL), thrulay и другие). Думаю, написал и так многовато, так что остальные утилиты разберете сами, либо, если нужен постоянный мониторинг, то советую поискать GUI приложения для повседневного использования.
-
-
Я подобное с исользованием netcat делал, но с подсчетом через iftop.
За iperf спасибо, засейвил себе. Меньше лишних действий.
-
Чёрт, а ведь действительно быстрее…
-
Спасибо!!
-
или так:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
typedef unsigned long long ull;
int parseDevFile(const char * iface, ull *bRx, ull *pRx,
ull *bTx, ull *pTx)
{
FILE * fp = NULL;
char * line = NULL;
unsigned int len = 0;
fp = fopen("/proc/net/dev", "r");
if(fp==NULL)
{
return -1;
}
while(getline(&line,&len,fp)!= -1)
{
if(strstr(line,iface)!=NULL)
{
// following line must be corrected for each distro, due the difference in /proc/net/dev!
sscanf(strstr(line,":")+1,"%llu%llu%*u%*u%*u%*u%*u%*u%llu%llu",
bRx, pRx, bTx, pTx);
}
}
fclose(fp);
free(line);
return 0;
}
void dumpInterfaceUsage(const char * iface)
{
ull ifaceBRxOld=0, ifaceBTxOld=0, ifacePRxOld=0, ifacePTxOld=0;
ull ifaceBRxNew=0, ifaceBTxNew=0, ifacePRxNew=0, ifacePTxNew=0;
const int SLEEP_TIME = 2;
if(parseDevFile(iface,&ifaceBRxOld,&ifacePRxOld,&ifaceBTxOld,&ifacePTxOld)==-1) return;
//sleep(SLEEP_TIME);
while(1)
{
if(parseDevFile(iface,&ifaceBRxNew,&ifacePRxNew,&ifaceBTxNew,&ifacePTxNew)==-1) return;
printf("%s In: %8.2f kbyte/s %5llu P/s Out: %8.2f kbyte/s %5llu P/s\n", iface,
(ifaceBRxNew-ifaceBRxOld)/(SLEEP_TIME * 1024.0),
(ifacePRxNew-ifacePRxOld)/SLEEP_TIME,
(ifaceBTxNew-ifaceBTxOld)/(SLEEP_TIME * 1024.0),
(ifacePTxNew-ifacePTxOld)/SLEEP_TIME);
ifaceBRxOld=ifaceBRxNew; ifaceBTxOld=ifaceBTxNew;
ifacePRxOld=ifacePRxNew; ifacePTxOld=ifacePTxNew;
sleep(SLEEP_TIME);
}
}
int main(int argc, char **argv)
{
if(argc != 2)
{
printf("Usage: %s interfacename\n", argv[0]);
exit(1);
}
dumpInterfaceUsage(argv[1]);
return 0;
} |
-
-
некультурно выкладывать куски кода простым текстом при наличии тега code (тем более с подсветкой). И зачем было каждую вторую строку делать пустой?
пофиксил, но недоволен.
Ну, а для тех кому надо - компилится это дело так:
сохраняете все это в файлик с расширением .c (например, performance_test.c) и компилите командой:
gcc performance_test.c -o perf_test
После чего можете запускать утилиту:
./perf_test eth0
или
./perf_test wlan0
После чего утилита будет непрерывно выводить в stdout по одной строке статистики:
1
2
3
4
5
6
7
8
9
|
wlan0 In: 0.00 kbyte/s 0 P/s Out: 0.00 kbyte/s 0 P/s
wlan0 In: 0.03 kbyte/s 0 P/s Out: 0.09 kbyte/s 0 P/s
wlan0 In: 0.03 kbyte/s 0 P/s Out: 0.09 kbyte/s 0 P/s
wlan0 In: 0.34 kbyte/s 4 P/s Out: 0.80 kbyte/s 4 P/s
wlan0 In: 0.03 kbyte/s 0 P/s Out: 0.09 kbyte/s 0 P/s
wlan0 In: 0.05 kbyte/s 1 P/s Out: 0.12 kbyte/s 1 P/s
wlan0 In: 0.03 kbyte/s 0 P/s Out: 0.09 kbyte/s 0 P/s
wlan0 In: 0.03 kbyte/s 0 P/s Out: 0.09 kbyte/s 0 P/s
... |
Однако, это скорее монитор, чем действительно тестер "производительности" сети - он отобразит вам текущую скорость передачи в килобайтах и пакетах в нисходящем и восходящем потоках. Чтобы узнать пропускную способность нужно параллельно запустить передачу по сети какого-нибудь файла метров на 10-300 (в зависимости от ожидаемой пропускной способности сети). А потом, как уже писали, арифметика.
-
-
извини, первый комментарий здесь - кликал мышью быстрее чем думал, а функции редактирования комментариев не нашёл.
-
-
Функции редактирования комментариев недоступны пользователям. Для этого есть предпросмотр комментария, чтобы увидеть сразу как это будет выглядеть.
-
iftop и файлик с ближайшего сервака на закачку.
|
|
|
Последние посты
|
|
Последние комментарии
|
|
Изменения
|
|
Top блогов (все)
|
|
Top пользователей (все)
|
|
|