比较这个Lua脚本在Macbook Air (Mac OS 10.9.4,i5-4250U (1.3GHz),8GB RAM)和运行Arch Linux的VM (virtualbox)上的执行时间。
首先,我自己使用clang编译了lua,将其与Mac OS X clang二进制文件进行比较。
$ tcc *[^ca].c lgc.c lfunc.c lua.c -lm -o luatcc
$ gcc -O3 *[^ca].c lgc.c lfunc.c lua.c -lm -o luagcc
/tmp/ccxAEYH8.o: In function `os_tmpname':
loslib.c:(.text+0x29c): warning: the use of `tmpnam' is dangerous, better use `mkstemp'
$ clang -O3 *[^ca].c lgc.c lfunc.c lua.c -lm -o luaclang
/tmp/loslib-bd4ef4.o:loslib.c:function os_tmpname: warning: the use of `tmpnam' is dangerous, better use `mkstemp'
$ clang --version
clang version 3.4.2 (tags/RELEASE_34/dot2-final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
$ ls -lh |grep lua
-rwxr-xr-x 1 markus markus 210K 20. Aug 18:21 luaclang
-rwxr-xr-x 1 markus markus 251K 20. Aug 18:22 luagcc
-rwxr-xr-x 1 markus markus 287K 20. Aug 18:22 luatcc
$ time ./luaclang sumdata.lua data.log
Original Size: 117261680 kb
Compressed Size: 96727557 kb
real 0m3.124s
user 0m3.100s
sys 0m0.020s
$ time ./luagcc sumdata.lua data.log
Original Size: 117261680 kb
Compressed Size: 96727557 kb
real 0m3.090s
user 0m3.080s
sys 0m0.007s
$ time ./luatcc sumdata.lua data.log
Original Size: 117261680 kb
Compressed Size: 96727557 kb
real 0m7.071s
user 0m7.053s
sys 0m0.010s
现在用与VM中相同的clang命令/选项编译lua。
$ clang -O3 *[^ca].c lgc.c lfunc.c lua.c -lm -o luaclangmac
loslib.c:108:3: warning: 'tmpnam' is deprecated: This function is provided for
compatibility reasons only. Due to security concerns inherent in the design of tmpnam(3),
it is highly recommended that you use mkstemp(3)
instead. [-Wdeprecated-declarations]
lua_tmpnam(buff, err);
^
loslib.c:57:33: note: expanded from macro 'lua_tmpnam'
#define lua_tmpnam(b,e) { e = (tmpnam(b) == NULL); }
^
/usr/include/stdio.h:274:7: note: 'tmpnam' declared here
char *tmpnam(char *);
^
1 warning generated.
我试过两个版本。3.4.2和xcode提供的一个。3.4.2版本稍微慢一点。
Markuss-MacBook-Air:bin markus$ ./clang --version
clang version 3.4.2 (tags/RELEASE_34/dot2-rc1)
Target: x86_64-apple-darwin13.3.0
Thread model: posix
Markuss-MacBook-Air:bin markus$ clang --version
Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.3.0
Thread model: posix
$ ls -lh|grep lua
-rwxr-xr-x 1 markus staff 194K 20 Aug 18:26 luaclangmac
$ time ./luaclangmac sumdata.lua data.log
Original Size: 117261680 kb
Compressed Size: 96727557 kb
real 0m4.338s
user 0m4.264s
sys 0m0.062s
我本以为主机系统比虚拟化快一点(或者大致相同的速度)。但并不是说主机系统的再现速度较慢。
那么,有什么想法或解释吗?
与此同时,我已经在我的MBA上原生安装了阿奇 Linux。基准测试的速度与建筑 Linux 虚拟机一样快。
为了测试lua的速度,不是读取文件,而是将一些示例数据硬编码到测试脚本中,并根据需要反复遍历这些行。像前面提到的其他人一样,文件系统的影响将超过任何编译器的差异。
我的猜测是HFS日志记录功能增加了延迟。这很容易测试:如果TimeMachine在Macbook Air上运行,您可以尝试禁用它,并禁用文件系统上的日志记录(显然您应该先备份)。作为root:
diskutil disableJournal YourDiskVolume
我会看看这是不是问题的原因。然后我会立即重新启用日志功能。
diskutil enableJournal YourDiskVolume
OS X 10.9.2有一个日志相关的错误,它会挂起文件系统...本页进一步探讨了这个错误,尽管这个错误(#15821723)还没有被报告为已修复,但据报道日志不再使磁盘控制器崩溃。
能否尝试运行“perf stat”而不是“time”。它为您提供了更多的细节,时间测量也更准确,避免了VM内部的时间差异。
下面是一个示例:
$ perf stat ls > /dev/null
“ls”的性能计数器统计数据:
23.348076 task-clock (msec) # 0.989 CPUs utilized
2 context-switches # 0.086 K/sec
0 cpu-migrations # 0.000 K/sec
93 page-faults # 0.004 M/sec
74,628,308 cycles # 3.196 GHz [65.75%]
740,755 stalled-cycles-frontend # 0.99% frontend cycles idle [48.66%]
29,200,738 stalled-cycles-backend # 39.13% backend cycles idle [60.02%]
80,592,001 instructions # 1.08 insns per cycle
# 0.36 stalled cycles per insn
17,746,633 branches # 760.090 M/sec [60.00%]
642,360 branch-misses # 3.62% of all branches [48.64%]
0.023609439 seconds time elapsed
问题内容: 我正在尝试建立一个项目,从git风暴:https : //github.com/nathanmarz/storm/wiki/Setting-up-development- environment 下载Storm发行版,解压缩,然后将解压后的bin /目录放在PATH中 我的问题是:PATH是什么意思?他们到底要我做什么? 有时我会看到一些/ bin / path,$ PATH或echo
问题内容: 我在自学Python网络,回想起我在自学线程时,碰到了该页面,所以我复制了脚本,将其更新为Python 3.1.1并运行了它们。他们工作得很好。 然后,我做了一些修改。我的目标是做一些简单的事情: 客户端腌制一个整数并将其发送到服务器。 服务器接收腌制的整数,对其进行腌制,将其加倍,然后腌制并将其发送回客户端。 客户端接收腌制(并加倍)的整数,对其进行腌制并输出。 这是服务器: 这是客
我目前正在Windows服务器上试验Docker容器。我已经创建了许多容器,我想看看它们在主机文件系统中的实际保存位置(如Hyper-V的.vhd文件)。我是否可以查看默认位置,或者使用Docker CLI查找该位置的方法?
问题内容: 该代码非常有用: 但是这段代码 不起作用 : 它引发此错误: ZMQError:没有这样的设备 为什么,zeromq无法使用localhost接口? 它只能在同一台计算机上的IPC上运行吗? 问题答案: 问题在于: 尝试更改为:
问题内容: 为什么要在PHP中使用模板系统? 我的问题背后的原因是:PHP本身是功能丰富的模板系统,为什么要安装另一个模板引擎? 到目前为止,我发现的仅有的两个专业人士是: 语法更简洁(有时) 模板引擎通常不足以实现业务逻辑,因此会迫使您分离关注点。使用PHP进行模板化可以吸引您了解模板化原理,并重新开始编写代码。 …与利弊相比,两者都可以忽略不计。 小例子: 的PHP 聪明的 我真的没有任何区别
编辑:为什么在局部变量上这么快?(~16秒进行相同的迭代,但对函数内部的局部变量进行迭代)