Skip to content

DistributedCC Experiments

Evan West edited this page Jul 12, 2022 · 16 revisions

DistributedStreamingCC Results : July 11th

Cluster Stats:

  • Octopus Main: 1 c5n.18xlarge
    • 72 Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz
    • 192 GiB of RAM
    • Network Bandwidth: 100 Gbits/s
  • Octopus Workers: 22 c5.4xlarge
    • 16 Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz
    • 32 GiB of RAM
    • Network Bandwidth: up to 10 Gbits/s

Queries In Stream Experiment

Used 80 Octopus Workers for a total of 1280 worker threads

Results as of now are not so good. Other things to try

  • Repeating the stream multiple times so there are not so few updates between queries
  • Ran single machine experiment with full size gutters and 1000 queries, got good results 3.2 million upds/s and query latency ~1 sec. This suggests that the 3 possibilities for bad performance are: (de)serialization, context switching, and network latency. Solutions:
    • Implement one WorkDistributor to many DistributedWorkers changes (fixes context switching)
    • Implement change where updates are performed locally if batches are small (fixes serialization and network latency)
  • But also, make the work queue bigger

With DSU

Performing 0 queries during stream34.3s, 130 million upds/sec (DSU not used, query latency ~8.6s, Flush ~8.3s)
Performing 2 queries during stream39.9s, 112 million upds/sec (DSU not used, query latency ~9s, Flush ~8.1s)
Performing 10 queries during stream71.7s, 62.39 million upds/sec (DSU not used, query latency ~6s, Flush ~5.4s)
Performing 20 queries during stream120.8s, 37.05 million upds/sec (DSU not used, query latency ~5.5s, Flush ~5s)
Performing 1000 queries during streamNOT FINISHED, ~1 million upds/sec (DSU not used, query latency ~4.7s, Flush ~4.1s)

Without DSU

x/20 Proportion of Stream Kron17 - Zero Queries During StreamKron17 - Two QueriesKron17 - Ten QueriesKron17 - Twenty Queries
2
Query LatencyN/AN/A6.4416.104
Flush LatencyN/AN/A5.9565.466
CC Alg LatencyN/AN/A0.4840.637
4
Query LatencyN/AN/A6.2305.593
Flush LatencyN/AN/A5.5175.035
CC Alg LatencyN/AN/A0.7120.557
6
Query LatencyN/AN/A5.8605.3222
Flush LatencyN/AN/A5.5364.98861
CC Alg LatencyN/AN/A0.3240.333403
8
Query LatencyN/AN/A5.8465.37989
Flush LatencyN/AN/A5.5525.06548
CC Alg LatencyN/AN/A0.2930.314094
10
Query LatencyN/A8.8585.8135.41574
Flush LatencyN/A8.1455.5325.09462
CC Alg LatencyN/A0.7070.2800.320883
12
Query LatencyN/AN/A5.7725.42054
Flush LatencyN/AN/A5.4945.09636
CC Alg LatencyN/AN/A0.2770.32406
14
Query LatencyN/AN/A5.7555.26304
Flush LatencyN/AN/A5.4724.97346
CC Alg LatencyN/AN/A0.2820.289557
16
Query LatencyN/AN/A5.8285.33229
Flush LatencyN/AN/A5.5494.99865
CC Alg LatencyN/AN/A0.2790.333362
18
Query LatencyN/AN/A5.7255.31135
Flush LatencyN/AN/A5.4504.96498
CC Alg LatencyN/AN/A0.2750.346306
20
Query LatencyN/A8.9495.6935.36582
Flush LatencyN/A8.1855.4175.03582
CC Alg LatencyN/A0.7590.2760.329855
Overall Ingestion Rate133.07111.7363.1037.387
Ingestion Time33.640.570.9119.6
Final Query
Query LatencyN/A0.3780.3860.354649
Flush LatencyN/A0.0060.0060.00660373
CC Alg Latency0.24360.3720.3800.348037

DistributedStreamingCC Results : April 4th

Cluster Stats:

  • Octopus Main: 1 c5n.9xlarge
    • 36 Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz
    • 92 GiB of RAM
    • Network Bandwidth: 50 Gbits/s
  • Octopus Workers: 22 c5.4xlarge
    • 16 Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz
    • 32 GiB of RAM
    • Network Bandwidth: up to 10 Gbits/s

EBS (Disk) Stats:

  • 80 GiB general purpose2 SSD rated at 240 IOPS
  • Reads about 15 million graph updates/s from binary graph streams

Kron17 results

20 inserter threads, preloading the file

Worker ProcessesWorker MachinesIns/sec (millions)Marginal Rate Increase
1611.7323N/A
3223.55191.8196
4835.36001.8081
6447.15531.7953
8058.93781.7825
96610.6751.7372
112712.5861.911
128814.1931.607
144915.9261.733
1601017.6421.716
1761119.3471.705
1921221.1331.786
2081322.8101.677
2241424.4621.652
2401526.0931.631
2561627.7281.635
2721729.3511.623
2881830.9641.613
3041932.5431.579
3202034.1481.605
3362135.5731.425
3522237.0711.498

