킹피셔: 시장 품질

킹피셔: 시장 품질

시장의 건전성과 성숙도는 가격과 거래량만으로 추정할 수 없습니다. 시장 참여자와 그들의 관계는…


킹피셔: 시장 품질

이전 FTX 2020년 11월 요약본에 소개됨

시장의 건전성과 성숙도는 가격과 거래량만으로 추정할 수 없습니다. 시장 참여자와 그들의 관계는 해당 산업이 나아갈 방향에 중대한 영향을 미칩니다. 거래소, 주요 시장 조성자(market maker), 일반적인 시장 참여자들의 상호작용이 암호화폐 시장을 어떻게 형성하고 있는지 살펴보겠습니다.

이 글에서는 거래소 매칭 엔진의 물리적 한계, 이것이 광범위한 암호화폐 시장에 미치는 영향, 그리고 암호화폐를 보다 공정하고 효율적인 시장으로 만들 수 있는 몇 가지 제안에 대해 다룰 것입니다.

거래의 물리적 한계

수천 년 동안 인류는 시장을 더욱 탄력적이고, 효율적이며, 끊임없이 빠르게 만들기 위해 노력해 왔습니다. 물류 네트워크에서 온라인 결제 처리 시스템에 이르기까지, 지연 시간(latency) 감소를 위한 추구는 시장 자체만큼이나 오래되었습니다. 산업이 극복할 수 없는 장애물에 직면하면 어떻게 될까요? 실리콘의 발견과 그 응용은 정보 전파 속도를 빛의 속도에 가깝게 끌어올릴 수 있게 해주었습니다. 우리는 그보다 더 빠르게 만들 수는 없습니다.

유로넥스트(Euronext) 매칭 엔진에서 작업하면서, 저는 하드웨어의 물리적 한계에서 최대한의 성능을 끌어내고 더 빠른 매칭 엔진(ME)을 개발하는 방법에 대한 이해를 얻었습니다.

ME는 모든 거래소의 심장입니다. 고도로 숙련된 마라톤 선수는 느리지만 강력한 심장 박동을 가지고 있으며, 이는 많은 일을 할 수 있습니다. 각각의 심장 박동은 조직과 근육에 영양분을 공급하는 데 최고의 효율성과 속도를 제공하도록 최적화되어 있습니다. 마찬가지로, ME는 거래 연산을 효율적이고 신속하게 처리하는 동시에, 결과 정보가 신뢰할 수 있고 탄력적인 방식으로 거래소 인프라의 올바른 부분으로 전달되도록 보장하는 역할을 합니다. 거래소 팀들이 열심히 노력하면서 ME의 지연 시간은 해마다 줄어들고 있지만, 일부 오래된 선두 주자들은 안주하며 매일 더 많은 고객을 잃고 있습니다.

"올라가지 않으면 내려가는 것이다"

올라가기 위해 내려가기: CPU 101 해부하기:

2000년대 중반은 무어의 법칙 시대의 종말을 알렸습니다. 이 시기에는 더 높은 주파수의 하드웨어로 업그레이드하면 자동적으로 성능 향상이 이루어졌습니다. 대신, 업계는 더 많은 실행 유닛(코어)을 추가함으로써 성능 향상을 얻는 모델로 전환했습니다. 하지만 멀티코어 아키텍처를 활용하려면 추가적인 개발 및 테스트 노력이 필요하며, 단순히 더 많은 스레드를 추가하는 순진한 접근 방식은 확장성 기대치에 미치지 못하는 경우가 많습니다. 왜 그럴까요?

"하나의 중앙 처리 장치(CPU)는 한 가지 작업에 매우 능숙하지만, 여러 CPU는 기본적으로 팀으로서 잘 작동하지 않습니다."

CPU는 처리 장치와 메모리 장치로 구성됩니다. 하나의 CPU 코어는 자신의 주파수 속도로 명령어를 실행하도록 구성되어 있습니다. 예를 들어, 3GHz CPU는 각 명령어를 0.333ns(1초 = 1,000,000,000ns)로 처리합니다. 나노미터 단위의 반도체 기술이 물리적 경계를 결정합니다.

현실은 훨씬 더 복잡합니다. 우리는 명령어와 데이터가 이미 CPU 주파수와 동일한 속도로 실행되는 CPU 물리적 레지스터에 저장되어 있다고 가정합니다. 실제로는 명령어와 데이터가 다단계 캐시 메모리 아키텍처(L1/L2/L3)에 저장됩니다. 칩에 CPU 처리 장치에 물리적으로 더 가까울수록 더 빠르고 작습니다. 따라서 L1 캐시가 가장 빠르고 가장 작습니다. 그림 1은 멀티코어 CPU 마이크로아키텍처와 각 캐시 수준의 해당 크기/속도를 보여줍니다.

