当前位置: 首页 > 知识库问答 >
问题:

为什么主机系统上的 lua 比在 linux vm 中慢?

欧阳嘉年
2023-03-14

比较这个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 虚拟机一样快。

共有3个答案

阮飞翔
2023-03-14

为了测试lua的速度,不是读取文件,而是将一些示例数据硬编码到测试脚本中,并根据需要反复遍历这些行。像前面提到的其他人一样,文件系统的影响将超过任何编译器的差异。

公良英资
2023-03-14

我的猜测是HFS日志记录功能增加了延迟。这很容易测试:如果TimeMachine在Macbook Air上运行,您可以尝试禁用它,并禁用文件系统上的日志记录(显然您应该先备份)。作为root:

diskutil disableJournal YourDiskVolume

我会看看这是不是问题的原因。然后我会立即重新启用日志功能。

diskutil enableJournal YourDiskVolume

OS X 10.9.2有一个日志相关的错误,它会挂起文件系统...本页进一步探讨了这个错误,尽管这个错误(#15821723)还没有被报告为已修复,但据报道日志不再使磁盘控制器崩溃。

爱花蜂
2023-03-14

能否尝试运行“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秒进行相同的迭代,但对函数内部的局部变量进行迭代)