【发布时间】:2020-12-02 16:50:01
【问题描述】:
NodeJS 在我的嵌入式系统上加载需要 26 秒。
我有一个来自 Microchip 的 SOM(模块上系统)。它是 ARM 架构,运行频率为 500MHz,内存为 128 MB。
它上面运行着一个安装了 NodeJS 的 Linux 的 BuildRoot 映像。
我有一个名为“index.js”的空文件。
当我运行“时间节点 index.js”时,需要 26 秒才能完成。 如果我编辑“index.js”以添加“console.log('hello');”,它需要 26 秒才能打印出消息。
因此,NodeJS 似乎需要 26 秒来加载并开始运行 JS 文件。
我运行了“strace 节点 index.js”。它调用 mprotect 和 cacheflush 几千次来降低大部分速度:
13:41:43 cacheflush(0x309228e0, 0x309228ec, 0) = 0
13:41:43 mprotect(0x30902000, 249856, PROT_READ|PROT_EXEC) = 0
13:41:43 mprotect(0x30902000, 249856, PROT_READ|PROT_WRITE) = 0
13:41:43 mprotect(0x30902000, 249856, PROT_READ|PROT_EXEC) = 0
13:41:43 mprotect(0x30902000, 249856, PROT_READ|PROT_WRITE) = 0
这似乎是在刷新指令和数据缓存,将一段内存标记为 RX,然后标记为 RW,然后返回 RX,最后再标记为 RW。我的猜测是它是将函数复制到 RAM,修改它,然后运行它。
但是使用“strace -c node index.js”表示这使用了大约 0.5 秒。我需要找到剩下的 25.5 秒。
我如何找到剩下的 25 秒?
【问题讨论】:
标签: node.js linux arm embedded