그림 1: 멀티코어 CPU 마이크로아키텍처

지연 시간이 길어지고 사이클이 사라지는 이유를 이해하려면 멀티코어 CPU 시스템에 적용되는 범용 확장성 법칙(Universal Scalability Law)의 기본 원리를 이해해야 합니다. 확장성에 영향을 미치는 주요 매개변수는 다음과 같습니다.

  • 코어 리소스 경합(Core resources contention): 예를 들어 하이퍼스레딩(hyperthreading)으로 인해 발생합니다. 여러 소프트웨어 스레드가 동시에 동일한 실행 유닛에 접근하려고 하여 처리가 직렬화되고 우선순위가 지정됩니다.
  • 캐시 메모리 경합(Cache memory contention): 운영 체제 컨텍스트 전환 시 동일한 코어가 자체 전용 캐시 메모리(L1/L2)에 대해 경합하거나 문제 크기가 너무 커서 전용 캐시 메모리에 저장될 수 없을 때 발생합니다. 이 현상을 캐시 쓰래싱(cache thrashing)이라고 합니다. 멀티코어에서는 코어 간에 공유되는 L3 캐시(또는 LLC, 마지막 레벨 캐시)에서 캐시 쓰래싱이 발생합니다. 따라서 지연 시간에서 수백 나노초가 손실됩니다. 해결책은 데이터 지역성(data locality)을 개선하여 캐시 내 처리를 개선하고 CPU 코어가 로컬 계산을 수행하도록 유지하면서 메모리 대역폭 활용도를 개선하는 지능형 소프트웨어여야 합니다. 이는 매우 어려운 문제이며 현재 쉬운 해결책은 없습니다.
  • 캐시 일관성(Cache coherency): 소프트웨어 동기화(뮤텍스, 배리어 등)가 있거나 두 코어가 동일한 메모리 영역에 접근할 때 코어 간 원활한 통신을 허용하는 하드웨어 메커니즘입니다. 간단한 캐시 일관성(단일 캐시 라인)은 최소 600 사이클의 비용이 듭니다.

매칭 엔진이 받는 부하

CPU의 한계를 고려하여 거래소는 운영을 관리해야 합니다. 첫째, 거래소는 트레이더의 포지션을 관리해야 합니다. 이는 시장 변동성이 큰 시기에 대규모 청산이 발생할 때 유동성 위험에 노출시킵니다. 거래소는 대규모 청산이 발생할 때 다른 시장 참여자에게 파급 효과가 발생하지 않도록 이러한 포지션 청산을 관리하는 경향이 있습니다. 또한 서비스의 탄력성과 일관성을 보장하기 위해 시장 규칙을 시행하고 거래를 백로그(backlog)해야 합니다.

99번째 백분위수(99th percentile)는 주어진 시간 간격 동안 주어진 작업에 대해 평가된 쿼리의 가장 높은 지연 시간 값 상위 1%를 나타냅니다. 탄력적이고 효율적인 소프트웨어는 광고되는 지연 시간 임계값이 될 99번째 백분위수에 의해 고려될 것입니다. 거래소의 매칭 엔진은 아무리 잘 코딩되었더라도 이러한 지연 시간에 의해 제한되며, 이는 사용자에게 제공되는 총 거래 처리량(throughput)을 제한합니다. 거래소가 초당 거래량에 상한선이 있는 경우입니다.

이는 ME가 관리해야 할 매칭 지침당 수천 건의 연산으로 합산됩니다. 또한 많은 상품에 대한 비즈니스 문의를 처리하고 초당 수백만 건의 메시지를 처리해야 하는 제약 조건도 있습니다.

아키텍처 관점에서 확장성과 안정성을 달성하는 방법은 무엇일까요?

ME는 여러 소스에서 데이터를 결합하는 고도로 상호 연결된 워크플로우 계산 프로필이며, 모듈 간 통신 빈도와 상호 의존성이 높고 동적입니다. 스레드 동기화 및 스케줄링은 동적으로 신속하게 수행되어야 합니다.

반응형 소프트웨어(Reactive software)는 대규모 반응형 마이크로서비스와 세밀한 반응형 애플리케이션(단일 프로세스)을 모두 구축하는 설계 철학이자 패러다임 전환입니다. 비동기 메시지 전달 설계를 기반으로 하며, 처음부터 반응형 소프트웨어를 구축할 수 있게 해주는 수많은 동시성 프로그래밍 모델이 있습니다. 액터 모델(Actor model)은 이러한 검증된 프로그래밍 모드 중 하나입니다.

