This guide targets developer environments without RDMA hardware and uses UCX over TCP for connectivity. The goal is:
- Verify
import priskvworks (Python client is installed) - Connect using
PriskvClientto a runningpriskv-server - Optionally validate end-to-end
set/get
apt-get update
apt-get install -y \
git gcc make cmake \
librdmacm-dev rdma-core libibverbs-dev \
libncurses5-dev libmount-dev libevent-dev libssl-dev \
dpkg-dev debhelper \
pkg-config \
python3-pybind11 python3-dev python3-pip \
libonig-dev libhiredis-dev liburing-dev \
libucx-dev libucx0python3 -m venv .venv
source .venv/bin/activate
pip3 install pybind11 yapf==0.32.0If you are running as root inside a container, sudo is usually not required.
cd /PrisKVIf the repository uses submodules (e.g., json-c), initialize them:
git submodule update --init --recursiveRecommended: build everything once, then rebuild server if needed:
cd /PrisKV
makeOr build only the server (preferred if build without RDMA):
cd /PrisKV
make serverIf you use a virtual environment (recommended), activate it first:
source .venv/bin/activate
pip install -U pip setuptools wheelcd /PrisKV
make all
cd pypriskv
pip install --no-build-isolation -v -e .cd /PrisKV
make all
cd pypriskv
python3 setup.py build_ext bdist_wheel
pip install ./dist/*.whlMake sure both server and client use the same transport configuration:
PRISKV_TRANSPORT=ucxUCX_TLS=tcp- If using direct mode (no Redis meta service):
PRISKV_CLIENT_DIRECT_MODE=y
Example:
export PRISKV_TRANSPORT=ucx
export UCX_TLS=tcp
export PRISKV_CLIENT_DIRECT_MODE=yOptional debugging:
export PRISKV_LOG_LEVEL=debugsource .venv/bin/activate
cd /PrisKV
export PRISKV_TRANSPORT=ucx
export UCX_TLS=tcp
export PRISKV_CLIENT_DIRECT_MODE=y
export PRISKV_USE_SHM=n
./server/priskv-server -a 127.0.0.1 -p 6379 --acl anyExpected server log includes:
UCX: <...> ready
Activate your venv:
source .venv/bin/activateThen run a minimal connectivity check:
export PRISKV_TRANSPORT=ucx
export UCX_TLS=tcp
export PRISKV_CLIENT_DIRECT_MODE=y
python - <<'PY'
import priskv
c = priskv.PriskvClient("127.0.0.1", 6379, "kvcache-redis")
print("connected")
c.close()
print("closed")
PYOptional: validate set/get:
python - <<'PY'
import priskv
c = priskv.PriskvClient("127.0.0.1", 6379, "kvcache-redis")
print("setstr:", c.setstr("k1", "v1", 2000))
print("getstr:", c.getstr("k1"))
c.close()
PY- Successful
import priskvindicates the Python extension is built/installed correctly. - Server logs show
UCX ... readyindicates UCX transport is initialized. - Client logs show
establishedindicates handshake/connection succeeded. - If
set/gethangs, investigate the end-to-end request/response path:- server response generation
- client response receive callback
- protocol struct decoding and completion-info handling