DistributedStreamingCC Results : March 26th

Cluster Stats:

  • 4 c6i.4xlarge EC2 instances all in the same cluster placement group
  • 16 Xeon Platinum
  • 32 GiB of RAM

EBS (Disk) Stats:

  • 80 GiB general purpose2 SSD rated at 240 IOPS
  • Reads about 15 million graph updates/s from binary graph streams

DistributedStreamingCC: Kron16, cold file cache, WorkerCluster::num_batches=512

Used comamnd sync; echo 3 | sudo tee -a /proc/sys/vm/drop_caches to clear file cache

machines, worker_proc1, 162, 164, 162, 324, 48
ingestion (million/s)1.8672.0142.5703.8185.411
CC algorithm time (s)0.430.140.140.140.14
memory usage (main)7.70 GiB7.70 GiB7.70 GiB8.84 GiB9.8 GiB
memory usage (worker)112 MiB148 MiB148 MiB148 MiB138 MiB

DistributedStreamingCC: Kron16, pre-populated file cache, WorkerCluster::num_batches=512

Used command cat /mnt/ssd1/kron_16_stream_binary > /dev/null to prepopulate

machines, worker_proc1, 162, 164, 162, 324, 48
ingestion (million/s)1.8692.0192.5843.8295.463
CC algorithm time (s)0.450.140.140.140.14

Kron17 results

4 machines, 48 workers, num_batches=512

Kron17 datasetcold cachepre-pop
ingestion (million/s)5.5505.593
CC algorithm time (s)0.310.43
memory usage (main)18.5 GiBN/A
memory usage (worker)167 MiBN/A

pre-populating has less affect than it might have otherwise because we can't fit the entire file in RAM much less sketches and the file.

Networking Performance

Tools Used

  • ping to measure round trip time (RTT)
  • iperf to measure network throughput
    To install iperf:
sudo amazon-linux-extras install -y epel
sudo yum install -y iperf

Cluster Setups Compared

1. EC2 c6i.4xlarge

All instances within a cluster placement group.
These instances have 16 cores, 32 GiB of RAM, and network bandwith of 12.5 Gbits/s

2. EMR c6g.8xlarge

These instances have 32 cores, 64 GiB of RAM, and network bandwidth of 12 Gbits/s

Latency

Ran ICMP ping request to each worker to measure RTT. Sent 5 packets to each worker and report minimum and maximum latency here.

EC2 RTTEMR RTT
.096-.157 ms.129-.158 ms

Throughput

Using default tcp options

WorkloadEC2 Throughput (Gbits/sec)EMR Throughput (Gbits/sec)
Point to Point9.03-9.094.97
One to Many(3)12.39 (4.03, 4.23, 4.13)11.94 (4.00, 3.99, 3.95)
Many(3) to One12.38 (3.03, 6.36, 2.99)11.94 (4.04, 3.98, 3.92)

Some differences in iperf output

On EC2 the tcp window is 128 KB whereas on EMR it varies between 426 KB when a server and 1.43-1.87 MB. This could be a consequence of some of the distributed computing optimizations applied to EMR.

Maximum achievable bandwidth = TCP window size / latency in seconds = Throughput in bits/s
128 KB / 0.00013 = 7.88 Gbits/sec

Octopus Setup

Cluster

Octopus main: c6i.12xlarge, 48 Xeon Platinum, 96 GiB of RAM, 18.75 Gbits/s
Octopus Workers: c5a.4xlarge, 16 AMD EPYC 7R32, 32 GiB of RAM, up to 10 Gbits/s

NOTE: These workers are probably still too beefy. We should also try lower-end cpus.

Latency

Ran ICMP ping request to each worker to measure RTT. Sent 5 packets to each worker and report minimum and maximum latency here.

Min = 0.115, 0.103, 0.124, 0.094, 0.196, 0.117
Max = 0.194, 0.199, 0.246, 0.249, 0.133, 0.228

Overall: 0.094 - 0.249 ms

Throughput

Using default tcp options

WorkloadEC2 Throughput (Gbits/sec)
Point to Point9.37-9.38
One to Many(6)18.6 (2.37, 2.38, 2.35, 4.67, 2.09, 4.74)
Many(6) to One18.6 (1.23, 3.77, 3.78, 3.49, 3.85, 2.48)

More about EMR Performance

With this cluster of 4 c6g.8xlarge instances. Each instance having 32 cores and 64 GiB of RAM.

Kron16 performance with 48 workers

Kron16 datasetcold cachepre-pop
ingestion (million/s)3.6723.566
CC algorithm time (s)0.0980.098

Performance seems to be bottlenecking on the main node at least for pre-pop. Lots of workers waiting on work queue. This makes sense as our benchmarks indicate that these instance types don't push data through the StandAloneGutters very fast.

Clone this wiki locally