Am 30.07.24 um 11:05 schrieb Huan Yang:But, if not mmap, how to read file from fd to fd? sendfile may help(shmemfs may support it, I do not test it), but use pipe buffer is not good through test.
在 2024/7/30 16:56, Daniel Vetter 写道:
[????????? daniel.vetter@xxxxxxxx ????????? https://aka.ms/LearnAboutSenderIdentification?????????????]That's greate, Let me rephrase that, and please correct me if I'm wrong.
On Tue, Jul 30, 2024 at 03:57:44PM +0800, Huan Yang wrote:
UDMA-BUF step:Yeah this is really slow and the worst way to do it. You absolutely want
1. memfd_create
2. open file(buffer/direct)
3. udmabuf create
4. mmap memfd
5. read file into memfd vaddr
to start _all_ the io before you start creating the dma-buf, ideally with
everything running in parallel. But just starting the direct I/O with
async and then creating the umdabuf should be a lot faster and avoid
UDMA-BUF step:
1. memfd_create
2. mmap memfd
3. open file(buffer/direct)
4. start thread to async read
3. udmabuf create
With this, can improve
needlessly serialization operations.Yes, the time spent on page fault in mmap should be negligible compared to the time spent on file read.
The other issue is that the mmap has some overhead, but might not be too
bad.
You should try to avoid mmap as much as possible. Especially the TLB invalidation overhead is really huge on platforms with a large number of CPUs.
Regards,
Christian.
-Sima
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch/