首先,有点背景.分布式版本控制系统(DVCS)有许多不同的比较,它们比较存储库的大小或基准操作速度.我没有找到任何可以对各种DVCS的网络性能进行基准测试,以及所使用的各种协议......除了测量涉及网络的操作(命令)的速度,如'clone','pull'/'fetch'或'push'.
我想知道你怎么做这样的比较; 如何衡量应用程序的网络性能,或如何测试网络协议.我在这里设想还测量性能对网络带宽和网络延迟(ping时间)的依赖性; 一些协议以更多往返交换(协商)的形式牺牲等待时间以发送最小所需的最终"包".
如果可能的话,我宁愿只涉及一台计算机的解决方案.我想看看开源解决方案,在Linux上工作.但我也欢迎更通用的答案.
首选操作系统: Linux
首选语言: C,Perl,shell脚本
可能的测量:
如何进行此类测量(此类基准测试)?
添加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
Run Code Online (Sandbox Code Playgroud)
请注意,它只是一个示例输出,详细说明了可能想要获得的信息类型.
添加09-06-2009:
看起来我想要的一些东西可以使用dummynet,工具(最初)来测试网络协议......
benchmarking networking profiling network-programming network-protocols
我正在使用git来管理一个小项目.我一直在通过SSH执行所有事务(克隆,推送,拉取等),但最近运行了git-update-server-info,因为我想尝试通过http运行git-clone.它运作得很好.凉.现在我意识到,任何人都可以通过http克隆我的存储库而无需任何凭据.我隐约知道通过gitosis建立http身份验证,但这真的不是我想要的.我宁愿完全禁用http克隆.
有没有办法告诉git只允许通过ssh进行交易?或者我可以撤消我在运行git-update-server-info时所做的事情,以便首先通过http进行克隆?
我想将包含HTTP响应的文件拆分为两个文件:一个只包含HTTP头,另一个包含消息正文.为此,我需要\r使用shell脚本将文件拆分为第一个空行(或第一行上仅包含CR =' '字符的UNIX工具)上的两个文件.
如何以便携方式(例如使用sed,但没有GNU扩展)这样做?可以假设空行不是文件中的第一行.空行可以得到文件中的任何一个,没有一个或两个; 对我来说没关系.
如何解析CSS(CSS3)选择器并使用它(以类似jQuery的方式)来收集不是来自DOM(来自树结构)的HTML元素,而是来自流(例如SAX),即使用基于顺序访问事件的解析器?
顺便说一下,有没有需要访问DOM的CSS选择器(或它们的组合)(维基百科SAX页面说XPath选择器"需要能够在解析的XML树中随时访问任何节点")?
我最感兴趣的是实现选择器组合器,例如'AB'后代选择器.
我更喜欢描述算法的解决方案,或者更喜欢Perl(用于HTML :: Zoom).
如果XMLHttpRequest对象支持W3C Progress Events,有没有办法在JavaScript中检查?我的意思是在这里,如果将onload,onprogress,onabort,onerror等属性设置为某些处理函数将具有那些称为那些事件的函数,如上所述.
附加(奖金)问题:有没有办法增加XMLHttpRequest(例如使用一些计时器)来支持这些事件?
阿里纳斯:我先在的XMLHttpRequest的上下文中找到关于W3C的进度事件在这里
在" 关于国际化的Perl中的状态 "建议使用博客帖子从2009年4月26日地点:: TextDomain模块从在Perl本地化/国际化的libintl-perl的分布.此外,我必须使用gettext,并且Locale :: Messages/Locale :: TextDomain中的gettext支持比Locale :: Maketext中的gettext仿真更自然.
GNU gettext手册中" 15其他编程语言 " 一章中的" 15.5.18 Perl " 小节说:
- 可移植性
- 该
libintl-perl软件包与平台无关,但不属于Perl核心.如果目标系统上没有安装软件包,程序员负责提供所需功能的虚拟实现.
但是examples/hello-perlgettext源中的两个示例都没有(一个使用较低级别的Locale :: Messages,一个使用更高级别的Locale :: TextDomain)包括检测包是否安装在目标系统上,如果不是,则提供虚拟实现.
什么是复杂的问题(关于检测是否安装了包)是Locale :: TextDomain联机帮助页的以下片段:
概要
Run Code Online (Sandbox Code Playgroud)use Locale::TextDomain ('my-package', @locale_dirs); use Locale::TextDomain qw (my-package);用法
至关重要的是要记住您使用"概要"部分中指定的Locale :: TextDomain(3),这意味着您必须使用它,而不是需要它.与其他模块相比,该模块的行为完全不同.
您能否告诉我如何检测目标系统上是否存在libintl-perl,以及如果未安装虚拟防护实现,如何提供?或者举例说明这样做的程序/模块?
有没有使用Fortran 2003标准的内部模块从C库头自动生成Fortan 绑定的工具iso_c_bindings?
我对将 C 转换为Fortran 不感兴趣,但只生成绑定.
我正在尝试使用win7和git-bash删除.git目录.这是我的尝试:
$ rm -rf .git
rm: cannot remove directory `.git/objects/5e': Permission denied
rm: cannot remove directory `.git/objects': Directory not empty
rm: cannot remove directory `.git': Directory not empty
$ rmdir .git
rmdir: `.git': Directory not empty
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有AJAX应用程序,它根据服务器响应更新页面.AJAX服务器响应所基于的命令需要很长时间才能生成完整响应,但它会在计算后立即发送部分信息.该部分响应/部分信息以"突发"发送,并且每个突发的时间和大小是不可预测的.将命令输出流式传输到Web浏览器(到AJAX请求)的CGI脚本(在Perl中)已启用autoflush.
服务器响应基于外部命令的输出.虽然'time cmd>/dev/null"平均给出大约10.0秒,'time cmd | head>/dev/null'给出的时间少于0.1秒(例如数据).所有数据都是单次调用此外部命令的结果.
情况如下所示(ASCII-art图如下):
client | | server
--------- ---------
request -\
\
\
\
\->
/- response
/ .
/ .
/ /- .
<-/ / .
/ .
/ /- [end]
<-/ /
/
/
<-/
Run Code Online (Sandbox Code Playgroud)
我对这个问题有几个疑问.
注意:服务器端是在Perl中作为CGI脚本完成的,我更愿意看到(也)解决方案,而不使用像jQuery这样的JavaScript库/框架.
AJAX应用程序服务器端使用的命令输出是基于行的.每组行以一种定义的行开头,以其他类型的行结束,由独立和不可更改的数据组成.我应该只是将命令的响应作为'text/plain'传输并在客户端进行JavaScript处理,还是应该在服务器上预处理数据,并使用'application/json'mimetype将整个数据块作为JSON发送?
可能会发生服务器一次发送的大块数据很快就会被另一块数据跟踪.如何处理onreadystatechange上次调用未完成时调用处理程序的情况?我应该使用全局变量作为信号量,还是将状态变量作为处理程序参数传递(好吧,使用xhr.onreadystatechange = function() { handleRequest(xhr, state) })?
我应该使用'text/plain'或'application/json',或者'multipart/x0mixed-replace'吗?注意:此应用程序应该在(alomst)任何浏览器中工作.
如何处理仅在收到完整响应后调用onReadyStateChange的Web浏览器(JavaScript引擎)(所以我不会xhr.readyState == 3多次看到部分响应)?好吧,除了使用一些JavaScript框架.
如何处理不完整的回答(在这种情况下意味着不完整的行).
我应该发送响应结束标记,还是依靠计数器检查我们是否收到了所有数据,还是可以依靠检测xhr.readyState == 4?
即使是部分回应也会有所帮助.
如何在负载很重的情况下对Web应用程序(在Perl中)进行基准测试(比较两种不同的实现)和配置文件(在实现中查找性能瓶颈)?这个webapp(假设是)IO绑定而不是CPU绑定.
我想将提议的实现(建议的改进)与当前的解决方案进行比较,无论是在实际负载上还是最小化最终的性能损失(可能是在负载均衡器后面的不同服务器上的两个不同的实现),或者重放/模拟新实现的负载,或者模拟大量使用IO.
我还想在提议的实现中描述CPU和IO瓶颈,但是在重负载下测试行为.
操作系统是Linux,Web服务器是Apache.
ServerFault上发布了同样的问题:如何在高负载下对IO绑定的Perl Web应用程序进行基准测试和配置文件?
我认为这里的答案可能是关于用Perl编写的Web应用程序的基准测试和分析,也可能是关于复制实际负载条件,或者找到测量/基准测试,它可以预测哪些实现在重负载下的IO限制条件下会表现得更好.
ajax ×2
benchmarking ×2
git ×2
javascript ×2
perl ×2
profiling ×2
binding ×1
c ×1
css ×1
fortran ×1
fortran2003 ×1
gettext ×1
git-bash ×1
git-clone ×1
html ×1
http ×1
localization ×1
networking ×1
performance ×1
portability ×1
sax ×1
sed ×1
shell ×1
windows ×1