July 1st, 2015

404

Войнушка приложений

Правила:

Два приложения запускаются в виртуалках (серверах?) и имеют связность только с арбитром (никакого интернета). Арбитр выступает в качестве tcp-relay (то есть пересоздаёт поток tcp в обе стороны). Он же контролирует валидность http.

Каждое приложение выставляет http-интерфейс и способно отправлять http-запросы. Приложения запускаются с квотой по CPU-time и memory. Время на старт приложения в cpu-quota не учитывается. После старта IO на диск или куда-либо, кроме арбитра (то есть противника) запрещено.

Приложение, вылетевшее за квоту своей памяти или процессора раньше конкурента, проигрывает.

Объектом борьбы являются страницы памяти фиксированной длины (4к), "раздающиеся" в начале. Приложения могут друг другу "постить" (post) страницу. Если противник успешно загрузил страницу, то он может удалить у себя эту страницу, если нет (например, не успел) - оставить. Приложение, которому успешно загрузили страницу, обязано её хранить (потеря засчитывается за проигрыш). Каждому приложению выдаётся в начале N страниц данных, а квота по памяти составляет величину между N и 2N.

Правила http: за один запрос можно передать только одну страницу, задержка между пакетами внутри tcp не может быть больше 10мс (кроме FIN/FIN2). Запрещено рвать http-соединение, делать невалидные ответы и т.д.

Лимита на число соединений нет, на воюющих приложениях и арбитре разрешены в качестве динамических все порты, кроме того, на котором слушает "принимающий", задержка больше 10мс на установку сесиии (частный случай правила для tcp) засчитывается за проигрыш.

Победитель обязан "показать" все оставшиеся у него страницы памяти - их отсутствие/изменение означает дисквалификацию.