트레이딩봇으로서의 라즈베리파이서버

1.
USB부팅하는 라즈베리파이 서버 만들기에 이어지는 글입니다. 앞서 만들었던 라즈베리파이 서버와 동일한 구조를 가지는 또다른 서버를 만듭니다. 목적으로 ZeroAOS를 설치한 자동매매트레이딩서버입니다. 요즘 Robot을 의미하는 봇(Bot)이라는 단어를 자주 봅니다. 특히 암호통화거래를 하는 트레이딩봇이 유행입니다. ZeroAOS는 암호통화거래를 위한 환경을 만들지 않았습니다. 최소한 시세와 주문을 WebSocket으로 접속할 수 있는 API를 제공하는 국내암호통화거래소를 확인할 수 없기때문입니다. 작년 여름 ZeroAOS를 이용하여 빗썸에서 거래하는 봇을 만들자는 제안을 받았지만 API를 검토한 후 포기하였습니다. 소개하였던 다른 분이 직접 개발하였는데 결국 API때문에 성공하지 못했다고 합니다. ZeroAOS가 외부에서 데이타를 받아야 하는 프로세스가 ZeroFeeder(시세)와 ZeroBOG(주문게이트웨이, FEP)이기때문에 암호통화거래소가 제공하는 데이타를 ZeroAOS에 맞게 추상화하여 매핑하면 어렵지 않게 자동매매시스템을 구성할 수 있지만 보류하고 있습니다. (^^) 라즈베리파이서버로 자동매매시스템을 구성하려고 하는 상품은 파생상품보다는 주식(유가증권 및 코스닥 혹은 ETF)입니다. 파생상품에 비해 시세도 적고 주문도 적기때문입니다.

지난 번에는 Ubuntu를 OS로 선택하였지만 이번에는 다른 것을 하고 싶어서 여러가지를 검토했습니다. CentOS나 Debian은 자주 사용했던 배포판이라 생소한 Archlinux를 골랐습니다. 그중에서도 Manjaro-ARM입니다. 선택한 이유는 UI때문입니다. 서버로 운영할 때 UI가 성능에 제약을 줄 수 있지만 나중에 데스크탑으로 사용해보고 싶은 생각으로 설치하였습니다.

Manjaro-ARM이 제공하는 배포판중 라즈베리파이와 관련한 것은 두가지입니다. 처음 설치할 때는 Raspberry Pi 2의 Mate Edition을 사용했습니다. 그런데 여러가지 오류가 발생하여 정상적인 설치를 할 수 없었습니다. Archlinux의 ARM버전도 해보았지만 원하는 결과를 얻지 못했습니다. 마지막에 선택한 버전이 Manjaro-ARM KDE Edition입니다. 설치하는 방법은 이전과 다르지 않습니다. 같은 방법으로 합니다. 다만 dd를 할 때 bs를 4M로 합니다.

Ubuntu Mate 및 라즈베리파이 2용으로 나온 Manjaro ARM과 비교할 때 가장 큰 차이는 u-Boot방식을 적용한 점입니다. cmdline.txt를 /boot에서 찾으니까 관련한 파일이 보이지 않더군요. 비슷한 내용을 가진 파일이 /boot/boot.txt 입니다. 다른 리눅스에 SD카드와 USB를 연결하여 dd 명령어를 실행한 후 관련한 파일을 수정하려고 했지만 저장을 하지 못하네요. 아울러 mkscr 명령어도 동작을 하지 않았습니다. 그래서 SD 카드에 모든 데이타를 옮겨놓고 USB를 연결한 상태에서 부팅하였습니다. KDE 환경의 vi를 실행하려고 하는데 오류가 발생하더군요. error while loading shared libraries: libncurses.so.5:와 같은 이슈입니다. 아래와 같이 문제를 해결하였습니다.

boot.txt를 열면 아래와 같은 내용입니다. setenv이후를 보면 cmdline.txt와 같은 내용입니다.

복잡하게 문제를 풀지 않고 단순히 해결하였습니다. 우선 blkid 명령어를 실행하였습니다.

Root Partition을 가진 부분이 /dev/sda1입니다. PARTUUID를 복사해서

setenv bootargs console=${console} root=PARTUUID=${uuid} rw rootwait

setenv bootargs console=${console} root=PARTUUID=5a237278-01 rw rootwait

로 변경하였습니다. 이제 mkscr 을 실행하였는데 오류가 발생하였습니다. uboot와 관련한 패키지를 설치하라고 합니다.

설치후 mkscr을 실행한 결과를 보니까 아래와 같이 바뀌었습니다.

setenv bootargs console=ttyS1,115200 console=tty0 root=PARTUUID=5a237278-01 rw rootwait smsc95xx.macaddr=”${usbethaddr}”

이제 부팅을 다시 합니다. 모든 것이 정상적으로 동작합니다.

2.
설치후 제일 먼저 한 작업은 SSH Server 설치입니다. Arch Linux SSH Server Setup, Customization and Optimization을 참고하였습니다. 사실 다른 배포판과 차이가 없습니다. 다른 점은 pacman과 systemctl을 사용하는 점뿐입니다. Systemd로 프로세스 및 자원을 관리하네요. 이제 라즈베리파이서버를 트레이딩서버로 사용할 수 있는지를 확인하는 성능측정입니다. 자동매매시스템을 구성할 때 가장 중요한 부분이 네트워킹입니다. 외부네트워크와 통신할 때의 성능을 측정했습니다. speedtest-cli를 사용하였습니다. 설치는 아래와 같습니다.

실험한 결과입니다. 100Mbit를 넘지 못합니다.

다음으로 UDP시험입니다. 시험을 위해서 iperf를 설치하였습니다. TCP시험입니다. 이전에 설치한 라즈베리파이 레드마인서버에 Iperf를 서버모드로 실행한 후 시험을 하였습니다.

