【发布时间】:2010-10-27 17:11:16
【问题描述】:
首先,有一点背景。分布式版本控制系统 (DVCS) 有许多不同的比较,它们比较存储库的大小或操作的基准速度。我还没有找到任何可以对各种 DVCS 和所使用的各种协议的网络性能进行基准测试的方法……除了测量涉及“克隆”、“拉”/“获取”或“推”等网络的操作(命令)的速度。
我想知道你会如何进行这样的比较;如何测量应用程序的网络性能,或如何对网络协议进行基准测试。我在这里设想还测量性能对网络带宽和网络延迟(ping 时间)的依赖性;一些协议以更多往返交换(协商)的形式牺牲延迟,以发送所需的最少最终“包”。
如果可能,我更喜欢只涉及一台计算机的解决方案。我希望看到在 Linux 上运行的开源解决方案。但我也欢迎更通用的答案。
首选操作系统:Linux
首选语言:C、Perl、shell 脚本
可能的测量:
- 在一个会话中从服务器到客户端以及从客户端到服务器传输的总字节数;这也可以用来衡量协议的开销(带宽)
- 一个事务中的往返次数(连接)(延迟)
- 网络运行速度(克隆/拉/推所需时间)与网络带宽和网络延迟(ping 时间)的相关性
如何进行这样的测量(这样的基准)?
2009 年 2 月 6 日添加:
一个最简单的基准测试(测量)是time 命令的网络版本,即运行的命令会给我传输的字节数,以及执行给定命令期间的往返/网络连接数。
添加于 09-06-2009:
示例上述time 命令的网络版本解决方案的假想输出可能如下所示: p>
$ 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
请注意,这只是一个示例输出,详细说明了人们可能想要获取的信息。
2009 年 9 月 6 日添加:
看起来我想要的一些东西可以使用 dummynet 来实现,这个工具(最初)用于测试网络协议...
【问题讨论】:
-
您是在问,如何获取所需的数据以便为任意网络程序提供这样的基准?
-
是的,我希望至少获得传输的总字节数以及给定命令从读取到写入的更改数,例如 CPU 和内存的时间/次,以及 SystemTap I/O 的 iotimes。
-
我认为要真正回答您的问题,您最好告诉我们更多关于您的首选平台/操作系统以及您首选的编程语言的信息。此外,您感兴趣的详细测量列表将告诉我们哪种方法最可行。
-
已添加。首选操作系统是 Linux,首选语言包括(无序)C、Perl、shell 脚本,但可以是 Python 或 Java,或其他编程语言。
标签: networking network-programming benchmarking network-protocols profiling