Сначала немного фона. Существует множество различных сравнений распределенных систем контроля версий (DVCS), которые сравнивают размер репозитория или скорость тестирования операций. Я не нашел ни одного, который бы оценивал производительность сети различных DVCS, а также различные используемые протоколы... помимо измерения скорости операций (команд), связанных с сетью типа "clone", "pull" /'fetch "или" push ".
Я хотел бы узнать, как бы вы сделали такое сравнение; как измерять производительность сети приложения или как оценивать сетевой протокол. Я представляю здесь, среди прочих, также измерение зависимости производительности и пропускной способности сети и времени ожидания (времени пинга) сети; некоторые протоколы жертвуют латентностью в форме более круглых обменов (переговоров), чтобы отправить минимально необходимый окончательный "пакет".
Я бы предпочел решения, включающие только один компьютер, если это было возможно. Я хотел бы видеть решения с открытым исходным кодом, работающие в Linux. Но я также хотел бы получить более общие ответы.
Предпочитаемая ОС: Linux
Предпочтительные языки: C, Perl, shell script
Возможные измерения:
- общее количество байтов, переданных от сервера к клиенту и от клиента к серверу за один сеанс; это также может использоваться для измерения служебных данных протокола (полосы пропускания).
- количество раундов (соединений) в одной транзакции (латентность)
- зависимость скорости работы сети (время, затрачиваемое на клонирование/вытягивание/нажатие) от полосы пропускания сети и от задержек сети (время пинга)
Как сделать такие измерения (такие тесты)?
Добавлено 02-06-2009:
Простейшим эталоном (измерение) будет сетевая версия команды time
, т.е. Команда, которая запускает, дает мне количество переданных байтов и количество округленных поездок/сетевых соединений во время выполнения данной команды.
Добавлено 09-06-2009:
Пример мнимого выхода для упомянутого выше решения сетевой версии команды time
может выглядеть следующим образом:
$ ntime git clone -q git://git.example.com/repo.git
...
bytes sent: nnn (nn kiB), bytes received: nnn (nn kiB), avg: nn.nn KB/s
nn reads, nn writes
Обратите внимание, что это всего лишь пример вывода, детализирующий информацию, которую можно было бы получить.
Добавлено 09-06-2009:
Похоже, что некоторые из того, что я хочу, можно получить, используя dummynet, инструмент (изначально) для тестирования сетевых протоколов...