ooibc88 / blockbench

BLOCKBENCH: A Framework for Analyzing Private Blockchains. Blockbench contains workloads for measuring the data processing performance, and workloads for understanding the performance of different layers of Blockchain systems.
https://www.comp.nus.edu.sg/~dbsystem/fabricsharp/#/blockbench
Apache License 2.0
391 stars 174 forks source link

Help in running Ethereum benchmark. #5

Open gmitaros opened 6 years ago

gmitaros commented 6 years ago

I am using 8 vms (with latest Ubuntu version) from google cloud and i am trying to set up the blockbench enviroment. I started with ethereum. After the necessary changes i am trying to start the benchmark with ./run_bench 8 16 8 and in the log dir donothing_donothingresults_1 i get 3 files like that client10.128.0.4 and inside ith says ./driver: error while loading shared libraries: librestclient-cpp.so.1: cannot open shared object file: No such file or directory

here is the out put from running the bech

https://pastebin.com/TSCAT5ye

So it must be something with the ycsb right?

ug93tad commented 6 years ago

librestclient-cpp needs to be in our every machine's LD_LIBRARY_PATH

gmitaros commented 6 years ago

@ug93tad Ok i fix this i installed the librestclient-cpp. No i run the test and i dont get any result.

I run with 4 clients in the clients file and 4 hosts in the hosts file. Also i run using the sudo python exps.py script. Here is the output: https://pastebin.com/E1SgtKLr And here is the exps.py file: https://pastebin.com/jMqrfPSS the file exps.py has some syntax errors: it needs import sys and in line 61 it is if len(sys.argv)>1 and sys.argv[1]=='-donothing': and not if len(sys.arg)>1 and sys.argv[1]=='-donothing':)

Please here check my env.sh file: is EXE_HOME configured right?

mitaros@machine-2:/users/mitaros/anh/blockchain-perf/benchmark/ethereum$ cat env.sh ETH_HOME=/users/mitaros/anh/blockchain-perf/benchmark/ethereum HOSTS=$ETH_HOME/hosts CLIENTS=$ETH_HOME/clients ETH_DATA=~/data/dinhtta/eth LOG_DIR=$ETH_HOME/donothing_ycsbresults_1 EXE_HOME=/users/mitaros/anh/blockchain-perf/src/macro/kvstore BENCHMARK=ycsb

comment these out for smallbank

EXE_HOME=$ETH_HOME/../../src/smallbank/ethereum/ycsb

BENCHMARK=smallbank

mitaros@machine-2:/users/mitaros/anh/blockchain-perf/benchmark/ethereum$

ug93tad commented 6 years ago

Thanks for pointing out the syntax errors, they're fixed now. The EXE_HOME you configured looks correct.

Can you post the content of a server log (in $ETH_DATA/../eth_log) and a client log (in $LOG_DIR) ?

gmitaros commented 6 years ago

