如何在Linux中选择共享内存接口?

时间:2013-06-05 13:37:32

标签: linux shared-memory

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

1 个答案:

答案 0 :(得分:0)

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

我发现开箱即用,POSIX shm_open框架比系统V shmget更快。

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

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

为什么这是真的,我不知道。如果你没有确定过程和内存的亲和力,我也发现这些基准有点滑,虽然这种速度差异似乎存在,无论CPU绑定和内存绑定的任何组合(使用numactl)。 / p>