We have benchmarked different versions of MongoDB v5, v7,v8 on X86 and ARM.
The following is the machine configuration:
ARM - Gratiton3- 32vcpu
X86 - Icelake-32vcpu
The following are the benchmark results:
We see that there is a performance degradation. But for workload A,B MongoDBv8 we see that ARM is performing better than X86.
It would be great if someone could help me understand why am i seeing this difference and confirm me on the current stable version of MongoDB to be used.
Hi Mukula: this is a difficult question to answer without more details. In general, different processors will have different characteristics such as cache sizes & branch predictor efficiency. Depending on the database workload you are running, you’ll see better performance on one or the other.
It’s hard to read and understand the results you are showing here. It looks like the measurements are “(ms)” which I’m guessing are milliseconds and a latency of some kind. However, the measurements are higher on version 8 indicating performance is worse. This is surprising because for most workloads we have measured, performance is better on version 8.
It looks like this is a “Load” workload of some kind. In that case you need to be running bulk insert operations and can run many in parallel. If your goal is to maximize the number of documents loaded per second you need to experiment with different bulk sizes and number of threads from your test/application server.
Icelake uses hyperthreaded cores so in theory Graviton3 should scale better with a high number of threads. However, optimal performance depends on many factors like the type of operations in the workload, document sizes & the number of indexes. I suggest you experiment with different settings to find optimal performance.
If you have an enterprise subscription subscription, I suggest you reach our to our support team who can help you tune the performance of your workloads.
Hello Ger_Hartnett,
Thank you for providing such detailed feedback. Your inputs are valuable, and I’d like to add a few points to add more clarity.
- Workload Details: You correctly noted that this is a “Load” workload, focused primarily on bulk insert operations. Our goal was not completely to optimize the number of documents loaded per second, but we were trying to optimize the runtime for each of these workloads.
Also, we would like to know how do you benchmark the different workloads for newer versions of Mongo to measure runtime? (For example we used YCSB GitHub - brianfrankcooper/YCSB: Yahoo! Cloud Serving Benchmark benchmarking tool currently to benchmark).
- Workload A = 50% read, 50% write
- Workload B = 95% read, 5% write
Note : Our idea of benchmarking is to accelerate the performance on Graviton3 and contribute to OSS as a developer.
- Performance Metrics: You are correct that the metrics shown are in milliseconds, representing the runtime of each workload on ARM v/s X86.
It would be great if you could help us with benchmark methodologies, optimization techniques that can be used to measure the runtime.