2017년 11월 28일 화요일

ODROID-MC1으로 모네로(XMR) 채굴하기

 요즘들어 비트코인이 한창 이슈가 되고 있다. 

 그것도 그럴 것이, 올해 들어서만 비트코인 가격이 거의 10배 가량 올랐기 때문이다. 내 경우에는 작년 상반기에 이더리움이라는 암호화폐에 관심이 생겨서, DAPP도 만들어보고, GPU 채굴도 해보고, 트레이딩도 해봤던 경험이 있다. 채굴은 채굴기 1대 정도만 셋팅해서 돌렸기 때문에 소소한 용돈 벌이 정도에 그쳤고, 트레이딩에서 트럼프가 당선되는 덕분에 짭짤한 수익을 올렸었다. 당시 비트코인과 이더리움을 모두 정리했던 시점의 시장 가격이 원화로 비트코인은 90만원, 이더리움은 1만원 정도로 형성되어 있었다. 오늘(2017-11-29) 시세와 비교하면 비트코인은 약 13배, 이더리움은 약 58배 가량 올랐다.

 각설하고, ODROID-MC1이라는 임베디드 병렬 컴퓨팅용 제품을 사용하여 암호화폐의 하나인 모네로(XMR)을 채굴하는 방법을 소개한다. ODROID를 사용하여 암호화폐를 채굴 하는 것에 대한 주제는 과거 라이트코인(LTC)이 출시 되었을때부터 현재까지 지속적으로 ODROID forum에서 인기있는 주제 중의 하나이다. 왜냐하면, 라즈베리파이나 ODROID와 같은 SBC는 주로 CPU를 ARM 아키텍처를 사용하는데, ARM 아키텍처는 우리가 사용하는 PC에서 사용되는 x86 아키텍처와 비교하면 컴퓨팅 성능은 뒤쳐지지 않으면서도, 저전력을 자랑한다. 암호화폐 채굴을 하면서 가장 많이 드는 유지비가 전기세임을 감안했을때, ARM 아키텍처의 저전력 특성은 채굴자에게 매우 매력적인 특성이다.

 더군다나, ODROID-MC1은 현존하는 SBC 중에 가격대비 컴퓨팅 성능이 최상급이다. 물론, 코어가 96개씩이나 달려있는 ARM 서버도 있고, MC1보다 훨씬 저렴한 보드들도 많지만, 이정도 가격에 이만한 컴퓨팅 성능을 가진 제품은 찾기가 힘들다. 
ODROID-MC1, Exynos5422 칩이 탑재된 4개의 보드가 1개 셋트로 구성된다.  파워서플라이는 별매.

 모네로 채굴을 하기 위해서는 우선 채굴기 프로그램을 동작 시킬 운영체제를 설치해야한다. ODROID도 마찬가지 이지만 라즈베리파이를 포함하여 대부분의 SBC (Single Board Computer)는 운영체제 이미지를 통으로 제공한다. 운영체제 이미지를 다운로드 받아서 리눅스의 dd 명령어나 Etcher 같은 프로그램을 사용하여 SD 카드에 굽는다. PC에서 iso 파일을 CD나 USB 스틱에 굽는것과 동일하다고 보면 된다.

 Ubuntu 16.04.3 이미지를 다운로드 받아서 SD 카드에 굽는다. 오늘 기준으로 최신 4.14 리눅스 커널이 설치된 Ubuntu 이미지가 앞서 링크한 이미지 뿐이지만, 향후 Ubuntu minimal 버전이 나오면 Ubuntu minimal 버전을 추천한다. 단순 채굴용으로 쓰기에는 데스크탑 버전 운영체제는 불필요한 패키지가 너무 많아 무겁다. Etcher를 사용하여 운영체제 이미지를 SD 카드에 굽는 방법은 Install Linux 위키 페이지를 참고바란다. 위키 페이지의 운영체제 받아오는 부분은 스킵하고, Etcher 프로그램을 실행하는 단계부터 참고하면된다.

 ODROID-MC1은 HDMI 디스플레이 포트가 없으므로 설치된 Ubuntu의 콘솔에 접근하려면 USB-UART Module Kit을 사용하여 Serial 콘솔을 사용하거나 각 보드의 IP를 알아내서 ssh로 원격 접속해야한다. ODROID 보드 IP를 알아내는 방법은 Headless setup 위키 페이지를 참고하자. 하드커널에서 제공하는 Ubuntu 데스크탑의 기본 계정은 odroid, 비밀번호도 동일하게 odroid 이다.

 각 보드에 접속해서 가장 먼저 해야 할 것은 운영체제를 최신으로 업그레이드 하는 것이다. 

$ sudo apt-get update
$ sudo apt-get upgrade && sudo apt-get dist-upgrade
$ sudo apt-get install linux-image-xu3

linux-image-xu3 패키지를 설치하여 커널 업그레이드를 수동으로 해야한다. linux-image-xu3 패키지를 설치 할 때 다이얼로그 박스가 나오면 "No"를 선택하여 커널 설치를 마저 진행한다.

