مرجع: Developing High-Frequency Trading Systems

مقدمه

در فصل ششم، تکنیک‌های سطح سیستم‌عامل و ساختارهای بدون قفل را بررسی کردیم. در این فصل، به بررسی پیشرفته‌ترین راهکارهای سخت‌افزاری و نرم‌افزاری برای شتاب‌دهی تبادل داده، حذف پشته شبکه کرنل، انتقال امواج در فضا و اندازه‌گیری زمان در مقیاس نانوثانیه می‌پردازیم.

مباحث محوری این فصل عبارتند از:

  • مقایسه عملکردی فضای کاربر و هسته (Kernel Space vs User Space)
  • تکنولوژی انقلابی دور زدن کرنل (Kernel Bypass) و کارت‌های شبکه فوق‌سریع
  • فایل‌های نگاشت‌شده در حافظه (Memory-Mapped Files / mmap) و کاربرد در IPC
  • تکامل کابل‌ها: از فیبر نوری شیشه‌ای تا فیبر توخالی (Hollow Fiber) و امواج مایکروویو
  • معماری لاگ‌گیری و محاسبات آماری بلادرنگ بدون افت سرعت در مسیر بحرانی
  • روش‌های سنجش دقیق تاخیر زمانی (Tick-to-Trade) با دستورات پردازنده و تایم‌استمپ‌های مسیر رفت‌وبرگشت

۱. مقایسه فضای هسته و فضای کاربر (Kernel Space vs User Space)

هسته سیستم‌عامل (Kernel) کنترل تمام منابع فیزیکی سخت‌افزار، حافظه و دستگاه‌ها را در اختیار دارد. کدهای کرنل باید به شدت پایدار و قابل‌اعتماد باشند. در مقابل، فرآیندهای عادی نرم‌افزاری در فضای کاربر (User Space) با دسترسی‌های محدود اجرا می‌شوند:

شکل ۷.۱: ارتباط میان کامپوننت‌های فضای کاربر و فضای هسته

معضل عملکردی پشته استاندارد شبکه لینوکس:

هنگامی که یک بسته داده از صرافی به کارت شبکه می‌رسد:

  1. ابتدا یک وقفه سخت‌افزاری (Interrupt) به پردازنده فرستاده می‌شود.
  2. پردازنده وارد حالت کرنل (Kernel Mode) شده و تعویض زمینه صورت می‌گیرد.
  3. درایور بسته را از کارت شبکه به بافرهای کرنل (sk_buff) کپی می‌کند.
  4. بسته از لایه‌های پروتکلی متعدد TCP/IP لینوکس عبور می‌کند.
  5. برنامه معاملاتی با فراخوانی تابع recv() بسته را مجدداً از فضای کرنل به فضای کاربر کپی می‌کند.
    این کپی‌های پی‌درپی حافظه و سوئیچ‌های مکرر بین فضای کاربر و کرنل، بین ۱.۵ تا ۱۰ میکروثانیه زمان تلف می‌کنند که در دنیای HFT غیرقابل قبول است!

۲. فناوری انقلابی دور زدن کرنل (Kernel Bypass)

برای رهایی از تاخیرهای مرگبار پشته شبکه لینوکس، راهکار طلایی صنعت HFT استفاده از Kernel Bypass است. این تکنیک کارت شبکه را مستقیماً به برنامه معاملاتی در فضای کاربر متصل می‌کند و پشته کرنل را کاملاً دور می‌زند!

دو پایه بنیادین معماری Kernel Bypass:

  1. کپی صفر (Zero-Copy): با بهره‌گیری از قابلیت Direct Memory Access (DMA)، کارت شبکه بسته‌های داده را مستقیماً در بافر حافظه نرم‌افزار معاملاتی در فضای کاربر می‌نویسد؛ هیچ کپی واسطه‌ای رخ نمی‌دهد.
  2. پیمایش فعال پردازنده (User-Space Polling / Busy-Waiting): به جای تکیه بر وقفه‌های کرنل، یک هسته اختصاصی پردازنده به طور مداوم و حلقه‌وار کارت شبکه را بررسی می‌کند (Polling) تا به محض دریافت اولین بایت بسته، آن را در کسری از نانوثانیه پردازش کند.

