Skip to content
tinAI
Go back

GitHub - LaurieWired/tailslayer: Thư viện giảm độ trễ đuôi trong việc đọc RAM

Bài gốc: GitHub - LaurieWired/tailslayer: Library for reducing tail latency in RAM reads

Tác giả: Unknown

Ngày đăng: Dịch ngày:

TL;DR

Tailslayer là thư viện C++ giúp giảm độ trễ đuôi khi đọc RAM bằng cách sao chép dữ liệu qua các kênh DRAM độc lập. Nó hoạt động trên AMD, Intel và Graviton, cung cấp kết quả nhanh nhất với cơ chế đọc chờ. Dev nên quan tâm vì tăng hiệu quả đọc dữ liệu.

Tailslayer

Tailslayer là một thư viện C++ giảm độ trễ đuôi trong việc đọc RAM do các đợt làm tươi DRAM gây ra.

Nó sao chép dữ liệu qua nhiều kênh DRAM độc lập với lịch trình làm tươi không liên quan bằng việc sử dụng các chuyển đổi kênh ẩn, hoạt động trên cả AMD, Intel và Graviton. Khi có yêu cầu, Tailslayer sẽ thực hiện đọc chờ qua tất cả các bản sao, cho phép công việc được hoàn thành với kết quả phản hồi trước tiên.

Cách sử dụng

Mã thư viện có sẵn ở hedged_reader.cpp và ví dụ sử dụng thư viện có ở tailslayer_example.cpp. Để dùng, sao chép thư mục include/tailslayer vào dự án của bạn và #include <tailslayer/hedged_reader.hpp>. Thư viện hiện tại hoạt động với hai kênh (sẽ có cập nhật thêm!), nhưng có sẵn chế độ N-way đầy đủ trong benchmark.

Bạn cung cấp loại giá trị và hai hàm làm tham số mẫu:

  1. Hàm tín hiệu: Thêm vòng lặp chờ tín hiệu ngoài. Quyết định khi nào đọc. Trả về chỉ số cần đọc, và việc đọc sẽ được thực hiện ngay lập tức.
  2. Hàm làm việc cuối cùng: Nhận giá trị ngay sau khi được đọc. Thêm mã xử lý giá trị mong muốn vào đây.
#include <tailslayer/hedged_reader.hpp>

[[gnu::always_inline]] inline std::size_t my_signal() {
    // Chờ sự kiện của bạn, sau đó trả về chỉ số để đọc
    return index_to_read;
}

template <typename T>
[[gnu::always_inline]] inline void my_work(T val) {
    // Sử dụng giá trị
}

int main() {
    using T = uint8_t;
    tailslayer::pin_to_core(tailslayer::CORE_MAIN);

    tailslayer::HedgedReader<T, my_signal, my_work<T>> reader{};
    reader.insert(0x43);
    reader.insert(0x44);
    reader.start_workers();
}

Tham số có thể được truyền tới bất kỳ hàm nào qua ArgList:

tailslayer::HedgedReader<T, my_signal, my_work<T>,
    tailslayer::ArgList<1, 2>,   // tham số cho hàm tín hiệu
    tailslayer::ArgList<2>       // tham số cho hàm làm việc cuối cùng
> reader{};

Bạn cũng có thể tùy chọn truyền vào một offset kênh khác, bit kênh, và số lượng bản sao cho hàm dựng. Lưu ý: Mỗi lần chèn sẽ sao chép phần tử N lần, với N là số bản sao. Nó thực hiện công việc tính toán địa chỉ ở phần sau, cho phép tailslayer hoạt động như vector chờ sử dụng các chỉ số logic. Ngoài ra, mỗi bản sao được ghim vào một lõi riêng biệt, và sẽ hoạt động trên lõi theo hàm tín hiệu đến khi việc đọc xong.

Xây dựng ví dụ

make
./tailslayer_example

Benchmark và thời gian tạo đột biến

Thư mục discovery/ chứa mã hỗ trợ dùng để mô tả hành vi làm tươi DRAM:

cd discovery/benchmark
make
sudo chrt -f 99 ./hedged_read_cpp --all --channel-bit 8

Về thư viện

Thư viện này dùng để giảm độ trễ đuôi trong việc đọc RAM.

Tài nguyên

Readme

Giấy phép

Apache-2.0 license

Uh oh!

Đã có lỗi khi tải. Xin hãy tải lại trang này.

Ngôi sao

357 stars


Read Original (EN) Quay lại Newsletter