이번에는 UDP 시험입니다. 같은 방식입니다.

만약 시세때문에 병목현상이 발생할 경우 USB 방식의 이더넷카드를 이용하면 더 높은 성능을 얻을 수 있습니다. 이와 관련한 자료는 Getting Gigabit Networking on a Raspberry Pi 2, 3 and B+Raspberry Pi network speed test: RPI2, RPI3, Zero, ZeroW (LAN&WiFi)을 참고로 하시길 바랍니다.

다음은 Sysbench를 이용한 성능측정입니다. Archlinux에서 sysbench를 설치하려면 yaourt를 이용해야 합니다.

우선 CPU 성능입니다.

Thread를 10로 한 시험결과입니다.

자세한 사용법은 Sysbench WIKI에서 확인하세요. sysbench로 Disk I/O를 측정할 수 있지만 SD 카드를 이용할 경우 성능측정하는 프로그램을 이용할 수 있습니다. microSD Card Benchmarks을 보시면 상세한 결과를 제공하는데 IOZONE을 이용하고 있습니다. IOZONE은 이미 2012년에 쓴 어플리케이션 로그와 레이턴시에서 사용법을 소개하였습니다.

IOZone을 이용한 시험결과입니다. 제 경우는 SD카드가 아닌 HDD를 내장하였기때문에 HDD성능입니다. 간접적으로 Raspberry Pi Dramble와 비교해보실 수 있습니다. SD보다는 SSD 혹은 HDD가 성능에 도움을 줍니다.

이상과 같은 결과를 일반적인 서버와 비교할 수 없습니다. 일부 예외를 제외하면 대부분 자동매매시스템이 사용하는 리소스가 10%를 넘는 경우가 없습니다. 고빈도매매(HFT)가 가능한 환경에서 그에 맞는 전략인 경우를 제외하면 매매를 위해 필요한 리스소를 크지 않습니다. Latency에 민감하지 않은 암호통화나 유가증권거래에 충분히 적용할 수 있으리라 생각합니다. 혹 좀더 성능을 내보려고 한다면 오버클락을 검토할 수 있습니다. 부산IDC를 이용하여 매매하는 외국인투자자의 대부분은 오버클락한 서버를 이용하고 있습니다. 프로세싱에서 중요한 클락수를 높이기 위함입니다. 프로세싱 레이턴시를 최소화하여 거래소의 진입시간을 빠르게 하려고 합니다.

Overclocking for Raspberry Pi 3 Model B

3.
라즈베리파이 성능향상을 위한 자료를 찾아보면 zram이라는 아이디어가 나옵니다. 위키의 설명입니다.

zram, formerly called compcache, is a Linux kernel module for creating a compressed block device in RAM, i.e. a RAM disk, but with on-the-fly “disk” compression. The block device created with zram can then be used for swap or as general-purpose RAM disk. The two most common uses for zram are for the storage of temporary files (/tmp) and as a swap “disk”. Initially, zram had only the latter function, hence the original name “compcache” (“compressed cache”).

zram을 라즈베리파이에 적용한 것이 rpi_zram입니다. swap 영역을 SD카드가 아니라 RAM에 할당합니다. 앞서 어플리케이션 로그와 레이턴시에서도 소개하였던 RapidDisk와 비슷합니다. 성능향상에 도움을 줄까요? 이에 대한 의견입니다. 당연한 이야기지만 프로그램에 따라 다릅니다.(^^) 저의 경우 USB로 연결한 SSD나 HDD를 사용하기때문에 별도의 Swap영역을 할당합니다. 아울러 ZeroAOS는 대부분의 데이타를 shared memory로 처리하기 때문에 메모리용량이 넉넉해야 합니다. 그래서 무의미한 개념입니다.

If free RAM, no swap, ZRAM is useless.
If free RAM, some swap usage, but less than the free RAM, ZRAM is useless, just tune the swappiness so the swap is less used
If free RAM, some swap usage, but a lot more than free RAM, try first to tune the swappiness and the apps, to decrease the ram usage. If no change, try ZRAM is our cpu is free most of the time
IF no free RAM, swap usage high, ZRAM might be a good idea, even if CPU is used, as IO operation might be blocking the CPU more than what you would lose with ZRAM
again, all depends of what you use and how you use the RaspberryPI (or any computer)
How the usage of ZRam module in Raspberry Pi Kernel improves performance?중에서

또다른 덧붙임. 앞서 img를 이용할 때 파티션의 크기를 조정하는 경우가 있습니다. 이 때 문제가 발생하는 경우가 있습니다. e2fsck를 판올림하라는 메시지를 보여주고 동작을 하지 않습니다. 이를 해결하기 위한 팁입니다. E2FSCK: how to handle the “metadata_csum” error by advancing the e2fsck version beyond default installed version에서 가져왔습니다.

1) Get the 1.43.X packages:
https://packages.ubuntu.com/artful/e2fslibs
https://packages.ubuntu.com/artful/e2fsprogs

2) Switch to and check the download directory:

$computer:~/Downloads$ ls -l
-rw-rw-r– 1 155908 Jul 29 17:38 e2fslibs_1.43.5-1_amd64.deb
-rw-rw-r– 1 496598 Jul 29 17:38 e2fsprogs_1.43.5-1_amd64.deb

3) Install the 1.43.X packages (@David Foerester code):
$computer:~/Downloads$ for f in e2fs{libs,progs}_*_$(dpkg –print-architecture).deb; do sudo dpkg -i “$f”; done

4) Check your installed version:
$computer:~/Downloads$ e2fsck -V
e2fsck 1.43.5 (04-Aug-2017)
Using EXT2FS Library version 1.43.5, 04-Aug-2017

Leave a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.