#linux #память #время #memory
Я прочитал данную статью про лимиты памяти, и написал некий код, который вычисляет
те или иные значения памяти и времени.
Как я понял, функция clock() измеряет время процессора, которое сильно отличается
от того, что выводит мне команда time в шелле. Каким образом в тестирующих системах
это отслеживается?
Есть куча разных полей типа:
VmPeak: 11884 kB
VmSize: 11884 kB
VmLck: 0 kB
VmHWM: 1108 kB
VmRSS: 1108 kB
VmData: 272 kB
VmStk: 88 kB
VmExe: 16 kB
VmLib: 3244 kB
VmPTE: 48 kB
VmSwap: 0 kB
Как именно ограничивают ресурсы в тестирующих системах?
Вариант с ps aux совсем не годен для коротко работающих программ.
Ответы
Ответ 1
Обычно измеряется процессорное время. Это то, что time выводит как user. По памяти - вам нужен показатель VmSize. Или VmPeak - это пиковое значение VmSize. Если хотите считать совсем честно - то надо отнять от него data/stack/exe/lib - это не "использование памяти" в смысле явного выделения в коде. Данные по памяти нельзя определить после завершения процесса, так что единственный вариант - достаточно часто опрашивать данные в фоне. Значение VmPeak за долю секунды до завершения кода будет практически актуальным как "максимум использованной памяти". И заодно следить за превышением выделенного времени выполнения. Писать свою систему с нуля достаточно тяжело. Посмотрите исходники существующих систем, например ejudge.Ответ 2
ограничить время выполнения какой-нибудь программы можно, например, так: $ программа & sleep 0.5; kill $! &>/dev/null && \ echo "программа не уложилась в пол-секунды". пример — «уложилась»: $ sleep 0.4 & sleep 0.5; kill $! &>/dev/null && \ echo "программа не уложилась в пол-секунды" [1] 31136 [1]+ Done sleep 0.4 пример — «не уложилась»: $ sleep 0.6 & sleep 0.5; kill $! &>/dev/null && \ echo "программа не уложилась в пол-секунды" [1] 31139 программа не уложилась в пол-секунды [1]+ Terminated sleep 0.6
Комментариев нет:
Отправить комментарий