1 điểm bởi GN⁺ 2024-07-09 | 1 bình luận | Chia sẻ qua WhatsApp

Các mẫu thiết kế cho ứng dụng C++ độ trễ thấp

  • Tác giả: Paul Bilokon, Burak Gunduz
  • Ngày gửi: 8 tháng 9, 2023
  • Chủ đề: Tối ưu mã độ trễ thấp, đặc biệt tập trung vào các hệ thống giao dịch tần suất cao (HFT)

Đóng góp chính

  • Xây dựng kho mã lập trình độ trễ thấp: Hướng dẫn thực tiễn, bao gồm benchmark thống kê nghiêm ngặt
  • Tối ưu chiến lược arbitrage thống kê trung lập thị trường: Cải thiện đáng kể về tốc độ và khả năng sinh lợi
  • Triển khai mẫu Disruptor bằng C++: Hiệu năng tốt hơn các phương pháp xếp hàng truyền thống

Chỉ số đánh giá

  • Tốc độ
  • Mức độ tận dụng cache
  • Ý nghĩa thống kê, v.v.

Công nghệ chính

  • Làm nóng cache: Giảm độ trễ bằng cách khởi tạo cache trước
  • Constexpr: Cải thiện hiệu năng thông qua đánh giá hằng số tại thời điểm biên dịch

Hướng đi tương lai

  • Mở rộng kho mã
  • Kiểm thử các thuật toán giao dịch đã tối ưu trong môi trường giao dịch thời gian thực
  • Tích hợp mẫu Disruptor với các thuật toán giao dịch để benchmark toàn diện hệ thống

Độc giả mục tiêu

  • Các nhà nghiên cứu học thuật và người làm thực tiễn trong ngành

Tóm tắt của GN⁺

Bài báo này đề cập đến các mẫu thiết kế nhằm cải thiện hiệu năng của các ứng dụng độ trễ thấp, đặc biệt là hệ thống giao dịch tần suất cao. Kho mã lập trình độ trễ thấp và việc triển khai mẫu Disruptor sẽ là hướng dẫn hữu ích cho người làm thực tiễn. Các kỹ thuật như làm nóng cache và Constexpr đóng góp lớn vào việc giảm độ trễ. Bài báo này sẽ rất hữu ích với những ai quan tâm đến tối ưu hiệu năng.

1 bình luận

 
GN⁺ 2024-07-09
Ý kiến trên Hacker News
  • Đây là phần giới thiệu ngắn gọn về chủ đề

  • Sinh viên đại học đã biết các yếu tố tối ưu hiệu năng cơ bản

    • Họ học các khái niệm cơ bản như dự đoán nhánh, tính nhất quán bộ nhớ đệm và instruction cache
  • Thật ngạc nhiên khi bài viết không đề cập đến false sharing, một nguyên nhân làm giảm hiệu năng

  • Cũng ngạc nhiên khi không đề cập đến các thuộc tính gợi ý tối ưu như [[likely]], [[unlikely]]

  • Không bàn đến các yếu tố tối ưu hiệu năng nâng cao

    • Như các IO API cụ thể, synchronization primitive, cơ chế IPC, compiler intrinsic, v.v.
  • Điều mà lập trình viên low-latency cần là sự cảnh giác với các cấp phát, sao chép không cần thiết, v.v.

    • Cần có thói quen tìm ra các yếu tố làm giảm hiệu năng thông qua benchmark
  • Khi viết máy chủ low-latency, có lúc nhận ra thao tác vector IO chậm hơn việc sao chép các đối tượng nhỏ vào một buffer liên tiếp

    • Nhấn mạnh rằng không có chuyện sao chép là miễn phí
  • Kết quả kiểm thử cung cấp t-statistic và p-value

    • t-statistic thể hiện kết quả kiểm định unit root của phần dư
    • p-value cung cấp xác suất giả thuyết không của kiểm định là đúng
  • Đoạn này có vẻ như được viết bằng LLM

  • Ví dụ phân tích giá đóng cửa mỗi ngày một lần trong 5 năm và tính spread với độ trễ 65 micro giây là khá kỳ lạ

    • Không tính thống kê trong inner loop
    • 65 micro giây là quá chậm đối với inner loop
    • Có vẻ đây là ví dụ để luyện các kỹ thuật tối ưu hóa
  • Chia sẻ một implementation sàn giao dịch chứng khoán viết bằng C++

    • Sử dụng mẫu LMAX disruptor
    • Đang định viết lại bằng Rust
    • Trong Rust, quản lý bộ nhớ và dependency dễ hơn
  • Đã viết một thư viện logging C++

    • Tương tự LMAX disruptor
    • Được dùng trong cộng đồng HFT
    • Cho phép logging chi tiết mà không làm giảm hiệu năng
    • Giải quyết vấn đề đồng nghiệp không ghi log các thông tin quan trọng vì lo ngại giảm hiệu năng
  • Hiệu quả của compile-time dispatch đến từ việc quyết định lời gọi hàm được thực hiện ở giai đoạn biên dịch

    • Nếu compiler có thể xác định tĩnh hàm sẽ được gọi, nó có thể inline trực tiếp mã của hàm đó
    • Loại bỏ toàn bộ overhead của lời gọi hàm và cho phép tối ưu thêm
  • Chia sẻ tài liệu bài nói tại CppCon 2017

    • Chủ đề là khi micro giây dài như vĩnh cửu
    • Nếu là lập trình viên chuyên nghiệp thì nên xem toàn bộ tài liệu
  • Đặt câu hỏi liệu có thực sự cần sự tồn tại của giao dịch tần suất cao hay không

    • Mọi người phàn nàn Bitcoin lãng phí năng lượng, nhưng giao dịch tần suất cao lại tạo ra tác động tiêu cực thuần túy cho xã hội