مقایسه آماری تاخیر با و بدون Kernel Bypass:

  • ارسال و دریافت بسته‌های UDP معمولی با کرنل لینوکس: ۱.۵ تا ۱۰ میکروثانیه.
  • ارسال و دریافت بسته‌ها با فناوری Kernel Bypass: تنها ۰.۵ تا ۱.۵ میکروثانیه!
    این به معنای کاهش تا ۷۰ الی ۹۰ درصدی تاخیر و حذف کامل نوسان تاخیر (Jitter) است.

فناوری‌ها و استانداردهای پیشرو در صنعت:

  • Solarflare OpenOnload و EF_VI: استاندارد طلایی وال‌استریت بر روی کارت‌های شبکه سری XtremeScale سولارفلر (AMD). با کتابخانه OpenOnload، بدون نیاز به تغییر کدهای سوکت برنامه، تمام ارتباطات شبکه مستقیماً در سطح سخت‌افزار شتاب‌دهی می‌شوند.
  • DPDK (Data Plane Development Kit): فریم‌ورک متن‌باز ارائه‌شده توسط اینتل برای پردازش سریع بسته‌های شبکه در فضای کاربر.

۳. فایل‌های نگاشت‌شده در حافظه (Memory-Mapped Files - mmap)

در سیستم‌های معمولی، کار با فایل از طریق فراخوان‌های سیستمی read() و write() انجام می‌شود که داده را میان دیسک و بافرهای کرنل جابه‌جا می‌کند. با استفاده از فراخوان سیستمی mmap()، فایل مستقیماً به عنوان یک آرایه در فضای آدرس مجازی برنامه مپ می‌شود.

انواع فایل‌های نگاشت‌شده در حافظه:

  1. نگاشت‌های پایدار (Persisted Memory-Mapped Files): تغییرات ایجادشده در حافظه رم، در پس‌زمینه توسط سیستم‌عامل روی دیسک فیزیکی ذخیره می‌شوند.
  2. نگاشت‌های ناپایدار (Non-Persisted Memory Maps): فایلی روی دیسک ایجاد نمی‌شود؛ بلکه صرفاً تکه‌ای از رم مشترک میان چند فرآیند مپ می‌شود که سریع‌ترین بستر برای ارتباطات بین‌فرآیندی (IPC - Inter-Process Communication) بدون نیاز به سوکت‌های شبکه یا لوله‌ها (Pipes) است.

مزایای mmap در HFT:

  • دسترسی تصادفی سریع (Fast Random Access): دسترسی به هر نقطه از داده با سرعت دسترسی به حافظه رم بدون نیاز به عملیات سنگین Seek دیسک.
  • بارگذاری تنبل (Lazy Loading): صفحات داده تنها زمانی از دیسک خوانده می‌شوند که برنامه به آن‌ها ارجاع دهد.

۴. رقابت برای سرعت نور: فیبر نوری، فیبر توخالی و مایکروویو

در فواصل میان‌شهری (مثلاً فاصله ۱۲۰۰ کیلومتری میان بورس سهام نیویورک در نیوجرسی و بورس مشتقات شیکاگو CME)، تفاوت میلی‌ثانیه‌ها تعیین‌کننده برنده است:

۱. کابل‌های فیبر نوری استاندارد (Standard Glass Fiber)

  • نور درون رشته‌های شیشه‌ای سیلیس حرکت می‌کند. به دلیل ضریب شکست شیشه ()، سرعت حرکت نور در شیشه حدود ۲۰۰٬۰۰۰ کیلومتر بر ثانیه است (حدود ۳۰٪ کندتر از سرعت نور در خلاء!).

