# DOMJudge Judge 相關機制說明 在 TOPC2020 發生 Judge 緩慢的事故之後,發現 DOMJudge 的 Judge 順序似乎不是 FIFO,因此去看了一下 source code,研究了一下相關機制,在這邊寫成一份說明。 ## Judge 排程 DOMJudge在排 judge queue 的順序並非 FIFO(First In First Out),在研究了相關 source code 之後發現這段 code:https://github.com/DOMjudge/domjudge/blob/7.3/webapp/src/Controller/API/JudgehostController.php#L1204 ```php $queryBuilder = $this->em->createQueryBuilder() ->from(Submission::class, 's') ->join('s.team', 't') ->join('s.language', 'l') ->join('s.contest_problem', 'cp') ->select('s') ->andWhere('s.judgehost IS NULL') ->andWhere('s.cid IN (:contestIds)') ->setParameter(':contestIds', $contestIds) ->andWhere('l.allowJudge= 1') ->andWhere('cp.allowJudge = 1') ->andWhere('s.valid = 1') ->orderBy('t.judging_last_started', 'ASC') ->addOrderBy('s.submittime', 'ASC') ->addOrderBy('s.submitid', 'ASC'); ``` 由此可看出,judge 的順序會依照這個隊伍上次被 judge 的時間排序,上次被 judge 的時間越早,順序越前面,目的應該是為了平衡各隊伍的 judge 權利,也就是說一個隊伍在短時間送出大量 submission 並不會把 judge 塞爆,而是該隊伍的 submission 會比較慢被 judge。 ## Judgehost 的 Judge 機制 DOMJudge 的 judgehost 有幾個特性 * 一筆 submission 會由單一 judgehost 負責 * judgehost 每次 judge 都會重新跟 domserver 拿測資 * judgehost 不會一次把整題測資要完,會跑一筆要一筆 綜合以上特性,judgehost 會對 domserver 造成不小的負擔,且 domserver 對 http request 的處理能力會嚴重影響到 judge 的速度。 ## 可能可以改善的空間 * 多開一些 domserver 的 pod 來處理更多 http request * 也許可以給 judgehost 專屬的 domserver
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up