Страницы

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

воскресенье, 30 июня 2019 г.

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

Я прочитал данную статью про лимиты памяти, и написал некий код, который вычисляет те или иные значения памяти и времени.
Как я понял, функция 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 совсем не годен для коротко работающих программ.


Ответ

Обычно измеряется процессорное время. Это то, что time выводит как user
По памяти - вам нужен показатель VmSize. Или VmPeak - это пиковое значение VmSize. Если хотите считать совсем честно - то надо отнять от него data/stack/exe/lib - это не "использование памяти" в смысле явного выделения в коде.
Данные по памяти нельзя определить после завершения процесса, так что единственный вариант - достаточно часто опрашивать данные в фоне. Значение VmPeak за долю секунды до завершения кода будет практически актуальным как "максимум использованной памяти". И заодно следить за превышением выделенного времени выполнения.
Писать свою систему с нуля достаточно тяжело. Посмотрите исходники существующих систем, например ejudge.

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

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