액터는 개발에서 운영까지의 전체 수명 주기를 지원하는 매우 효율적인 개념입니다. 기능적 개념에 직접 매핑됨으로써 액터는 비즈니스 아키텍처와 기능적 아키텍처 간의 거리를 단축합니다. 그들은 작업을 개발자 간에 분할하기에 충분히 세분화된 수준에서 로직을 캡슐화합니다. 테스트를 위해 직접 사용할 수 있는 개념이며, 관리자가 사용 가능한 하드웨어 및 애플리케이션 부하에 따라 토폴로지를 동적으로 결정할 수 있도록 합니다.

이러한 연산을 수신하는 ME는 필요한 계산을 사용 가능한 CPU 코어에 분배합니다. 코어가 가득 차면 데이터는 상위 캐시 수준, 마더보드 소켓 또는 최악의 경우 RAM으로 다시 전송되어 하드웨어 리소스로 전송됩니다(이는 다른 구성 요소에 도달해야 하므로 비용이 가장 높습니다).

코어가 부하 균형을 위해 동기화할 때마다 "지연 시간 수수료"를 지불합니다. 코어를 추가할수록 데이터가 더 많이 분산될 수 있지만 지연 시간 수수료도 더 많이 지불하게 됩니다. 이 수수료는 기하급수적으로 증가합니다. 이것이 거래소가 단순히 서버를 더 많이 구매하여 확장할 수 없는 주된 이유이며, 또한 성공의 희생양이 될 수 있는 이유이기도 합니다. 지연 시간의 임계점은 엔트로피가 작용하여 데이터를 많은 코어로 분산시키고 코어들이 명령을 실행하기 위해 데이터가 오기를 서로 기다리겠다고 약속할 때 발생합니다.

엔지니어들이 사용하는 전략은 각 코어를 하나의 특정 역할에 할당하고 다른 어떤 작업도 수행하지 않도록 하며, 너무 많은 데이터나 명령어를 받지 않도록 하고, 입력으로부터의 동기화 및 무작위성을 가능한 한 피하는 것입니다. 이를 달성하기 위해 엔지니어들은 연구에 돈을 쓰거나 메모리 할당 및 코어 제어를 관리하는 소프트웨어에 투자해야 합니다. 그리고 특히 CPU 시간의 바이트도 낭비하지 않는 엄격한 엔지니어가 필요합니다.

딜레마:

거래소와 시장 전체는 딜레마에 빠져 있습니다. 즉, 속도와 지연 시간의 한계를 더욱 명확하게 만드는 대가로 부하를 증가시키는 것입니다.

셀 사이드 (Sell side):

셀 사이드(거래소)의 관점에서 볼 때, 엔트로피를 더 잘 처리하기 위한 솔루션을 개발하는 데 많은 비용을 지출합니다. 고객 기반(거래 소프트웨어, 알고리즘 트레이더, 시장 조성자)이 증가함에 따라 발생하는 엔트로피를 포함하여 지연 시간 딜레마를 이해하는 재능 있는 개발자가 필요합니다. 어느 시점에서 설계 한계는 물리 법칙에 의해 도달됩니다. 이 점을 고려할 때, 모든 실수는 누적되어 빠르게 고통스러워질 수 있으며, 이는 새로운 지연 시간 비용을 생성하는 것에 대한 두려움 때문에 혁신이 저해될 때까지 개발 능력을 제한합니다. 거래소는 결국 합법적인 시장 참여자에 의해 분산 서비스 거부(DDoS) 공격과 유사할 수 있는 일로 인해 ME 오작동의 위험을 줄여야 합니다.

이러한 위험을 완화하기 위해 거래소는 속도 제한을 적용하고 비즈니스 기회에 가장 도움이 되는 지침의 우선순위를 정합니다. CPU와 지연 시간은 물리와 수학입니다. 연구, 엄격함, "공정성"의 개념은 인간의 재량에 달려 있습니다. 모두를 느리게 하면 대다수 트레이더에게 시장이 덜 효율적이게 됩니다. 그러면 자원(저수준 코딩 엔지니어, 투입할 자본, 연구팀, 거래량)을 가진 사람들에게 이점을 줍니다. 언급할 가치가 있는 또 다른 점은, 법적 이유로 인해 몇 밀리초 후에 주문을 취소하는 경우라도 모든 작업은 저장되어야 한다는 것입니다. HFT(고빈도 거래) 회사는 거래소에 대부분 낭비되는 리소스를 사용하여 높은 부하를 줍니다.

