2012-01-07 63 views
2

有可以通過它的輸出比較正確的答案驗證程序網上很多法官的網站。更重要的是,他們還會檢查運行時間和內存使用情況,以確保您的程序不會超過最大限制。如何實現在線法官機器人?(例如:TopCoder公司,UVA,ACM-ICPC)

因此,這裏是我的問題,因爲一些在線網站判斷運行在同一時間幾個測試程序,他們是如何實現性能隔離?以及他們如何在另一次運行的相同程序上實現相同的運行時間?

我覺得有像「VMware的」或「沙盒」總是返回相同的結果孤立的環境的過程。它是否正確?以及關於如何實現這些事情的任何想法?

目前的解決方案

我使用docker的沙盒。這是一個簡單而且最安全的方式。

+1

你的問題幾乎是一個開放式討論的邀請。嘗試將其分解成幾個更具體的問題。請參閱:http://stackoverflow.com/faq – 2012-01-08 03:27:20

回答

1

遺憾的是很難真正保證一致的運行時間甚至專用機與虛擬機。如果你確實想要像前面提到的那樣實現類似的東西,你可能需要一個虛擬機來保存所有可以運行沙盒的代碼。通常情況下,您不希望爲每個內核提供多個請求,所以我認爲對於內存和cpu綁定的算法,機器的每個物理內核最多使用2個虛擬機。

雖然我只能推測爲什麼不嘗試虛擬機的不同數量的每個內核,看看它是如何執行。試着瞄準大約90%或更高的SLO符合率(或者如果你真的需要98-99),你應該沒問題。再次很難告訴你要做什麼,因爲很多這些東西都需要測試一下,看看它是如何做的。

0

可能過於簡單化根據您的其他要求這不是問題,但是,

如果算法是CPU的約束,只要它運行在一個孤立的VM(或FreeBSD的監獄,或...),並使用內置的操作系統設備是最簡單的。

(可以像使用UNIX中的「時間」命令,並設置內存限制使用「限制」那麼簡單)

+0

我的服務目標是[IDEONE](http://www.ideone.com)。它總是返回相同的運行時間和相同的內存使用量。我會找到你說的一些VM。謝謝Joachim。 – Inhan 2012-01-07 09:25:47