시스코 스위치를 이용한 ptp 설정

1.
DMA 투자자들의 공통적인 관심은 Latency입니다. 레이턴시를 측정하려면 서로 다른 시스템들간의 시간을 정확히 동기화하여야 합니다. 시간동기화를 위해 DMA투자자에게 제공하는 서비스는 두가지입니다. NTP와 PTP입니다. 각 프로토콜은 정확도에서 차이가 있습니다. 정확한 시간을 위해서는 당연히 PTP를 채택하여야 합니다. PTP를 위해서 GrandMaster Clock이 있어야 합니다. 보통 GPS로 시간을 동기화합니다. 투자 규모가 큰 곳은 자체적으로 원자시계를 사용하는 곳도 있다고 합니다. 물론 우리에게는 그림의 떡입니다.

GM Clock은 스위치를 통하여 매매서버와 이어집니다. 리눅스의 환경의 매매서버는 보통 ptp4l과 phc2sys를 이용하여 시간동기화를 합니다. 스위치를 이용하여 시간동기화를 할 때 두가지 방식으로 가능합니다. Layer2와 Layer3 방식입니다.

오랜 동안 서버와 관련한 작업을 하였지만 스위치는 문외한입니다. 고객의 요청으로 처음으로 ptp설정을 할 기회가 있었습니다. Nexus 3600 모델입니다. 관련하여 스위치의 NX-OS 버전을 확인해보니까 6.x입니다. 아래 자료들입니다.

2.
시스코 스위치에서 ptp를 설정을 어떻게 하는지 찾아보면 대부분 아래와 같은 내용입니다.

위 명령어들을 보면서 가장 먼저 헷갈린 부분 PTP를 설정하면서 가장 먼저 막힌 부분은 ip 설정입니다.

switch(config)# ptp source ip 192.173.133.1

위 IP로 무엇을 사용하는지 착오가 있었습니다. 처음에는 GM Clock의 주소라고 생각했습니다. 설정을 해보니까 동작을 하지 않습니다. 위 명령어에 대한 설명은 아래와 같습니다.

Configures the source IPv4 address for all the PTP packets in the multicast PTP mode.

This is an important setting because it establishes your switch’s identity in the PTP network.This command takes your switch’s own IP address, not the GM’s IP address.

GM Clock과 스위치사이에 PTP 메시지통신을 하려면 스위치의 IP가 필요하다는 뜻이었습니다. 그래서 IP를 할당하니까 GM가 연결된 포트가 Slave로 나오더군요. 다만 IP설정은 세가지가 가능합니다.Interface, Vlan, Loopback인데 저는 vlan으로 설정하였습니다. 사용하고자 하는 포트들을 vlan으로 묶는 명령어입니다.

switch# configure terminal
switch(config)# interface ethernet 1/12
switch(config-if)# switchport mode access
switch(config-if)# switchport access vlan 1
switch(config-if)# no shutdown

두번째로 혼동한 부분은 slave와 master의 설정입니다. 위 명령어를 보시면 slave와 master의 설정이 다릅니다. 같은 부분은 아래뿐입니다.

switch(config-if)# ptp
switch(config-if)# no shutdown

Slave=GM clcok과 연결한 포트의 경우 다양한 명령어 설정이 있습니다. 시스코 스위치를 boundary clock으로 동작하도록 하는 명령어들입니다. 또하나 Cisco OS-NX 버전에 따라 명령어 사용법이 다랐습니다. 옛날 버전의 경우 아래와 같습니다.

switch(config-if)# ptp

버전이 높은 경우 enable와 같은 옵션을 사용할 수 있다고 합니다. 문서상으로 보면.

switch(config-if)# ptp enable

3.
이상과 같이 설정한 후 정상적으로 동작하는지를 확인하는 명령어들입니다.

switch# show ptp brief
switch# show ptp parent
switch# show ptp clock
switch# show ptp corrections
switch# show ptp clock
switch# show ptp time-property

위 명령어들을 실행한 결과값입니다.

위 결과를 보면 Eth1/1에 GM Clock이 연결되어 있고 Eth1/12에 연결된 서버에 PTP신호를 보내고 있습니다. GM Clock으로 받는 시간정보는 아래와 같습니다. ptp4l명령어를 통해서 같은 결과를 얻을 수 있습니다.

위 결과는 일반적인 내용이고 스위치 포트와 리눅스서버 등을 연결한 후 상태를 확인하는 방법이 필요합니다. 제 기준으로 가장 좋았던 명령어는 아래입니다.

switch# show mac address-table interface ethernet 1/12

설명은 이렇습니다.