바이 사이드 (Buy side)

바이 사이드(고객의 관점)에서 볼 때, 무제한 ME는 더 나은 전략, 더 많은 경쟁, 더 효율적인 시장, 거래소 간의 더 나은 차익 거래 기회, 그리고 낮은 거래량 트레이더가 다른 모든 사람과 동일한 속도로 유동성에 접근할 수 있는 더 공정한 시장을 허용합니다.

고객 수가 증가하면 ME는 느려지고 대부분의 트레이더를 배제합니다. 거래소 서버의 지리적 근접 지역에 서버를 구매하는 것은 특정 시장 참여자가 특정 가격 패턴을 보낼 수 있도록 하여 규제 및 거래소 관점에서 특히 중요합니다. 높은 변동성 기간 동안 HFT는 주로 경쟁사의 유동성을 소비하고 비 HFT의 수동 주문을 흡수합니다. 테이커(Takers)는 정보에 입각한 트레이더처럼 행동하는 경향이 있으며, 그들의 주문 흐름은 다른 참여자들에게 유해한 것으로 간주될 수 있습니다.

대부분의 트레이더가 이미 경험한 한 가지 예는 초당 6,000건의 주문 제출 및 취소 속도로 주문을 보내는 HFT 전략이었습니다. 이는 각 호가가 160만 분의 1초보다 짧은 수명을 가진다는 것을 의미합니다. 빛이 약 1,500피트를 이동하는 데 걸리는 시간입니다. 그 거리의 절반보다 더 멀리 있는 사람은 이러한 호가에 대해 체결할 기회가 없습니다. 이것은 거래소와 동일한 데이터 센터에 있는 시장 참여자 덕분에 가능한 호가 채우기(quote stuffing)라고 불리는 흔히 사용되는 전략입니다. 이는 오늘날 공격적인 주문이 거래소에 도달할 때 생성되는 큰 숨겨진 스프레드로 이어집니다.

규제 기관이나 자율 규제의 인센티브를 통해 셀 사이드만이 적용할 수 있는 시장 규칙에 대한 의문이 제기됩니다. HFT 지지자들은 그들이 스프레드를 줄이고 스푸핑(spoofing)과 같은 다른 악의적인 전략의 가능성을 줄여 유동성을 개선한다고 주장할 것입니다.

다른 사람들은 그러한 속도가 불공평하다고 말할 것입니다. 비 HFT는 속도 제한, 통계적 차익 거래 전략, 유령 호가 사이에 끼어들어 소규모 참여자가 이길 가능성을 줄입니다. 고도로 숙련된 참여자 외에도 지난 몇 년 동안 알트코인 퀀토(altcoins quantos)와 같은 새로운 상품이 등장했으며, 이는 이 글을 작성하는 시점에서 가장 우려되는 부분입니다. ICO 열풍과 암호화폐 시장의 유동성 함정에 대한 대부분의 글과 교육은 트레이더들이 이전 Clarens Caraccio의 6월 FTX 요약본에서 자세히 설명한 것처럼 낮은 유동성 현물 코인/토큰 대신 개선된 유동성을 가진 레버리지 상품을 선호하도록 이끌었습니다.

"Inverse"에 롱 포지션을 취하는 것은 "숏" 포지션을 취하는 것보다 더 위험합니다. 가격이 하락함에 따라 포지션은 델타를 점점 더 축적하고 트레이더를 청산 위험에 더 크게 노출시킵니다. 새로운 트레이더 물결은 현물에서 동일한 낮은 유동성을 가진 고도로 레버리지된 상품으로 향하고 있지만, 이번에는 USD 이외의 담보를 사용할 때 "롱" 포지션에서 음의 감마(negative gamma)에 노출됩니다.

시장 조성자는 중립적인 포지션을 추구하며, 테이커 주문 비율은 주로 재고에 따라 달라집니다. 변동성이 높고 적절한 인센티브가 없으면 통제된 강도로 약한 지정가 주문장부에서 재고를 최적으로 청산하는 데 신경 쓰지 않을 것입니다. 그들은 잠재적인 손실을 피하기 위해 정보에 입각한 트레이더를 상대로 유동성을 철회합니다. 레버리지 참여자는 결국 기초 지수의 주문장이 철회되었기 때문에 거래소의 위험 엔진에 의해 포지션이 제거됩니다.

비트코인 및 알트코인 시장은 지연 시간, 스프레드, 담보 요구 사항 또는 수수료 구조에 관한 어떠한 일반적인 "공정한 규칙"으로도