Linux 有两种不同的方式来管理共享内存:shm_open()/mmap()
和shmget()/shmat()
. 各自的优缺点是什么?我如何决定为我的应用程序选择哪一个?
问问题
285 次
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 回答