Description
- Version: v9.1.0
- Platform: Linux alarmpi 4.9.52-1-ARCH deps: update openssl to 1.0.1j #1 SMP Sat Sep 30 01:00:26 UTC 2017 armv6l GNU/Linux
- Platform: Linux odroid 3.14.79-27-ARCH deps: update openssl to 1.0.1j #1 SMP PREEMPT Mon Jul 10 19:29:37 MDT 2017 aarch64 GNU/Linux
I have a Raspberry Pi Zero W (ARMv6) and an Odroid-C2 (ARMv8), both running Arch Linux ARM.
On these systems node has pretty high startup times.
Latest official binary release of node, 9.1.0
I'm running the latest official binary release of node (9.1.0), as the binary installed from the repositories is way way slower (more on this later).
Node is slow to start on those systems:
Raspberry Pi Zero W (ARMv6)
$ time node -v # printing node version: as fast as it should be
v9.1.0
real 0m0.052s
user 0m0.030s
sys 0m0.000s
$ time node -e '' # running empty script: pretty slow
real 0m1.394s
user 0m1.180s
sys 0m0.060s
$ time npm -v # printing npm version: slow
5.5.1
real 0m3.881s
user 0m3.410s
sys 0m0.210s
$ time python2 -c '' # python2 empty script, as a comparison
real 0m0.281s
user 0m0.240s
sys 0m0.030s
Odroid-C2 (ARMv8)
$ time node -v # printing node version - as fast as it should be
v9.1.0
real 0m0.009s
user 0m0.000s
sys 0m0.000s
$ time node -e '' # running empty script - ok
real 0m0.270s
user 0m0.240s
sys 0m0.020s
$ time npm -v # printing npm version - slowish
5.5.1
real 0m0.868s
user 0m0.760s
sys 0m0.100s
$ time python2 -c '' # python2 empty script, as a comparison
real 0m0.049s
user 0m0.020s
sys 0m0.020s
nodejs packaged by Arch Linux ARM
The nodejs (v8.8.1) binary packaged by the Arch Linux ARM project is way way slower than the mainstream released binary. An empty script takes longer than 7 seconds (!) and npm -v
something like 15 seconds (!!) on my ARMv6 machine. I reported the issue on ALARM forum.
Yesterday I started looking into that (profiling, stracing, testing various v8 flags etc) and collected a bunch of data before realizing that the upstream release is not that bad. I couldn't get perf
working and couldn't understand what's going on with the collected data. I'm not sure whether this is interesting here, if it is, I'll share all my findings.
This is how Arch Linux ARM builds nodejs for ARMv6: ALARM ARMv6 PKGBUILD
In case anybody is interested, I created an AUR package to install the officially released binaries of nodejs on Arch Linux.
Related issues
I couldn't find much about this issue. Only when I googled cacheflush
(a syscall that is called a lot of times by the Arch Linux ARM provided binary) I managed to find a few similar issues.
Not sure whether they're related, but here they are:
- Slow start of Node application (ARM) #8259
- armv6 performance regression #1188
- Slow start of Node application npm/npm#13761
Is this expected?
Is there anything I can do to improve start up times or figure out why they're so slow?