将Macbook Air上的this Lua Script(Mac OS 10.9.4,i5-4250U(1.3GHz),8GB RAM)的执行时间与运行Arch Linux的VM(虚拟机)进行比较。
首先,我自己使用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'
VM中的clang版本
$ 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.
铿锵版Mac OS X.
我试过两个版本。 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上安装了Arch Linux。基准测试与Arch Linux VM一样快。
答案 0 :(得分:1)
您可以尝试运行'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
答案 1 :(得分:0)
我的猜测是HFS +日记功能正在增加延迟。这很容易测试:如果TimeMachine在Macbook Air上运行,你可以尝试禁用它,并禁用文件系统上的日记功能(显然你应该先备份)。以root身份:
diskutil disableJournal YourDiskVolume
我会看是否是问题的原因。然后我会立即重新启用日记功能。
diskutil enableJournal YourDiskVolume
OS X 10.9.2有一个与日志相关的错误会导致文件系统挂起...... this page会进一步探讨这个错误,即使错误(#15821723)没有被报告为已修复,也可能是日志错误据报道,不再崩溃磁盘控制器。
答案 2 :(得分:0)
测试lua的速度,而不是读取文件将一些示例数据硬编码到测试脚本中,并根据需要一遍又一遍地循环。与其他提到的一样,文件系统效果将超过任何编译器差异。