Plasma共享内存对象存储介绍

Posted by Tenghuan He on December 8, 2017

plasma是一个高性能的共享内存存储,最初起源于ray项目,后来被贡献给了Apache Arrow项目并成为其中的一部分。

我们先看看plasma最初版本的代码长什么样子,执行下面的命令

git clone https://github.com/ray-project/ray.git
cd ray
git checkout 97087b079177f6617d242d954fbccac208b369b5
make
cd build

build目录下,可以看到exampleplasma_store两个可执行文件,其中plasma_store是服务器端程序,example则用于演示如何从客户端调用共享内存对象服务。

首先在在当前终端窗口启动服务器程序:

➜  build git:(97087b0) ✗ ./plasma_store -s /tmp/plasma_socket
[INFO] (src/plasma_store.c:273) starting server listening on /tmp/plasma_socket

其中-s用于指定一个套接字名称

接下来,在另一个终端中执行:

./example -s /tmp/plasma_socket -g

-g表示获取事先指定好object_id的内存对象,执行之后我们会发现程序卡住不会有任何输出,因为要获取的对象此时在plasma store并不存在。

这时候再打开另外一个终端并执行:

./example -s /tmp/plasma_socket -c -f

其中-c表示创建内存对象,-f表示通知当前正在等待的客户端对象可用,这个时候前面的get程序收到通知并获取对象,然后就会正常结束并退出。