in Education by
During trying to achieve the performance with Hyperledger Fabric which IBM team reported in their article Hyperledger Fabric: A Distributed Operating System for Permissioned Blockchains, I faced some problems and errors. I collected all useful information and want to share it with the HF community. Also, I have a couple of questions to the Fabric developers about its performance. Target description Hyperledger Fabric v1.1.0 network deployed using Cello on four c5.9xlarge (36vCPU) aws instances: { fabric001: { cas: [], peers: ["[email protected]"], orderers: ["orderer1st.orderer"], zookeepers: ["zookeeper1st"], kafkas: ["kafka1st"] }, fabric002: { cas: [], peers: ["[email protected]"], orderers: ["orderer2nd.orderer"], zookeepers: ["zookeeper2nd"], kafkas: ["kafka2nd"] }, fabric003: { cas: [], peers: ["[email protected]"], orderers: ["orderer3rd.orderer"], zookeepers: ["zookeeper3rd"], kafkas: ["kafka3rd"] }, fabric004: { cas: ["ca1st.main"], peers: [], orderers: ["orderer4th.orderer"], zookeepers: ["zookeeper4th"], kafkas: ["kafka4th"] } TLS is disabled. Fabric channel configuration (all others parameters are the default): BatchTimeout: 1s BatchSize: MaxMessageCount: 500 AbsoluteMaxBytes: 200 MB PreferredMaxBytes: 50 MB I performed tests for both CouchDB and LevelDB as a state database. I use official Fabcar chaincode (Golang implementation) for my tests. I created simple nodejs app which interacts with the Fabric network using SDK and exposes HTTP API for load tests. This app is stateless and can be easily scaled. For load testing, I'm using tool YandexTank. I've performed two kinds of tests with high load: query (requests via peer001 to the Fabric state when blockchain is empty) and insert (transactions within the blockchain). Results CouchDB as a state database Query results: https://overload.yandex.net/101153. At ~1100 rps latency starts to increase. But Fabric instance is not loaded and have a lot of free resources. On the figure below you can see CPU and Memory usage by the Fabric network containers on the instance fabric001 during the test. 100% CPU usage means one full vCPU load. Also peer001 prints a lot of similar error logs (not full output, just tiny part, I can share it with you if needed): https://gist.github.com/krabradosty/9780cacc92fcdeaa0c36377a91727ade Insert results: https://overload.yandex.net/101217. At ~600 rps latency degradation is very fast. Before is slowly, but anyway, exist. CPU and Memory usage of the fabric003 containers on the figure below: A lot of error logs from the peer (again, not full output): https://gist.github.com/krabradosty/3810151b8e101d8279cc705aef22863e Based on this I can conclude that Fabric Peer has problems with the CouchDB connection under the load. My questions: Does Fabric comminity know about this bug? Do you have plans how to solve it? LevelDB as a state database Query results: https://overload.yandex.net/102035. CPU and Memory usage of the fabric001 containers on the figure below: There are no any errors from the blockchain, I just see latency degradation. Insert results: https://overload.yandex.net/102040. CPU and Memory usage of the fabric001 containers on the figure below: Aggressive latency degradation starts at ~850 rps. No errors from the blockchain. My questions: What is the cause of this latency degradation? Why I can't achieve 3500 rps performance that IBM report in their article? What plans does Fabric community have on improving the performance? Select the correct answer from above options

1 Answer

0 votes
by
Being a queueing system, the waiting time of Hyperledger Fabric increases exponentially as load increases. Therefore transaction latency is quite low. Howsoever, when we leverage golevelDB we should get at least 2000 tps, no matter the latency. What I can figure out from the CPU utilization plot, there are 36 vCPUs and only 16 vCPUs which are completely utilized fully. You can set the value for validatorPoolSize in core.yaml for each peer as equal or lesser than the block size, and henceforth check for an increase in throughput. The performance, however, is dependent on some parameters and would, therefore, differ based on them. These parameters are: workload (fab car versus fabcoin) disk (hdd vs ssd, local versus network (attached)) load generator (CLI versus SDK) Load generation method (open versus closed versus distributions) Network bandwidth (should be at least 1.6 Gbps for 2700 tps) Also, before looking for results you need to make sure that the load generator is not becoming a bottleneck. Therefore you can divide latency into endorsement latency, ordering latency, and commit latency. Then, you collect other resource utilization values including network and disk. This will help you identify the bottleneck (if any exists) easily.

Related questions

0 votes
    I have referred to this guide: http://hyperledger-fabric.readthedocs.io/en/latest/Setup/Chaincode-setup/#option-1 ... file or directory Select the correct answer from above options...
asked Jan 23, 2022 in Education by JackTerrance
0 votes
    Who is the founder of Hyperledger fabric? A. Linux Foundation B. Ethereum Developers C. Miners in blockchain D. R3...
asked Nov 30, 2022 in Education by JackTerrance
0 votes
    Hyperledger allows us to customize the visibility of a transaction in a blockchain. A. True B. False...
asked Nov 30, 2022 in Education by JackTerrance
0 votes
    I was discussing neural networks (NN) with a friend over lunch the other day and he claimed the the ... Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Mar 27, 2022 in Education by JackTerrance
0 votes
    I was discussing neural networks (NN) with a friend over lunch the other day and he claimed the the ... Questions for Interview, JavaScript MCQ (Multiple Choice Questions)...
asked Mar 27, 2022 in Education by JackTerrance
0 votes
    def main(): for i in xrange(10**8): pass main() This piece of code in Python runs in (Note: The timing is ... sys 0m0.012s Why is this? Select the correct answer from above options...
asked Feb 1, 2022 in Education by JackTerrance
0 votes
    Just wondering if any of you guys use Count(1) over Count(*) and if there is a noticeable difference in ... SQL Server 2005.) Select the correct answer from above options...
asked Jan 28, 2022 in Education by JackTerrance
0 votes
    Why does a sorted array get processed faster than an unsorted array, even though the size of the arrays are ... processed faster. Why? Select the correct answer from above options...
asked Jan 21, 2022 in Education by JackTerrance
0 votes
    In asymmetric key cryptography, the public key is available with ________. A. sender B. receiver C. sender and receiver D. everyone in the network...
asked Nov 30, 2022 in Education by JackTerrance
0 votes
    _______ records all the transactions in a blockchain. A. Contact B. Block C. Intermediaries...
asked Nov 30, 2022 in Education by JackTerrance
0 votes
    Hash can be used to validate the input. A. True B. False...
asked Nov 30, 2022 in Education by JackTerrance
0 votes
    The value of coins, such as litecoin and bitcoin, remains the same across all the exchanges that actively trade them. A. True B. False...
asked Nov 30, 2022 in Education by JackTerrance
0 votes
    Cyptocurrency is the only use case of blockchain. A. True B. False...
asked Nov 30, 2022 in Education by JackTerrance
0 votes
    Bitcoin network would make it impossible to bypass the traditional financial intermediaries. A. True B. False...
asked Nov 30, 2022 in Education by JackTerrance
0 votes
    ________ is checked for your previous transactions to determine your wallet balance. A. Bitcoin Network and your Wallet B. Ledger C. Miners and Users...
asked Nov 30, 2022 in Education by JackTerrance
...