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