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:
- 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.
- 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:
discovery/benchmark/: Benchmark đọc kênh chờdiscovery/trefi_probe.c: Điều tra thời gian cho việc đo chu kỳ làm tươi
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
Giấy phép
Uh oh!
Đã có lỗi khi tải. Xin hãy tải lại trang này.