Mar*_*kus 9 c linux macos lua clang
比较Macbook Air上的这个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'
Run Code Online (Sandbox Code Playgroud)
VM中的clang版本
$ clang --version
clang version 3.4.2 (tags/RELEASE_34/dot2-final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
Run Code Online (Sandbox Code Playgroud)
$ 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
Run Code Online (Sandbox Code Playgroud)
$ time ./luaclang sumdata.lua data.log
Original Size: 117261680 kb
Compressed Size: 96727557 kb
real 0m3.124s
user 0m3.100s
sys 0m0.020s
Run Code Online (Sandbox Code Playgroud)
$ time ./luagcc sumdata.lua data.log
Original Size: 117261680 kb
Compressed Size: 96727557 kb
real 0m3.090s
user 0m3.080s
sys 0m0.007s
Run Code Online (Sandbox Code Playgroud)
$ time ./luatcc sumdata.lua data.log
Original Size: 117261680 kb
Compressed Size: 96727557 kb
real 0m7.071s
user 0m7.053s
sys 0m0.010s
Run Code Online (Sandbox Code Playgroud)
现在使用与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.
Run Code Online (Sandbox Code Playgroud)
铿锵版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
Run Code Online (Sandbox Code Playgroud)
$ ls -lh|grep lua
-rwxr-xr-x 1 markus staff 194K 20 Aug 18:26 luaclangmac
Run Code Online (Sandbox Code Playgroud)
$ time ./luaclangmac sumdata.lua data.log
Original Size: 117261680 kb
Compressed Size: 96727557 kb
real 0m4.338s
user 0m4.264s
sys 0m0.062s
Run Code Online (Sandbox Code Playgroud)
我本以为主机系统比虚拟化(或大致相同的速度)快一点.但并非主机系统的可重现性较慢.
那么,任何想法或解释?
与此同时,我已经在我的MBA上安装了Arch Linux.基准测试与Arch Linux VM一样快.
小智 0
我的猜测是 HFS+ 日志功能增加了延迟。这很容易测试:如果 TimeMachine 在 Macbook Air 上运行,您可以尝试禁用它,并禁用文件系统上的日志记录(显然您应该首先备份)。作为根用户:
diskutil disableJournal YourDiskVolume
Run Code Online (Sandbox Code Playgroud)
我想看看这是否是问题的原因。然后我会立即重新启用日记功能。
diskutil enableJournal YourDiskVolume
Run Code Online (Sandbox Code Playgroud)
OS X 10.9.2 有一个与日志相关的错误,会挂起文件系统...本页进一步探讨了这个错误,尽管该错误 (#15821723) 尚未被报告为已修复,但据报道日志不再使磁盘崩溃控制器。