#node.js #linux #arm #embedded
#node.js #linux #arm #встроенный
Вопрос:
Загрузка NodeJS в моей встроенной системе занимает 26 секунд.
У меня есть SOM (system on module) от Microchip. Это архитектура ARM, работающая на частоте 500 МГц и 128 МБ оперативной памяти.
На нем запущен образ BuildRoot Linux с установленным NodeJS.
У меня есть пустой файл с именем «index.js «.
Когда я запускаю «узел времени index.js «, для завершения требуется 26 секунд. Если я отредактирую «index.js » чтобы добавить «console.log(‘hello’);», требуется 26 секунд, прежде чем он распечатает сообщение.
Таким образом, похоже, что NodeJS занимает 26 секунд для загрузки и запуска файла JS.
Я запустил «strace node 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. Я предполагаю, что он копирует функцию в ОЗУ, изменяет ее, а затем запускает.
Но с использованием «strace -c node index.js » говорит, что на это уходит около 0,5 секунды. Мне нужно найти остальные 25,5 секунды.
Как мне найти остальные 25 секунд?
Комментарии:
1. Связанные: github.com/nodejs/node/issues/16955
2. Связанные: github.com/nodejs/node/issues/24024
Ответ №1:
Я нашел предварительно скомпилированный пакет по адресу: https://nodejs.org/download/release/latest-v15.x/node-v15.3.0-linux-armv7l.tar.gz
Теперь для выполнения пустого скрипта требуется 1,6 секунды.
Я могу запустить скрипт, который распечатает скомпилированную конфигурацию NodeJS, чтобы выяснить различия с этим: node -e «console.log (process.config);»
Далее нужно выяснить, в чем различия, и включить их в скрипт BuildRoot.
Комментарии:
1. Вы видели, сколько оперативной памяти он занимает? Есть ли способ уменьшить его с 100 МБ?