mirror of
https://github.com/luxfi/zap.git
synced 2026-10-30 15:04:16 +00:00
Three orthogonal additions, one wire format. v2 package — generic ad-hoc schema dispatch (~/work/lux/zap/v2): - README + IMPOSSIBILITY + BENCH_RESULTS document the v1↔v2 split. - builder/field/iter/list/pool/registry/schema/view + codegen package emit v1-equivalent fast paths from declarative .zap sources. - _compile_fail_test/ + examples/ cover negative and positive cases. - v2_test.go exercises the generic dispatch path. - doc.go in v1 marks v1 deprecated for *new* schema authoring; existing v1 buffers stay parseable by both v1 and v2. bufpool — pooled read slabs (bufpool.go + bufpool_test.go): - Message gains optional *bufRef; Release() returns the slab to its pool when sourced from the pooled read path, GC-managed otherwise. - ParseHeader returns (data, rootOffset) without allocating *Message, used by zapv2 to avoid two allocations per parse. - bench_read_test.go + node_quic_stream_test.go cover both paths. Transport allocator + UMA/RDMA cgo (transport/*): - Transport.Caps()/Buffer interface: capability + slab-typed buffer contract. Bytes() vs DevicePtr() decoupled so UMA and GPUDirect can share the same call surface. - DPDK PMD + GPUDirect RDMA + CUDA UMA real cgo backends gated behind build tags; stub paths remain default on darwin / non-Linux. - transport_test.go covers Caps reporting + Buffer lifecycle on the default transport. LLM.md + go.mod follow the additions.
46 lines
1.5 KiB
C
46 lines
1.5 KiB
C
// Copyright (C) 2025-2026, Lux Industries Inc. All rights reserved.
|
|
// See the file LICENSE for licensing terms.
|
|
//
|
|
// Host-side C API for the DPDK PMD-backed transport. The data plane
|
|
// (per-queue poll loop, RX/TX burst, hugepage mempool) is staged
|
|
// behind the dpdk build tag; until rte_eal_init succeeds the Go side
|
|
// reports not-available and Pick() falls through.
|
|
#ifndef LUX_ZAP_TRANSPORT_DPDK_PMD_H
|
|
#define LUX_ZAP_TRANSPORT_DPDK_PMD_H
|
|
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// luxzap_dpdk_probe reports whether DPDK's prerequisites are satisfied
|
|
// on this host. Returns 0 when ALL prereqs are met, otherwise a
|
|
// non-zero error code:
|
|
//
|
|
// 1 : hugepages not configured
|
|
// 2 : librte_eal not linkable (build was --tags dpdk but DPDK not
|
|
// installed at runtime)
|
|
// 3 : rte_eal_init failed (no DPDK-bound NICs, vfio-pci absent, etc.)
|
|
//
|
|
// The probe is callable from any process without privileges. The
|
|
// rte_eal_init attempt does require CAP_SYS_NICE / CAP_IPC_LOCK in
|
|
// production setups.
|
|
int luxzap_dpdk_probe(void);
|
|
|
|
// luxzap_dpdk_init initialises the EAL with the supplied arg vector.
|
|
// argv must be NULL-terminated. Returns 0 on success, the rte_errno on
|
|
// failure. Safe to call once per process.
|
|
int luxzap_dpdk_init(int argc, char** argv);
|
|
|
|
// luxzap_dpdk_shutdown tears down the EAL. After this returns the
|
|
// process can re-init only by exec'ing — DPDK is process-singleton.
|
|
int luxzap_dpdk_shutdown(void);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // LUX_ZAP_TRANSPORT_DPDK_PMD_H
|