mirror of
https://github.com/deepseek-ai/3FS
synced 2025-06-03 19:36:20 +00:00
31 lines
1.2 KiB
Python
31 lines
1.2 KiB
Python
from hf3fs_fuse.io import make_iovec, make_ioring, register_fd, deregister_fd
|
|
from multiprocessing.shared_memory import SharedMemory
|
|
import os
|
|
|
|
# Create memory for IO
|
|
shm = SharedMemory(size=1024, create=True)
|
|
iov = make_iovec(shm, '/hf3fs-cluster', 0, -1) # shm, mountpoint, blocksize, numa
|
|
shm.unlink() # shm can be unlinked after make_iovec
|
|
|
|
# Create ioring for IO
|
|
ior = make_ioring('/hf3fs-cluster', 100, True, 0) # mountpoint, num_entries, for_read, io_depth
|
|
|
|
# Open file
|
|
fd = os.open('/hf3fs-cluster/testread', os.O_RDONLY)
|
|
register_fd(fd) # must register after open to use usrbio
|
|
|
|
# Read file
|
|
ios = [(iov[:512], fd, 512), (iov[512:], fd, 0)] # iov, fd, offset
|
|
for io in ios:
|
|
ior.prepare(io[0], True, io[1], io[2], userdata=io) # iov, for_read, fd, offset, userdata
|
|
# Only for_read == True is allowed, because ior has for_read == True
|
|
# userdata must be a referenced python object, we reference io in the list ios, so it will not be sent to GC
|
|
resv = ior.submit().wait(min_results=2)
|
|
for res in resv:
|
|
print(res.result)
|
|
assert res.result == len(memoryview(res.userdata[0])) # Check read length is correct
|
|
|
|
# Close file
|
|
deregister_fd(fd) # must deregister before close
|
|
os.close(fd)
|