Skip to content

fix(io): make the posix backend return the data it reads - #16

Merged
karlowich merged 2 commits into
xnvme:mainfrom
karlowich:fix/posix-host-buffers
Oct 1, 2026
Merged

karlowich merged 2 commits into
xnvme:mainfrom
karlowich:fix/posix-host-buffers

Conversation

@karlowich

Copy link
Copy Markdown
Collaborator

Two fixes to the posix backend. Both are needed for it to return correct data without --copy-to-gpu.
This is pre-work for the upcoming CI PR: #14

The posix backend always allocated its buffers with cudaMalloc. It read
each file into a host buffer and only copied it to the GPU buffer with
--copy-to-gpu. Without that option, the buffers fil_next() returned were
never written. The Python binding also treated these GPU pointers as
host memory. And on a machine without a GPU, posix could not read any
file, because the allocation failed.

Without --copy-to-gpu, allocate the buffers in host memory, aligned for
O_DIRECT, and read files straight into them. The extra host buffer is
then not needed. cuFile is unchanged, as it always reads into GPU memory.

Assisted-by: Claude Code:claude-opus-5
Signed-off-by: Karl Bonde Torp <k.torp@samsung.com>
When read() returns fewer bytes than asked for, the posix backend reads
the rest in a loop. Each call wrote to the start of the buffer, so the
rest of the file overwrote the part already read.

Read into the buffer after the bytes already read.

Assisted-by: Claude Code:claude-opus-5-5
Signed-off-by: Karl Bonde Torp <k.torp@samsung.com>

@naddinadja naddinadja left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm :)

@karlowich
karlowich merged commit a4b489a into xnvme:main Oct 1, 2026
1 check passed
@karlowich
karlowich deleted the fix/posix-host-buffers branch October 1, 2026 11:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

2 participants