Как SGE (Sun Grid Engine) отслеживает использование VMEM (виртуальной памяти) для заданий? - PullRequest
0 голосов
/ 15 декабря 2018

SGE позволяет пользователям устанавливать ограничения на использование виртуальной памяти / vmem (например, аргумент h_vmem для отправки задания).

Но как именно SGE отслеживает использование VMEM и отправляет сигнал уничтожения, если онпревышена?Опрашивает ли он с определенной частотой?Добавить какое-либо ядро, указанное в дереве процессов?Как это работает механически?Будем весьма благодарны даже за неполное объяснение или простой указатель на исходный код.

1 Ответ

0 голосов
/ 16 декабря 2018

Я не знаком с тем, как SGE работает подробно, просто использовал для управления небольшим кластером, который использовал его некоторое время назад.Однако то, что вы спрашиваете, напоминает мне следующий скрипт, который я часто использую, чтобы сообщить о памяти процесса:

https://github.com/jhclark/memusg

По сути, команда, выполняемая в скрипте qsub, является дочерней.процесс этого скрипта и / или монитора SGE (qmon).Поэтому, вероятно, где-то существует метод, который отслеживает использование памяти не так, как код Python, связанный выше.Соответствующий раздел в коде:

proc = Popen(child_command, stdin=None, stdout=None, stderr=None, env=None, shell=True)

vmpeak = -1
while proc.returncode == None:
    vmpeak = max(get_vsize(sid), vmpeak)
    log("Waiting for child to exit. vmpeak={}".format(vmpeak))
    proc.poll()
    sleep(0.1) # Time in seconds (float)

out.write("memusg: vmpeak: {} kb\n".format(vmpeak))

Где child_command - фактическая команда, которую мы хотим выполнить.Код запускает процесс с помощью этой команды и контролирует его через регулярные промежутки времени, и в этом случае сообщает о максимальном объеме памяти, когда процесс завершается.Было бы тривиально изменить этот код, чтобы вырваться из цикла и убить дочерний процесс, если объем памяти превышает некоторый максимум.

Надеюсь, это поможет.

...