۲. کابل‌های فیبر نوری توخالی (Hollow-Core Fiber)

  • یکی از جدیدترین نوآوری‌ها در فواصل کوتاه (چند صد متری دیتاسنتر تا دکل‌ها). نور درون کانال هوای مرکزی فیبر حرکت می‌کند. ضریب شکست هوا بسیار نزدیک به ۱ است و سرعت نور به ۹۹.۷٪ سرعت نور در خلاء (نزدیک به ۳۰۰٬۰۰۰ کیلومتر بر ثانیه) می‌رسد که صدها نانوثانیه تاخیر را حذف می‌کند.

۳. شبکه‌های مایکروویو (Microwave & Millimeter Wave)

  • امواج رادیویی در خط دید مستقیم (Line of Sight) میان دکل‌های مخابراتی در هوا با سرعت نور در خلاء منتشر می‌شوند.
  • مسیر نیویورک به شیکاگو که با فیبر نوری حدود ۱۳ میلی‌ثانیه زمان رفت‌وبرگشت (RTT) داشت، با احداث دکل‌های مایکروویو اختصاصی توسط شرکت‌های HFT به زیر ۸ میلی‌ثانیه کاهش یافت!

چالش‌های امواج مایکروویو

پهنای باند امواج مایکروویو به شدت محدود است و در اثر بارندگی و طوفان دچار میرایی و افت سیگنال می‌شود. به همین دلیل سیستم‌های HFT منحصراً بسته‌های کوچک و سفارش‌های فوق حیاتی را روی مایکروویو ارسال کرده و دیتاهای حجیم‌تر را روی فیبر نوری نگه می‌دارند.


۵. معماری لاگ‌گیری و محاسبات آماری بلادرنگ

لاگ‌گیری و ثبت رخدادها برای عیب‌یابی و انطباق قانونی ضروری است؛ اما نوشتن لاگ روی دیسک یا کنسول به شدت کند است و اگر در مسیر تصمیم‌گیری ترید قرار گیرد، سیستم را زمین‌گیر می‌کند.

راهکار معماری لاگ‌گیری کم‌تاخیر در HFT:

  1. عدم مسدودسازی مسیر بحرانی (Non-Blocking Logging): نخ معاملاتی پیام لاگ را به یک صف حلقوی بدون قفل (SPSC Lock-Free Queue) در رم تحویل می‌دهد و فوراً به کار ترید بازمی‌گردد.
  2. نخ اختصاصی لاگ در پس‌زمینه (Dedicated Logging Thread): یک ترد مجزا که روی هسته‌ای غیربحرانی پین شده است، پیام‌ها را از صف برداشته و آن‌ها را به صورت دسته‌ای (Batch) در فایل یا دیتابیس می‌نویسد.
  3. محاسبات آماری آنلاین (Online Statistics): محاسبه میانگین تاخیرها، نرخ اجرای سفارش‌ها و سود/زیان لحظه‌ای سبد سهام.

۶. روش‌ها و ابزارهای سنجش کارایی در HFT

ابزارهای اندازه‌گیری کارایی در HFT باید خود دارای کمترین سربار محاسباتی (Near-Zero Overhead) و بیشترین دقت نانوثانیه‌ای باشند.

ابزارهای لینوکس:

  • دستور time: محاسبه زمان CPU، زمان سیستم و زمان کاربر.
  • ابزار perf: استفاده از شمارنده‌های سخت‌افزاری پردازنده (PMU) برای سنجش چرخه‌های CPU و بررسی خطاهای کش (Cache Misses) و پیش‌بینی انشعاب (Branch Mispredictions).
  • ابزارهای valgrind و cachegrind: شبیه‌سازی کش پردازنده در محیط توسعه.
  • سامانه LTTng: ردیابی بلادرنگ رویدادهای کرنل لینوکس.

