3 个版本 (稳定)

1.0.1 2024 年 2 月 17 日
1.0.0 2024 年 2 月 8 日
0.1.3 2023 年 10 月 28 日

152缓存 中排名

每月 39 次下载

MIT/Apache

68KB
1.5K SLoC

TMFAlloc: Rust 的事务内存映射文件分配器

POST++ 启发的交易内存映射文件分配器。允许将数据表示和存储层合并为一个层。可以用作固定模式的客户端缓存、嵌入式应用程序数据存储等。

特性

  • 文件支持的内存映射存储。
  • 实现 std::alloc::Allocator 特征,因此可以将常规 std::collections::* (除 Hash* 外),std::boxed::Box 等. 容器存储在文件中并从文件中检索。
  • 多线程代码中的单写多读。
  • 写事务利用内存页面保护和写时复制日志文件。
  • 存储具有用户定义的 Root 类型泛型参数,以存储所有应用程序特定的参数、集合等。
  • 存储文件由 flock 保护,因此可以同时进行进程访问。
  • 分配所有同样大小的块中地址最低的最小但适合的空闲块。
  • 平均分配和释放成本是 O(log(空闲块数量)) (加上可能的文件操作成本)。
  • 允许分配区域扩展。
  • 在 Linux 和 Windows 上运行。
  • 在 32 位和 64 位 CPU 上运行。

当前限制的注意事项

  • 不要在父进程和 fork 子进程中同时使用相同的存储 Holder
  • 在非标准使用的情况下,无法保证避免指向未映射存储内存的悬空指针。
  • 存储初始化后无法更改内存映射地址。因此,建议在存储初始化时明确指定内存映射地址。
  • 内存分配量子在32位或64位架构上分别为32或64字节,这可能会被认为是浪费的。

1.0.1版本的新功能

  • tmfalloc::Allocator::{allocate, deallocate, grow, shrink}现在如果当前线程没有为适当的存储地址空间打开写事务,则会触发panic。这是为了防止可能的泄露分配器的滥用。
  • tests::allocator_leak_should_panic用于测试这个panic。

待办事项列表

  • 并发线程访问测试以检测竞争条件。
  • 64字节的分配量子可能太多。两个包含空闲块的红黑树可能太慢。有什么建议可以提高这一点吗?
  • 在信号处理器中通过主文件页mlock而不是通过日志文件立即fsync来增加写入吞吐量和降低延迟。
  • 100%代码行测试覆盖率。如何收集文档测试的覆盖率?
  • 通过(重新)使用已提供的指针在(去/重新)分配时减少对红黑树的遍历。

许可协议

Apache License v2.0MIT License

作者和反馈

Vladimir Voznesenskiy <[email protected]>。寻找Rust工作。

欢迎反馈。如果您需要更多测试等,请发邮件给我。

依赖项

~2–41MB
~631K SLoC