Страницы

Поиск по вопросам

суббота, 11 апреля 2020 г.

Онлайн ACM подобные тестирующие системы

#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

Комментариев нет:

Отправить комментарий