3

私は、おそらく100ほどの信頼できない実行可能ファイルがすべて同時に実行され、同じ入力データを評価するオンラインジャッジタイプのシステムの開発に取り組んでいます。

各実行可能ファイルを、事前定義されたリソースプールのCPU、メモリ、ディスクスペースなどの均等なシェアに制限したいと思います。たとえば、リソースプールがマシンのCPUの3/4に設定され、3 GBのメモリ、300 GBのディスク、および2つの実行可能ファイルが実行されている場合、それぞれがCPUの3/8、1.5 GBのメモリ、150GBを取得します。ディスクの。別の人が参加する場合、リソースは3つの等しいスライスに再調整されます。これは、悪意のある実行可能ファイルまたはバグのある実行可能ファイルが他のユーザーからリソースを盗むのを防ぎ、すべての人に平等なリソースを提供するためです。

理想的には、実行可能ファイルが単一の言語に制限されないようにしたいです(たとえば、ユーザーが快適な言語(C、C ++、Java、Pythonなど)で開発できるようにします)。

VM全体またはOpenVZのようなものを使用するのはやり過ぎのようです。リソースを制限し、ネットワークアクセス、プロセスの生成などを無効にしながら、実行可能ファイルごとに個別のプロセスを基本的に使用する、より軽量な代替手段はありますか?軽量のソリューションを探している理由の1つは、かなりの量の入力データがあることです。各実行可能ファイルにコピーする必要はなく、共有メモリから読み取らせる必要があります。

4

1 に答える 1

0

おそらく、プロセスごとに異なるユーザー ID を作成し、「ulimit」によってそれらを制限するだけで十分でしょう。Debian での bash の ulimit のマンページ:

ulimit [-HSTabcdefilmnpqrstuvx [limit]]

そのような制御を許可するシステムで、シェルとそれによって開始されたプロセスに使用可能なリソースを制御します。-H および -S オプションは、特定のリソースにハード制限またはソフト制限を設定することを指定します。一度設定すると、root 以外のユーザーはハード制限を増やすことはできません。ソフト制限は、ハード制限の値まで増やすことができます。-H も -S も指定されていない場合は、ソフト制限とハード制限の両方が設定されます。limit の値は、リソースに指定された単位の数値か、ハード、ソフト、または無制限の特別な値の 1 つにすることができます。これらは、それぞれ現在のハード リミット、現在のソフト リミット、および制限なしを表します。limit を省略すると、-H オプションが指定されていない限り、リソースのソフト リミットの現在の値が出力されます。複数のリソースが指定されている場合、制限の名前と単位が値の前に出力されます。その他のオプションは次のように解釈されます。

          -a     All current limits are reported
          -b     The maximum socket buffer size
          -c     The maximum size of core files created
          -d     The maximum size of a process's data segment
          -e     The maximum scheduling priority ("nice")
          -f     The maximum size of files written by the shell and its children
          -i     The maximum number of pending signals
          -l     The maximum size that may be locked into memory
          -m     The **maximum resident set size** (many systems do not honor this limit)
          -n     The maximum number of open file descriptors (most systems do not allow this value to be set)
          -p     The pipe size in 512-byte blocks (this may not be set)
          -q     The maximum number of bytes in POSIX message queues
          -r     The maximum real-time scheduling priority
          -s     The maximum stack size
          -t     The maximum amount of cpu time in seconds
          -u     The maximum number of processes available to a single user
          -v     The maximum amount of virtual memory available to the shell and, on some systems, to its children
          -x     The maximum number of file locks
          -T     The **maximum number of threads**

スレッド数を 1 に制限すると、CPU の計算時間を公平に配分できると思います。

最大 RSS も制限します。

于 2013-04-10T22:00:11.067 に答える