Search code examples
performanceperformance-testinghardwarecorda

Which hardware factors (if any) determine the performance of a Corda Node?


I am interested in understanding how various hardware factors impact the performance of a Corda node and the potential for vertical scaling. In this case, performance would be broadly defined as: - Transaction Throughput - Startup Time

It would also be helpful to understand if these resource requirements / bottlenecks change when running in a production environment (independently, in the cloud) or locally for testing (where many local nodes might be running in a bootstrapped network).

In previous tests I have tried bumping the default memory allocation from 512mb to 1gb using the custom fields in a bootstrapped nodes node.conf - custom = { jvmArgs : [ "-Xms1g", "-Xmx1g" ] } but the impact was insignificant on both startup time and TPS.


Solution

  • In regard to transaction throughput:

    1. Cores - The amount of cores your node has available is directly related to the amount of threads/requests it can process within a specific time.

    2. Memory - The more RAM you have, the more transaction requests your node can support and the larger each of those transactions can be. If the memory is too low you can face the dreaded Java Heap Size Out of Memory error which will crash the node because it can no longer allocate objects.

    3. Threads - Assuming #1 and #2 have been properly allocated to the virtual machine that the node is running on, your throughput would then be limited to the amount of threads/requests the application calling the node can generate within a set time frame.

    4. Latency - The proximity of your application and target nodes is also important to consider as each request will incur some latency penalty based on the distance the data packets have to travel.

    Checkout Node Tuning & Performance

    This medium post also touches on these topics in regard to attachments