Closed hyojin5658 closed 3 years ago
위에서 비교한 두 상황을 clion에서 profiling 한 결과는 다음과 같다.
데이터 파일을 load 하여 사용한 경우
데이터 파일을 사용하지 않는 경우(genesisblock 부터 생성)
call tree를 분석 해 보면, datadir를 load 해서 사용하는 경우에 bitcoin의 select()함수가 많이 불리는 것을 볼 수 있다. 정확한 이유는 모르지만, 뭔가 connection 할때 select 함수를 부르게 되는데, 이 함수를 왜 부르는 지는 잘 모르겠다.
또한, 위에서 실험 한 파일은 pow 알고리즘을 사용하여 dump 파일을 생성하였다. 홍준씨가 coinflip 으로 dump 한 파일을 가지고 실행 했을 때는, 시뮬레이션 시간이 얼마 안걸렸다고 하였으므로, 이에 대한 분석도 필요하다.
여러가지 디버깅을 실행 해 보다가, 이전에 dump 해놓았던 데이터 파일(시뮬레이션시간이 짧음)과, 새로 dump 한 파일의 차이점을 비교 했을때 peers.dat 파일에 따라서 시뮬레이션이 차이가 나는 것을 알 수 있엇다.
peers.dat 파일은 비트코인이 어떠한 peer들에게 connection을 시도하는지/했는지(확실하진 않음)에 대한 정보를 저장하고 있으며, 해당 데이터 파일에 있는 address를 load 해오면 더이상 연결을 시도하지 않는다.
시뮬레이션 시간이 오래 걸리는 것은 새로 dump한 파일 중 peers.dat 에는 다른 peer들에게 연결한 데이터가 없어서 해당 dump한 파일을 사용했을때, 새로 연결을 시도해서 그런 것이다.
따라서, 이전에 dump 해 놓았던 peers.dat 파일을 copy 하여 새로 시작하는 시뮬레이션에서는 연결을 시도하지 않게끔 해놓았고, 그 결과 675개의 address가 peers.dat 에 있는 것을 확인할 수 있었다.
0.2.0 릴리즈를 위하여 테스트를 하던 도중, Regtest의 1_bitcoin 테스트 중 shadow의 시뮬레이션이 지나치게 오래걸리는 것을 확인할 수 있었다.
시뮬레이션 환경은 10개 노드를 20초 동안 시뮬레이션하고, plugin은 minerNode_rpc.so를 사용하여 마이닝 rpc콜을 호출 한다. 또한, 6블록을 미리 생성해 놓기 위하여 미리 dump 되어 있던 블록체인 데이터(*.dat 파일) 들을 사용하여 reindexing을 진행 시킨다.
이때, 데이터 파일을 load 하여 사용하는 경우 의 shaodw의 실행 시간 = 대략 2분 데이터 파일을 사용하지 않는 경우의 shadow의 실행 시간 = 30초 내외