Что представляет собой средняя загрузка, используемая параллельным make? - PullRequest
2 голосов
/ 01 октября 2009

При использовании GNU make в Windows, что именно представляет собой среднее значение загрузки?

Например:

make -j --load-average=2.5

Что означает 2,5?

Ответы [ 2 ]

1 голос
/ 01 октября 2009

Это означает, что make не запустит ни одного нового потока, пока число запущенных процессов, усредненное за некоторый период времени, не станет меньше 2,5.

Редактировать, после замечания лозы
запускаемый процесс , на языке Unix, - это процесс, который ожидает процессорное время или готов к работе. Технически это процесс, который находится в состоянии TASK_RUNNING.

Однако ... это побудило меня перечитать оригинальный вопрос и отметить его " в Windows " часть ....
Таким образом, мой первоначальный ответ: свободно , правильный для GNU Make на Unix-подобных хостах, в Windows это практически не соответствует действительности. Расхождение в поведении связано с тем, что обе операционные системы предоставляют очень разные метрики для описания своей «текущей» нагрузки на процессор. Следовательно, логика Make должна по-разному интерпретировать эти показания загрузки ЦП, чтобы обеспечить функцию - load-medium.

Целью параметра --load-average является предоставление инструкции для Make относительно того, когда он может запускать новые потоки; заставляя Make более элегантно делиться ресурсами ЦП с другими приложениями (и внутри себя).
В Linux семантика этого параметра очень близка к его названию: новые потоки Make разрешены при средняя нагрузка , как сообщает ядро ​​(я предполагаю, что это «минутная» загрузка) среднее значение, хотя это может быть пять минут), меньше значения параметра.
В Windows Make вычисляет среднее значение нагрузки по средневзвешенному значению загрузки ЦП (как сообщается функцией GetSystemTimes) и загрузки памяти (например, из функции GlobalMemoryStatusEx).

0 голосов
/ 08 января 2015

на винде - ничего, видимо. Это термин UNIX: http://en.wikipedia.org/wiki/Load_%28computing%29

Моя копия Cygwin сообщает о нулевых средних нагрузках, когда я запускаю команду uptime. Я не думаю, что есть быстрый способ рассчитать это на Windows; в прошлом его спрашивали в списке рассылки Cygwin.

Другими словами: он не реализован, поэтому всегда равен нулю.

Вот реализация getloadavg, непосредственно из источников GNU Make 3.81:

# if !defined (LDAV_DONE) && (defined (__MSDOS__) || defined (WINDOWS32))
#  define LDAV_DONE

  /* A faithful emulation is going to have to be saved for a rainy day.  */
  for ( ; elem < nelem; elem++)
    {
      loadavg[elem] = 0.0;
    }
# endif  /* __MSDOS__ || WINDOWS32 */

Я не проверял более новые версии GNU make, но сомневаюсь, что он изменился.

...