다음으로 모네로 마이너 프로그램에 필요한 패키지들을 설치한다.

$ sudo apt-get install build-essential git cmake libmicrohttpd-dev libuv1-dev

 다른 채굴 프로그램은 ARM 아키텍처를 제대로 지원하지 않거나 ARMv8 아키텍처만 지원해서 채굴 프로그램으로 xmrig를 사용하였다. xmrig를 github 저장소에서 받아서 컴파일 한다. 참고로 현재 배포버전(2.4.2)에는 아직 MC1을 지원하지 않으니, github 저장소의 개발 버전을 빌드해서 설치해야 한다. 향후 aa4f8b6 커밋이 포함된 배포버전(2.4.3?)이 나오면 그것은 MC1을 지원 할 듯 싶다.

$ git clone https://github.com/xmrig/xmrig.git
$ cd xmrig
$ cmake .
$ make -j8

빌드가 성공적으로 끝났으면 테스트 삼아 마이닝을 해보자. MC1으로 모네로 채굴시에 채굴 풀은 DwarfPool을 추천한다. 왜냐하면, 다른 풀은 채굴 난이도(difficulty)가 높은 것들뿐이라 MC1과 같은 낮은 해쉬량을 물리면 accept가 잘되지 않는다. DwarfPool은 난이도 20000 짜리 포트가 있어서 그것을 사용하는 것을 추천한다. 

$ ./xmrig -o xmr-usa.dwarfpool.com:8005 -u YOUR_WALLET -p x -k -t 8

MC1에서 XMR 채굴시 해쉬량과 CPU, Memory 사용량
해쉬량은 대당 26.6 H/s 정도로 꾸준히 나온다. 전력 소모량은 대당 5V x 2A = 10W 정도이다. 전압을 4.7이나 4.6 정도로 떨어뜨려 전력 소모량을 좀 더 줄일수도 있지만, 보드가 오동작 할 여지가 있으므로  안정적인 5V 전압을 사용하는 것을 추천한다.

2017-11-29 11:12 기준 MC1 1대당 XMR 채굴 채산성
ODROID-MC1은 4대가 1세트이니, 세트당 해쉬량은 26.6 x 4 = 106.4 H/s 이다. 아래 영상과 같이 몇백대, 혹은 몇천대 단위로 돌리면 꽤나 해볼만하다. 적어도 오늘 기준으로는 말이다.



최적화

사실 이 내용은 쓰지 않으려고 했는데, MC1에서 XMR 채굴시 해쉬량을 좀 더(혹은 몇배?) 늘릴 수 있는 여지가 있다. 여기서 다루는 내용은 필자와 같은 시스템 프로그래머를 위한 내용이니 본인이 해당되지 않는다면 그냥 패스하길 바란다. 이 파트에서 다루는 내용은 최소한 채굴 프로그램과 리눅스 커널등을 본인이 원하는 대로 수정할 수 있는 스킬을 가지고 있는 사람을 위한 것이다. 다음과 같이 최소 2가지 최적화 포인트가 존재한다.

1. Exynos5422의 Security Sub System 활용하기
Exynos5422 칩 내부에 암호화 관련 기능이 포함되어 있다. 속칭 SSS (Security Sub System)라고 하는데, 여기서 AES나 SHA등 채굴 프로그램에서 사용하는 암호화 알고리즘을 칩단에서 하드웨어적으로 처리 할 수 있다. 특히나 AES는 모네로 채굴 알고리즘인 cryptonight에서 사용되는 알고리즘이니 이것을 활용할 수 있으면 AES 처리 성능이 많이 향상 될 것이다.

2. CPU + GPU 하이브리드 마이닝
Exynos5422에는 채굴 프로그램이 동작 시킬 수 있는 Mali-T628라는 GPU가 있다는 것을 얘기 안했던가? MC1에서 채굴자에게 익숙한 GPU 마이닝도 가능하다. AMD 그래픽 카드와 같이 Mali도 OpenCL 라이브러리를 사용하여 컴퓨팅 용도로 GPU를 쓸 수 있다. CPU로만 XMR 채굴시에 아직 메모리에 여유가 있으니 GPU도 채굴용으로 돌리게되면 채굴량이 증가 할 것이다. Mali-T628의 6개 코어 중에서 컴퓨팅용으로 사용할 수 있는 코어는 2개이다. 참고로 이더리움은 메모리 부족으로 GPU 마이닝이 불가능하고, ZCASH는 GPU 마이닝이 가능하긴 하나, 메모리 부족으로 1개 GPU 코어만 돌아가므로 해쉬량이 매우 떨어진다. (즉, GPU 마이닝에 최적화된 코인은 MC1으로 채굴 하지말란 소리다.)

Equihash (ZEC, BTG, ...) 채굴 프로그램인 silentarmy에서 GPU 목록 가져오기