Make -j (несколько заданий) с указанным номером не работает в QNX - PullRequest
0 голосов
/ 25 мая 2018

Из различных источников ( как этот ) утверждают, что вы можете распараллелить ваши задания по сборке с:

make -j n

, где n - это количество заданий.В QNX 6.5.0 с GNU Make 3.81 я заметил, что число не работает.Если я позвоню make -j (без номера), будет запущено огромное количество компиляторов, и процессоры будут полностью использованы:

CPU states: 80.5% user, 5.0% kernel
CPU  0 Idle: 15.2%
CPU  1 Idle: 13.2%
CPU  2 Idle: 14.7%
Memory: 0 total, 281M avail, page size 4K

      PID   TID PRI STATE    HH:MM:SS    CPU  COMMAND
     8200     2  21 Rcv       0:00:17  12.02% devb-eide
 43565087     1  10 Rdy       0:00:00  11.38% make
 43819103     1  10 Rply      0:00:00   3.01% cmake
 43716678     1  10 Rply      0:00:00   2.80% cmake
 43671611     1  10 Rply      0:00:00   1.87% make
 43589671     1  10 Rply      0:00:00   1.73% make
 43569184     1  10 Rply      0:00:00   1.73% make
 43573283     1  10 Rply      0:00:00   1.46% make
 43667514     1  10 Rply      0:00:00   1.28% make
 43839590     1  10 Send      0:00:00   1.10% cmake

К сожалению, когда я использую make -j, имея огромное количество одновременных сборок означаетчто моя ограниченная виртуальная машина быстро исчерпывает память.

Но если я добавлю число (например, make -j 4, которое соответствует количеству ядер в моей виртуальной машине), то это только когда-либо запустит 1 процесс.Это также происходит со следующими вариантами:

make -j4
make -j 4
make --jobs=4
make --jobs 4

, а также с некоторыми другими номерами процессоров (2, 3, 4, 5, 6, 7, 8).

Почему make -j с указанным номером не работает в QNX?

1 Ответ

0 голосов
/ 07 августа 2018

Версия make, используемая в системе, должна быть скомпилирована с использованием элемента конфигурации, который отключил механизм задач -j.Перекомпиляция GNU Make 3.81 и 4.2 дала двоичный файл, который может успешно использовать переключатель -j с номером.

...