README: architectures section rewritten without test measurements
CI / unittests (ubuntu-24.04) (push) Canceled after 0s
CI / unittests (ubuntu-24.04-arm) (push) Canceled after 0s
CI / pycodestyle (push) Canceled after 0s
CI / build_docs (push) Canceled after 0s
CI / docker (ubuntu-24.04) (push) Canceled after 0s
CI / docker (ubuntu-24.04-arm) (push) Canceled after 0s
CI / integration (leveldb, ubuntu-24.04) (push) Canceled after 0s
CI / integration (leveldb, ubuntu-24.04-arm) (push) Canceled after 0s
CI / integration (rocksdb, ubuntu-24.04) (push) Canceled after 0s
CI / integration (rocksdb, ubuntu-24.04-arm) (push) Canceled after 0s

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
davideandClaude Sonnet 5.5 committed 2026-10-25 11:32:04 +01:00
1 parent b53f9fdf5b
commit be689666cd
1 file changed
+11 -31
+11 -31
View File
@@ -54,41 +54,21 @@ describes a full installation.
## Architectures (amd64 and ARM)
The code is pure Python, the Docker images (server and integration-test node) pick the right binaries
for the architecture (`TARGETARCH`, Debian packages), so amd64 and arm64 are both meant to work.
amd64 and arm64 (for example a Raspberry Pi 5) are both supported. The code is pure Python, and the Docker images
(server and integration-test node) pick the right binaries for the architecture (`TARGETARCH`, Debian packages).
The CI runs the `unittests`, `integration` (LevelDB and RocksDB) and `docker` jobs on both architectures
(`ubuntu-24.04` and `ubuntu-24.04-arm`).
Verified on aarch64 (Raspberry Pi, Debian 12, Docker 29):
Without Docker, the DB engine bindings are compiled from source, so the development headers are needed;
`rocksdb-ng` requires RocksDB >= 8.0 (Debian 13 or the Docker image, not Debian 12). See the "Architectures" section
of `DEPLOY.md`.
- the integration-test node image builds (official `aarch64-linux-gnu` release, signature checked);
- `tests/integration` with LevelDB: 21 passed; unit tests (without `test_storage.py`): 181 passed; `pycodestyle` clean;
- the server image builds, `contrib/docker-smoke-test.sh` passes and `rocksdb` imports inside it;
- `tests/integration` with RocksDB 9.10 (`python:3.14-trixie` container): 21 passed;
- the systemd unit in `contrib/systemd` starts, syncs a regtest chain, answers on the Electrum protocol and
`electrumx_rpc`, and stops cleanly through its `ExecStop`.
To build the server image for both architectures:
Verified on amd64 (Ubuntu 24.04, Docker 29): `pycodestyle` clean; unit tests 181 passed; `tests/integration` with LevelDB
and with RocksDB 9.10 (`python:3.14-trixie` container): 21 passed each; `tests/server/test_storage.py` with both engines:
16 passed; `docker build --no-cache` and `contrib/docker-smoke-test.sh` pass.
docker buildx build --platform linux/amd64,linux/arm64 -t <registry>/plm-electrumx:<tag> --push .
Full sync on amd64 (server image with default `CACHE_MB=1200`, against a mainnet Palladium node in Docker, both started on empty
data directories, 23 GB RAM, WSL2): the server was at the chain tip (height 544,059, 663,860 txs) 18 minutes after the start,
in parallel with the node download (the node is the bottleneck). Observed (5 minute samples): server memory up to about 330 MiB,
node up to about 650 MiB; server database 359 MB.
Added: the `unittests`, `docker` and `integration` CI jobs run on amd64 and arm64 (`ubuntu-24.04-arm`);
`DEPLOY.md` has an "Architectures" section (headers needed to compile `plyvel` and `rocksdb-ng`).
The first run of the amd64/arm64 CI matrix on GitHub passed (all jobs, both architectures).
`docker build --no-cache` of the server image on arm64 works (`rocksdb-ng` compiles from scratch), and the
RocksDB tests in `tests/server/test_storage.py` pass with RocksDB 9.10 (the fixture now closes the DB before the `chdir`).
`rocksdb-ng` needs RocksDB >= 8.0: Debian 12 (7.8.3) is too old, use Debian 13 or the Docker image.
Still to do or verify:
- **A full sync on ARM** of the server image against a real Palladium node (speed, memory, `CACHE_MB`): the amd64 numbers
are above, they are only a reference.
- **Published image** (none is published today): build it multi-arch with
`docker buildx build --platform linux/amd64,linux/arm64`.
Building the arm64 variant on an amd64 host needs QEMU emulation (`docker run --privileged --rm tonistiigi/binfmt --install arm64`)
and is slow, because `rocksdb-ng` is compiled from source; building on an arm64 host is much faster.
## Fork notes