#ipc #memory #shmem #memfd

shmem-ipc

Linux上最高性能和最低延迟的不可信IPC

3个版本 (破坏性更新)

0.3.0 2022年11月22日
0.2.0 2021年2月16日
0.1.0 2021年2月8日

内存管理 中排名第356

Apache-2.0/MIT

34KB
511

crates.io API documentation license

在Linux上实现最高性能和最低延迟的不可信IPC。

何时使用这个Rust crate?

  • 性能或延迟至关重要,且
  • 您运行Linux。

一个典型用例可能是音频/视频流。

不需要最高性能和最低延迟,并希望有一个具有序列化和许多内置功能的更高级协议?尝试D-Bus

此外,设置unix套接字更容易,并且并不慢多少(见下文基准测试)。

对于Linux,此crate使用memfd密封来确保不可信进程之间的安全性,并使用eventfd进行ringbuffer信号处理以实现最佳性能。这两个特性是Linux特有的。

入门

您可能想从sharedring模块开始,该模块在不可信进程之间设置ringbuffer(它是一个无等待/无锁、有界、SPSC队列)。另一个有用的函数是mem::write_once,用于一次写入数据并在之后使其可供读取的场景。`mem`和`ringbuf`模块包含可能在其他用例中有用的构建块。

使用基于memfd的共享内存的缺点是您需要通过传输文件描述符、使用其他通信方式来设置它。使用D-Bus将是做这件事的标准方式——使用unix套接字也是可能的。

examples目录中还有一个客户端/服务器示例,可以帮助您入门。祝您玩得开心!

基准测试

Sharedring vs unix sockets vs D-Bus 注意对数刻度:对于64K数据包,sharedring比unix套接字快三倍,比D-Bus快六十倍。(D-Bus是一个更高级的协议,因此这种比较在某种程度上是在比较苹果和橘子。)

许可

代码是Apache 2.0 / MIT双许可。除非明确说明,否则假设所有通过Pull Requests、讨论或问题提交的代码都拥有此许可。

依赖项

~2.5MB
~52K SLoC