شرایط ایزوله‌سازی محیط بنچمارک HFT:

  • خاموش کردن Hyper-Threading برای جلوگیری از تقسیم منابع هسته.
  • غیرفعال‌سازی صرفه‌جویی انرژی پردازنده: غیرفعال کردن حالات C-States و P-States در لینوکس و قفل کردن پردازنده روی بالاترین فرکانس توربو به صورت ثابت.
  • خاموش کردن ASLR: غیرفعال‌سازی موقت تصادفی‌سازی چیدمان حافظه (Address Space Layout Randomization) در زمان تست برای تضمین رفتار قطعی و تکرارپذیر آدرس‌ها.
  • دستور مستقیم پردازنده rdtsc: استفاده از دستور اسمبلی x86 برای خواندن مستقیم شمارنده چرخه‌های کلاک پردازنده (Time Stamp Counter) با کمترین سربار، در کنار هدر <chrono> در مدرن ++C.

سامانه سنجش تاخیر رفت‌وبرگشت (Tick-to-Trade Measurement System)

تصاویر زیر معماری استاندارد اندازه‌گیری تاخیر نقطه به نقطه در یک اکوسیستم کامل HFT را نشان می‌دهند:

شکل ۷.۲: گام‌های مسیر رفت‌وبرگشت از صرافی تا شرکت معاملاتی و بازگشت به صرافی

شکل ۷.۳: نقاط ثبت برچسب زمانی (t1 تا t10) در طول مسیر بحرانی

کالبدشکافی تایم‌استمپ‌های مسیر بحرانی ( تا ):

  • : خروج بسته داده بازار از سوئیچ صرافی
  • : ورود بسته به سوئیچ شبکه شرکت معاملاتی
  • : ورود بسته به کارت شبکه سرور HFT (ثبت توسط Hardware Timestamping در پورت کارت شبکه)
  • : دریافت بسته توسط درگاه با تکنولوژی Kernel Bypass
  • : پردازش در دفترچه‌ساز (Book Builder) و به‌روزرسانی دفترچه
  • : تصمیم‌گیری در موتور استراتژی و صدور سیگنال معامله
  • : اعتبارسنجی ریسک در OMS و تحویل به درگاه سفارشات
  • : خروج بسته سفارش از پورت فیزیکی کارت شبکه به سمت بورس
  • : رسیدن سفارش به سوئیچ صرافی
  • : ورود سفارش به موتور تطبیق صرافی (Matching Engine)

تحلیل تفکیکی تاخیرها:

  • تاخیر نرم‌افزاری خالص در سرور:
  • تاخیر کارت شبکه و درایور:
  • تاخیر فیزیکی کابل و شبکه بیرونی:
  • کل تاخیر رفت‌وبرگشت (Tick-to-Trade RTT):

خلاصه و جمع‌بندی فصل هفتم (Summary)

در این فصل، مباحث حیاتی معماری و شتاب‌دهی را به پایان رساندیم:

  1. استفاده از Kernel Bypass (Solarflare / OpenOnload) برای رساندن تاخیر شبکه به زیر ۱ میکروثانیه.
  2. بهره‌گیری از فایل‌های مپ‌شده در رم (mmap) برای سریع‌ترین IPC ممکن.
  3. تکامل خطوط ارتباطی با فیبرهای توخالی (Hollow-Core) و امواج مایکروویو میان دیتاسنترها.
  4. جداسازی مسیر لاگ‌گیری از مسیر بحرانی ترید به کمک صف‌های بدون قفل.
  5. استقرار زیرساخت سنجش نانوثانیه‌ای Tick-to-Trade با ثبت زمان‌های تا .

با پایان فصل هفتم، «بخش دوم کتاب» (معماری سیستم‌های HFT) با موفقیت کامل به پایان رسید.

در بخش سوم کتاب (Implementation of an HFT System)، وارد هیجان‌انگیزترین مرحله یعنی کدنویسی واقعی با ++C، جاوا، پایتون و تراشه‌های سخت‌افزاری FPGA خواهیم شد!