#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
Комментариев нет:
Отправить комментарий