Shows the MAC address table entries for the specified interface.

ETh1/12에 연결된 서버의 맥주소를 확인하는 명령어입니다. 맥주소가 보이지 않는다고 하면 정상적으로 연결되지 않았다는 뜻입니다. 또한 서버에서 ptp용으로 사용한 Interface와 위 명령어로 보이는 맥주소가 같아야 합니다.

switch# show mac-address-table interface 1/1/1
MAC age-time : 300 seconds
Number of MAC addresses : 1

MAC Address VLAN Type Interface
————————————————–
00:00:00:00:00:01 1 dynamic 1/1/1

즉, 서버에서 00:00:00:00:00:01 을 찾아야 하고 ptp로 설정한 interface의 mac주소이어야 합니다.

4.
이상과 같이 스위치쪽을 확인하였으면 서버쪽에서 작업을 해주어야 합니다. 가장 일반적인 방법은 linuxptp패키지를 설치하고 설정하는 것입니다. 설치를 하면 두가지 명령어를 사용할 수 있습니다.

ptp4l
phc2sys

pth4l을 이용하여 시험을 하는 방법은 아래와 같습니다.

ptp4l -i Interface_name -m

ptp설정과 관련한 정보는 무척 많습니다. redhat은 아주 자세한 정보를 제공합니다. 간단히 보고 싶다고 하면 오라클로 확인하셔도 좋습니다.

Configuring the PTP Service

기본적인 설정을 한 후 몇 가지 확인해주어야 하는 것이 있습니다. firewall과 selinux입니다. ptp 패킷을 필터링으로 막을 수 있기때문입니다. DMA매매용 서버라고 하면 방화벽 안쪽에 있기때문에 firewall과 selinux를 모두 disable로 하시면 편합니다. 그렇지 않고 사용하시겠다고 하면 아래와 같은 식의 명령어로 예외설정을 하야야 합니다.

Add or modify SELinux permissions to allow PTP to bind to network ports:

sudo setsebool -P domain_can_mmap_files 1
sudo setsebool -P nis_enabled 1

If you’re using firewalld, make sure it allows PTP traffic:

sudo firewall-cmd –permanent –add-service=ptp
sudo firewall-cmd –reload

마지막으로 시세속도와 체결비교를 어떻게 하면 좋을까요? 가장 좋은 방법은 Hardware Timestamping을 이용하는 것이지만 간단히 로그를 이용해서 확인할 수 있습니다. ptp를 이용하여 시간을 동기화하였기 때문에 매매서버, FEP서버 및 거래소매매체결서버의 시간은 거의 같다는 것을 전제로 합니다.

매매서버의 로그와 FEP로그를 모아서 시계열로 정리합니다. 그러면 매매서버-> FEP서버, FEP서버->거래소, 거래소->FEP, FEP->매매서버순으로 정렬하고 각 단위사이의 시간을 산출합니다. 좀더 자세히 구분하려고 하면 매매서버내에 시세시간, 시세이벤트발생히간, 주문이벤스발생시간, 주문이벤트전송시간으로 세분할 수 있습니다. 번거롭지만 어느 부분에 지연이 발생하는지 확인할 수 있습니다.

만약 다른 증권사와 비교하고자 하면 코스콤시세 전문을 이용하는 방법이 있습니다. 코스콤이 제공하는 접속표준서를 보면 IFMSRPD0004라는 인터페이스ID가 있습니다. 증권체결전문입니다. 이중에 18번째 필드를 아래와 같이 설명합니다.

18 최종매도매수구분코드 0 String 1 148 “매도매수구분코드 space : 단일가체결/0 해당없음//1 매도/2 매수

예전에는 거래소 체결을 모아서 체결데이타를 생성하였지만 최근에는 체결건별로 체결데이타를 생성합니다. 체결시간, 체결수량 및 매도매수구분값을 이용하면 “내 주문이 체결된 후 체결데이타로 언제 내려오는지 확인할 수 있습니다.” 위 전문상의 체결시간은 거래소체결시간이기때문에 거래소/FEP를 통해 받은 체결시간과 같습니다.

3 Comments

  1. KDM

    안녕하세요 선생님

    혹시 l2 ptp 연동시에도 switch(config)# ptp source ip X.X.X.X 가 필수로 적용되는지 궁금합니다.

    Reply
    1. smallake (Post author)

      안녕하세요. 제가 글에서도 썼지만 저는 ptp source ip를 사용했습니다. 필수인지 아닌지는 확인하지 못했습니다.

      아마도 해야 하지 않을까요?

      Reply
      1. kdm

        답변 감사합니다.선생님

        Reply

Leave a Comment

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

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.