1

Linux 有两种不同的方式来管理共享内存:shm_open()/mmap()shmget()/shmat(). 各自的优缺点是什么?我如何决定为我的应用程序选择哪一个?

4

1 回答 1

0

我问自己同样的问题,我不知道最终答案,但我想我会分享我的基准。

我发现开箱即用的 POSIXshm_open框架比 System V 更快shmget

在我的基准测试中,我从一个进程写入 32 GB 内存并读取相同的 32 GB 内存并进行验证。我使用 ZeroMQ 将所有权令牌从写入器传递给读取器,以保持同步。内存块大小实际上非常小,只有 32KB,但我发现这似乎不是一个速率限制因素,ZeroMQ 的存在也没有太大的不同。

我发现使用POSIX shared memory 的净吞吐量比 System V shared memory 快大约 40%。具体来说,对于 POSIX 共享内存,网络操作(写入 + 读取)以 3.5 GB/s 的持续速率运行,对于 System V 共享内存以 2.5 GB/s 的持续速率运行。

至于为什么这是真的,我不知道。如果您不确定进程和内存的相关性,我还发现这些基准测试有点棘手,尽管无论 CPU 绑定和内存绑定(使用numactl)的任何组合如何,这种速度差异似乎都存在。

于 2014-09-29T21:59:52.897 回答