-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Task execution pipelining #484
Conversation
68078c3
to
e62c0b2
Compare
e12beac
to
f280ce2
Compare
public bool RemoveException([MaybeNullWhen(false)] out Exception e) | ||
{ | ||
var r = exceptions_.Count > 0; | ||
|
||
e = r | ||
? exceptions_.Dequeue() | ||
: null; | ||
|
||
return r; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You could instead return an aggregate exception and use .Handle to filter out some exceptions out of it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not as clear and easy to use.
Common/src/Pollster/TaskProcessingChecker/TaskProcessingCheckerClient.cs
Outdated
Show resolved
Hide resolved
…or in LogStatsFromSessionAsync
…uisition timeout is not exceeded
09f086a
to
274fd5d
Compare
I did some tests on AWS with a c5.12xlarge instance. Install dependenciessudo yum install -y git docker yum-utils
# just
mkdir -p ~/bin
curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to ~/bin
# terraform
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/AmazonLinux/hashicorp.repo
sudo yum -y install terraform
# docker
sudo systemctl enable docker.service
sudo systemctl start docker.service
sudo usermod -a -G docker ec2-user Relog Build clients docker build -t dockerhubaneo/armonik_core_htcmock_test_client:0.0.0.0-test -f Tests/HtcMock/Client/src/Dockerfile .
docker build -t dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test -f Tests/Bench/Client/src/Dockerfile . or use (prefered way) just tag=0.0.0.0-test buildBenchClient
just tag=0.0.0.0-test buildHtcmockClient How to read results ?I measured throughput (tasks/seconds). Every table shows that. Higher results are better Test with htcmockjust worker=mock replicas=30 partitions=1 build-deploy Some warmup docker run --net armonik_network --rm \
-e HtcMock__TotalCalculationTime=00:00:10 \
-e HtcMock__NTasks=300 \
-e HtcMock__SubTasksLevels=4 \
-e HtcMock__EnableFastCompute=true \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080\
dockerhubaneo/armonik_core_htcmock_test_client:0.0.0.0-test Test with complex dependencies docker run --net armonik_network --rm \
-e HtcMock__TotalCalculationTime=00:00:10 \
-e HtcMock__NTasks=10000 \
-e HtcMock__SubTasksLevels=100 \
-e HtcMock__EnableFastCompute=true \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_htcmock_test_client:0.0.0.0-test Result 480 tasks/s vs 365 on main Tests with Bench Client/Workerjust destroy
just worker=bench replicas=30 partitions=1 build-deploy Some warmup docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=10 \
-e BenchOptions__PayloadSize=1 \
-e BenchOptions__ResultSize=1 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test Tests with 10 seconds tasks and input/output size increase. We should observe constant throughput until prefetching is longer than task execution. docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=10000 \
-e BenchOptions__PayloadSize=1 \
-e BenchOptions__ResultSize=1 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=10000 \
-e BenchOptions__PayloadSize=10 \
-e BenchOptions__ResultSize=10 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=10000 \
-e BenchOptions__PayloadSize=100 \
-e BenchOptions__ResultSize=100 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=10000 \
-e BenchOptions__PayloadSize=1000 \
-e BenchOptions__ResultSize=1000 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=10000 \
-e BenchOptions__PayloadSize=10000 \
-e BenchOptions__ResultSize=10000 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=10000 \
-e BenchOptions__PayloadSize=20000 \
-e BenchOptions__ResultSize=20000 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=10000 \
-e BenchOptions__PayloadSize=30000 \
-e BenchOptions__ResultSize=30000 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
Well, it does not change much. Tasks may be too long. Let's use 1 second tasks. docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=1000 \
-e BenchOptions__PayloadSize=1 \
-e BenchOptions__ResultSize=1 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=1000 \
-e BenchOptions__PayloadSize=10 \
-e BenchOptions__ResultSize=10 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=1000 \
-e BenchOptions__PayloadSize=100 \
-e BenchOptions__ResultSize=100 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=1000 \
-e BenchOptions__PayloadSize=1000 \
-e BenchOptions__ResultSize=1000 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=1000 \
-e BenchOptions__PayloadSize=10000 \
-e BenchOptions__ResultSize=10000 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=1000 \
-e BenchOptions__PayloadSize=20000 \
-e BenchOptions__ResultSize=20000 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
Without results docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=1000 \
-e BenchOptions__PayloadSize=1 \
-e BenchOptions__ResultSize=1 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=1000 \
-e BenchOptions__PayloadSize=10 \
-e BenchOptions__ResultSize=1 \
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=1000 \
-e BenchOptions__PayloadSize=100 \
-e BenchOptions__ResultSize=1\
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=1000 \
-e BenchOptions__PayloadSize=1000 \
-e BenchOptions__ResultSize=1\
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=1000 \
-e BenchOptions__PayloadSize=10000 \
-e BenchOptions__ResultSize=1\
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
docker run --net armonik_network --rm \
-e BenchOptions__NTasks=300 \
-e BenchOptions__TaskDurationMs=1000 \
-e BenchOptions__PayloadSize=20000 \
-e BenchOptions__ResultSize=1\
-e BenchOptions__DegreeOfParallelism=100 \
-e GrpcClient__Endpoint=http://armonik.control.submitter:1080 \
dockerhubaneo/armonik_core_bench_test_client:0.0.0.0-test
Flush redisdocker exec -it object redis-cli flushall sync |
Some things I read to get to this point.