[AcroEOS] 잇따른 제한 조정, CPU에 무슨 일이 생겼나

AcroEOS
AcroEOS
Published in
4 min readNov 16, 2018

안녕하세요. AcroEOS입니다.
얼마 전 CPU 부하 문제로 CPU 제한을 20% → 30%로 상향 조정했습니다. 헌데, 다시 그 제안을 25%로 재조정했다는 소식이 있었는데요. 왜 다시 5% 하향 조정하였는지 그 이유에 대해서 말씀드리고자 합니다. 이는 EOS의 블록 생성과 관련이 있습니다.

블록 생산 시간

EOS의 블록 1개 생성 시간은 0.5초(500ms)입니다.

블록 생성 작업 중에서 CPU에 할당된 최대 공간(Max Block Cpu Usage)은 고정 값으로 연산에 소요되는 시간은 0.2초(200ms)입니다. 나머지 0.3초(300ms)는 블록전파(propagation) 등의 작업이 이루어집니다.

왜 다시 25%로 하향 조정했을까?

고정 값이던 CPU 할당 공간을 30%로 상향 조정한 이후부터 블록 생성이 지연(Latency)되어 ‘마이크로 포크(Micro Folk)가 발생하였고, 이로 인해 블록 생성을 놓치게 되는 블록 미싱 증상이 나타났습니다. CPU 제한을 30%로 늘려 연산 시간을 확보함으로써 CPU 부하로 인한 문제가 해결되는 듯 보였지만, 블록 전파(Propagation) 등에 소요되는 리소스가 상대적으로 줄어들게 되어 이와 같은 증상이 발생한 것입니다.

※ 마이크로 포크
대개 블록 전파 지연(Latency)시간으로 인해 발생하는 증상입니다. 이로 인해, 각 노드가 서로 다른 블록을 쌓기 시작하고 체인이 나뉘어 블록을 생산하게 되는 경우에 포크가 발생한다고 이야기합니다. 보통 이 경우, 긴 체인 법칙에 따라 다수의 승인(+2/3)검증을 먼저 받는 블록/체인이 비가역성을 갖게되고 정당성을 입증받아 체인을 이어나가게 됩니다. 반면, 더 이상 이어 나아가지 못하는 체인은 고아블록(Orphan Block)이 되어 소멸합니다.

마이크로 포크로 인한 블록미싱 발생

정리하면, 아래와 같습니다.

  1. CPU 부하 증상 발생
  2. CPU 제한 30% 상향 조정 → CPU 연산 시간 상향
  3. 블록 검증, 전송 투입 리소스의 상대적 감소
  4. 마이크로 포크 증상
  5. 블록 미싱 발생

CPU부하 증상을 해결하기 위해 고정된 CPU 제한을 30%만큼 상향 조정하여 트랜젝션에 대한 연산 시간은 확보했지만, 블록을 검증하고 전송하는 작업 등에 투입되는 시간이 상대적으로 줄어들게 되었고, 이것이 마이크로 포크를 유발하여 결과적으로 블록 미싱이 발생한 것으로 볼 수 있습니다.

이에 CPU 제한을 다시 25%로 재조정한 이유는 블록 연산 시간에 할당된 비중을 줄여 부족해진 검증/전송 시간을 확보한 상태라 볼 수 있습니다. 이렇듯, CPU부족에 의해 발생하는 증상을 제한을 풀어 조치하는 방법은 일시적인 미봉책에 불과합니다. (※어느 정도 해소는 가능하지만, 앞서 이야기한 바와 같이 마이크로 포크에 의한 블록 미싱이 발생할 수 있음)

따라서 EOS.IO의 전체적인 개선이 필요한 시점이며, 댄 라리머는 현재 진행중인 멀티스레드 시그니쳐와 REX가 CPU 환경 개선에 도움을 줄 것이라 이야기한 바 있습니다. 앞으로 있을 하드포크 역시, 그 해결 방안 중 하나일 것이라 예상합니다.

Contact

EOS producer name : acroeos12345
Email : community@acroeos.io
Steemit : https://steemit.com/@acroeos
Medium : https://medium.com/acroeos
Twitter : https://twitter.com/acroeos
Telegram : https://t.me/AcroEOS
Wechat : AcroEOS信息站!
proxyname : votetochange

--

--