We have recently deployed a standalone Jobe server with the following specifications:
CPU: Dual Intel Xeon E5-2680v4 processors (28 cores, 56 threads total)
RAM: 64GB DDR4
Storage: SSD storage
Network: Gigabit Ethernet
The Jobe server is integrated with our Moodle learning management system, where we've configured the Jobe server address in the CodeRunner settings. Basic code submission and grading are working correctly.
However, we've encountered a performance issue during bulk re-grading of submissions. When we initiate re-grading for multiple assignments, the process takes significantly longer than expected. During these operations, we've observed that:
The Jobe server's CPU utilization remains relatively low (many of them are 0%)
Not all CPU cores are actively engaged in processing tasks
The re-grading process appears to be processing tasks sequentially rather than in parallel
Our current configuration includes:
Moodle correctly configured to communicate with the Jobe server
Basic testing with
testsubmit.pyshows good performance for individual submissions
We would greatly appreciate your guidance on:
What specific Jobe configuration parameters should we adjust to maximize parallel processing capabilities?
Are there any server-level optimizations (Apache, PHP, system settings) that would improve concurrent task handling?
What monitoring approaches do you recommend to identify bottlenecks in our setup?
Are there known limitations in the current Jobe architecture that might explain this behavior?
The server resources appear to be underutilized, and we believe there's potential for significantly better performance given our hardware capabilities.
root@jobe:/var/www/html/jobe# python3 testsubmit.pySupported languages:
c: 13.3.0
cpp: 13.3.0
java: 21.0.5
nodejs: 18.19.1
octave: 8.4.0
pascal: 3.2.2
php: 8.3.6
python3: 3.12.3
Valid Python3 OK
Python3 with stdin OK
Syntactically invalid Python3 OK
Python3 runtime error OK
Python3 file I/O OK
Testing use of interpreter args with Python3 OK
Testing use of runargs args with Python3 OK
Python3 program with customised timeout OK
Python3 program with support files OK
Valid Python3/pylint program OK
Invalid Python3/pylint program OK
UTF-8 output from Python3 (will fail unless Jobe set up for UTF-8) OK
Test good C hello world OK
Test compile error C hello world OK
Test use of compileargs with C OK
Test runtime error C hello world OK
Test timelimit on C OK
Test outputlimit on C OK
Memory limit exceeded in C (seg faults) OK
Infinite recursion (stack error) on C OK
C program controlled forking OK
A C program with ASCII non-UTF-8-compatible output OK
Valid Octave OK
octave with stdin OK
Syntactically invalid Octave (treated as runtime error) OK
Syntactically valid Nodejs hello world OK
Syntactically invalid Nodejs OK
Correct Php program OK
Syntactically incorrect Php program OK
Correct Java program OK
Correct Java program without supplied sourcefilename OK
Syntactically incorrect Java program OK
Java program with a support class (.java) OK
Java program with Unicode output (will fail unless Jobe set up for UTF-8) OK
Test good C++ hello world OK
Test compile error C++ hello world OK
Good Hello world Pascal test OK
Fail Hello world Pascal test OK
38 tests, 38 passed, 0 failed, 0 exceptions
Checking parallel submissions in C
Test good C hello world OK
Test good C hello world OK
Test good C hello world OK
Test good C hello world OK
Test good C hello world OK
Test good C hello world OK
Test good C hello world OK
Test good C hello world OK
Test good C hello world OK
Test good C hello world OK
All done
Testing a submission with an excessive cputime parameter
OK
root@jobe:/var/www/html/jobe#
root@jobe:/var/www/html/jobe# python3 testsubmit.py --perf c
Measuring performance in c
1 parallel submits: OK. 4 jobs/sec
2 parallel submits: OK. 9 jobs/sec
4 parallel submits: OK. 20 jobs/sec
8 parallel submits: OK. 41 jobs/sec
16 parallel submits: OK. 44 jobs/sec
32 parallel submits: OK. 58 jobs/sec
64 parallel submits: OK. 61 jobs/sec
128 parallel submits: OK. 90 jobs/sec
256 parallel submits: OK. 144 jobs/sec
512 parallel submits: OK. 115 jobs/sec
1024 parallel submits: OK. 139 jobs/sec
2048 parallel submits: FAIL.
1536 parallel submits: OK. 146 jobs/sec
1792 parallel submits: OK. 155 jobs/sec
1920 parallel submits: FAIL.
1856 parallel submits: OK. 148 jobs/sec
1888 parallel submits: FAIL.
1872 parallel submits: OK. 149 jobs/sec
1880 parallel submits: FAIL.
1876 parallel submits: OK. 150 jobs/sec