@ug93tad here is the log from a host (in $ETH_DATA/../eth_log: https://pastebin.com/Gm6tQawq and in (in $LOG_DIR) i dont get anything: http://prntscr.com/hlsy88

I checked and geth runs in all hosts (4 at all) but as i can see driver never runs because i get: driver: no process found so the problem must be in the clients and i think in that command:

nohup ./driver -db ethereum -threads $1 -P workloads/workloada.spec -endpoint $host:8000 -txrate $4 > $LOGDIR/client$host"_"$1 2>&1 &

why it doesn;t write anything in the log dir? it creates the directories but it doesn't write

ug93tad commented 6 years ago

it looks like the servers did not finish generating DAG (only 40%), thus the client hasn't started yet.

did you stop the script while it's still running?

DAG generation takes long, and in run-bench.sh we sleep for 240*#nodes seconds before starting the clients. If your servers are slow, you may have to increase the sleep time.

gmitaros commented 6 years ago

I raised the sleep time in run_bench.sh and here you can see the results from the eth_log of each host! Still no output! Host1: https://pastebin.com/FxuainFJ Host2: https://pastebin.com/tpfU0bJs Host3: https://pastebin.com/0ZwBZFdj Host4: https://pastebin.com/K5kSgDBD

ug93tad commented 6 years ago

what's exactly is your sleep time for this run? and did you run it until the script finishes? what're the script's outputs?

I see that one node is still generating DAG after 10 minutes, while another finished after 4 minutes.

can you run with 2 nodes, with the following:

run-bench.sh 2 16 2 10

(the document was just updated to reflect that run-bench.sh should takes 4 parameters, the last being the transaction rate per client thread)

gmitaros commented 6 years ago

I run it via the exps.py and i let it run till the end! Here is the output with run-bench.sh 2 16 2 16 https://pastebin.com/sYzimhnA and this is my run_bench: https://pastebin.com/Y7RJbB5r and here is my start-multi-clients: https://pastebin.com/7WsQCGhv

bulldosers commented 6 years ago

You have to ssh into the client node to see the log files if you don't have NFS running among them.

I ran with Ethereum version 1.7.3 as you did and saw no problem in my cluster.

gmitaros commented 6 years ago

Please help me in that. i git clone https://github.com/mrtazz/restclient-cpp then i cd restclient-cpp then i run sudo patch -p4 < /users/mitaros/anh/blockchain-perf/benchmark/parity/patch_restclient then i do these: ./autogen.sh ./configure make install and then i try to run the driver with this ./driver -db ethereum -threads 16 -P workloads/workloada.spec -endpoint 10.128.04:8000 -txrate 16 and i get ./driver: error while loading shared libraries: librestclient-cpp.so.1: cannot open shared object file: No such file or directory

i dont know where to find librestclient-cpp and put it in LD_LIBRARY_PATH

gmitaros commented 6 years ago

Finally i managed to make it create a logfile but they have inside this message: driver: evm_utils.cc:330: std::__cxx11::string BBUtils::EVMUtils::lookup_smart_contract_address_or_die(const string&, const string&): Assertionr.find("\"result\":null") == std::string::npos' failed.`

https://pastebin.com/3M99iEmx

with these logs in eth_log: log 1: https://pastebin.com/XMi7esPn log 2: https://pastebin.com/8Xyg7AaR

have to run this blockbench please any ideas? Maybe the problem is still in restclient-cpp? Also when i try to run the driver without running the run_bench.sh i get something like this in output: https://pastebin.com/Uvzr2fnc

ug93tad commented 6 years ago

why are there 2 eth_log files?

looking at log_1, it appears that the contract was submitted successfully from the client. So restclient-cpp is working fine.

The problem may be that the driver waits for default of 20s after submitting the contract to start sending transactions. But your servers takes longer than 20s to mine one block, thus the driver failed to query the contract when the 20s expire.

Try either:

gmitaros commented 6 years ago

When trying to recompile i get this error: https://pastebin.com/s46Yx6zC these 2 logs was from different hosts. Also i just tried this: mitaros@machine-4:~$ nc -zv 10.128.0.9 8000 nc: connect to 10.128.0.9 port 8000 (tcp) failed: Connection refused So Google Cloud VM Instances have problem in internal communication may be this is the problem? What do you believe?

ug93tad commented 6 years ago

for your first problem, just install libtbb-dev at the client.

you'll have to start the server first (at node 10.128.0.9), then do nc command. If it still fails, then your cloud VM doesn't accept connection at this port, and the benchmark won't work (you'll need to open port 8000 at the server then)

gmitaros commented 6 years ago

About the connection problem yes it connects successfully when the node is working! I changed it to 60s kai added also -deploy_wait 60 in the last line of the file and now i wait...lets see

gmitaros commented 6 years ago

Finally i got some results please check these and tell me if they are ok. run_bench log for sudo ./run-bench.sh 2 16 2 16 : https://pastebin.com/sQhWyG0A Results: client_10.128.0.7_16 : https://pastebin.com/1ERx294r client_10.128.0.6_16: https://pastebin.com/LiQdQ2jb

And a log from ~/data/dinhtta/eth/eth_log : https://pastebin.com/5SZgGPQG Are these results ok? How i can visualize them as you did here: http://www.comp.nus.edu.sg/~ooibc/blockchainsurvey.pdf

ug93tad commented 6 years ago

there were errors in your run-bench.sh logs:

the output looks as expected when the benchmark runs properly. From this log file, you can compute throughput and latency, then graph them using standard visualization tool.

xiaohua0921 commented 6 years ago

hello,I meet the same error message “ driver: evm_utils.cc:334: std::__cxx11::string BBUtils::EVMUtils::lookup_smart_contract_address_or_die(const string&, const string&): Assertion `r.find("\"result\":null") == std::string::npos' failed. ”, and I have added “sleep 60 ” in line 22 of start-client.sh , meanwhile , increased the deploy_wait to 60s in line 36 of kvstore/db/db_factory.cc . But , these method isn't solve the error . I find ,there haven't information similar to " INFO [12-17|14:23:44] Submitted transaction fullhash=0x98f01ebbaafbad3d5d912e6571f81f3f6a51c198093f9ad87f17a134aef63999 recipient=0x72F346308d55801FfCa59Ca2161e9fAC5d5323B7 " in my eth_log file . Can you help me? Thank you very much !

lhx-git commented 2 years ago

image i meet this problem, can you give me some advice?

yogesa commented 1 year ago

you must make sure to use run-bench.sh to start this , but not to use ./driver to start , I use ./driver to start , I found in the boat with you.

tienquyet28 commented 1 year ago

with you.

the file reame.md of kvstore/db need to be configure properly as per your confirguration then curl can execute smartcontract load ABI properly in your geth EVM through JSON-RPC . document in geth ethereum may have you with that. or you can ask comment to me to get right code.