멀티캐스트, 시세 및 OpenOnload

1.
트레이더가 시세를 받는 방법은 다양합니다. 증권사 HTS가 제공하는 API를 이용하는 경우도 가능하고 시세분배시스템이 제공하는 UDP Multicast 방식도 가능합니다. 코스콤이 제공하는 KoscomDATA을 방문하면 코스콤이 제공하는 시세에 대한 개발가이드를 구할 수 있습니다. 예전에 비해 아주 좋아진 서비스입니다. 코스콤이 제공하는 개발가이드는 전송방식별로 나누어 제공합니다. 이중 UDP를 선택하고 엑셀을 받은 후 ‘전송 IP 및 포트내역’를 보면 UDP 수신을 위해 사용하는 주소와 포트가 나옵니다.

요즘 ZeroAOS를 직접 설치해서 시험하느라 이것저것 시험을 해보고 있습니다. 알고 있었던 지식도 시간이 지나면 잊혀지는 법, 열심히 다시 학습을 하고 있습니다. 예전 rp_filter을 정리한 때가 3년전이니 어쩔 수 없습니다. 설치가이드에 따라 ZeroAOS를 설치한 후 가장 먼저 확인하는 일이 시세 수신입니다.

우선 트레이딩서버가 정상적으로 멀티캐스트그룹에 가입했는지를 확인합니다.

[zeroaos@localhost ~]$ netstat -g
IPv6/IPv4 Group Memberships
Interface RefCnt Group
————— —— ———————
lo 1 all-systems.mcast.net
enp6s0 5 233.37.54.112
enp6s0 2 233.37.54.142
enp6s0 5 233.37.54.141
enp6s0 5 233.37.54.111
enp6s0 1 233.37.54.115
enp6s0 1 233.37.54.162
enp6s0 1 233.37.54.195
enp6s0 1 233.37.54.161
enp6s0 1 233.37.54.191
enp6s0 1 233.37.54.171
enp6s0 1 224.0.0.251
enp6s0 1 all-systems.mcast.net
lo 1 ff02::1
lo 1 ff01::1
enp6s0 1 ff02::1:ff9b:8ceb
enp6s0 1 ff02::1
enp6s0 1 ff01::1

위의 enp6s0에 대한 정보입니다.

[zeroaos@localhost ~]$ ifconfig
enp6s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.111 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::ca60:ff:fe9b:8ceb prefixlen 64 scopeid 0x20 ether c8:60:00:9b:8c:eb txqueuelen 1000 (Ethernet)
RX packets 6583404 bytes 604347152 (576.3 MiB)
RX errors 0 dropped 11 overruns 0 frame 0
TX packets 1146643 bytes 856259578 (816.5 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

233.37.54.112부터 171까지가 멀티캐스트그룹입니다. 그러면 netstat 명령어를 이용하여 어떤 프로세스가 어떤 포트에 연결되어 있는지를 확인합니다.

multicast

리눅스가 아닌 윈도우에서 멀티캐스트그룹 가입여부를 확인하는 명령어는

C:\Users\smallake>netsh interface ip show join

입니다. 그 결과는

multicast2

2.
시세를 멀티캐스트로 받을 때 누락되는 것이 있는지를 확인할 필요가 있습니다. KRX처럼 Level1인 경우 누락데이타가 큰 영향을 주지 않지만 Level2인 경우 호가잔량 등을 계산할 때 오류가 발생할 수 있습니다. 이와 관련한 설명은 Lost multicast packets troubleshooting에 자세히 나와 있습니다. OS와 네트워크카드로 인하여 패킷을 처리하지 못할 수 있습니다. 먼저 네트워크카드가 처리하지 못한 패킷의 갯수를 확인하려면 netstat명렁어를 사용합니다.

netstat1

반면 OS가 처리하지 못한 패킷은

watch -d “cat /proc/net/snmp | grep -w Udp”

로 확인을 합니다.

snmp

위와 같은 상황이 발생할 경우 어떻게 할 것인지는 Lost multicast packets troubleshooting를 참조하세요. 이상의 방법은 TOE방식의 네트워크카드에는 적용할 수 없습니다. 착오가 없기를 바랍니다.

3.
좀 다른 주제로 넘어가겠습니다. 그동안 Chelsio제품만을 설치한 환경에서 작업을 했습니다. 처음으로 solarflare를 이용한 환경에서 설치와 시험을 해야 합니다. 우선 문서를 받아서 읽었습니다.

Download (PDF, 6.94MB)

Chelsio의 경우 하드웨어적으로 TOE를 구현해서 OS나 어플리케이션에서 최적화를 위해 할 일이 별로 없었습니다. 그런데 OpenOnload를 이용하니 Openonload를 위한 실행환경을 설정해주는 것이 무척이나 중요한 듯 합니다. 네트워크 카드가 없어서 – 별로 살 생각도 없습니다만 – 문서상으로 읽은 것중 일부를 소개합나디.

첫째 Solarflare를 위한 드라이버를 설치한 후 ROM업데이트를 하라고 합니다. 방화벽에 막혀있을 경우 어떻게 해야할지 고민입니다.

sfupdate
sfupdate –write

둘째 CPU State를 고정하라고 합니다. BIOS나 Kernel 패러매터로 CPU State를 조정하는 것과 어떤 차이가 있는지 모르겠습니다.

onload_tool disable_cstates persist

마지막으로 환경변수를 지정하라고 합니다.

export PRERUN=”onload –profile=latency “

이상을 한 후 프로그램을 실행하기 전에 onload를 먼저 실행하도록 권고합니다. 예를 들면 아래와 같습니다.

root@lab02 src]# $PRETURN netperf -H 192.168.7.101 -C -c
oo:netperf[24756]: Using OpenOnload 201205-u1 Copyright 2006-2012 Solarflare Communications, 2002-2005 Level 5 Networks [2]
oo:netperf[24756]: ci_tcp_limit_mss: (ci_tcp_connect_ul_start) limiting mss 8960 => 1750
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to 192.168.7.101 (192.168.7.101) port 0 AF_INET
Recv Send Send Utilization Service Demand
Socket Socket Message Elapsed Send Recv Send Recv
Size Size Size Time Throughput local remote local remote
bytes bytes bytes secs. 10^6bits/s % S % S us/KB us/KB

앞서 소개한 글중 Appendix A. “Solarflare’s Application Acceleration/OpenOnload”을 보시면 패킷 손실과 같은 문제에 대응하는 법이 나와 있습니다. 참고하세요.

2 Comments

  1. 조성일

    시스템트레이딩 관련해서 찾아보다가 여기와서 많은 정보 얻고 갑니다.
    그런데 궁금한게 있어서 질문 드리고자 합니다.
    이 포스트에 있는 내용중에 코스콤에서 UDP Multicast로 전송하는 시세에 대한 내용이 있는데요.
    개인도 코스콤 시세데이터를 쓸 수 있는지, 코스콤에 별도의 계약이나 비용지불 없이 시세 데이터를 받아 보는게 가능한건지 궁금합니다.

    Reply
    1. smallake (Post author)

      안녕하세요. 코스콤시세는 유료입니다. UDP를 받고 싶으시면 증권사나 선물사의 특화주문(DMA서비스)를 알아보시길 바랍니다. 예전과 달리 약정을 많이 요구하거나 이용료를 요구하는 곳이 많아졌습니다.

      그럼.

      Reply

Leave a Comment

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

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