3FS/hf3fs_fuse/fuse_demo.py
2025-02-27 21:53:53 +08:00

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)