Re: [PATCH 2/2] virtio-fs: add multi-queue support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2024-05-28 at 13:59 +0200, Miklos Szeredi wrote:
> External email: Use caution opening links or attachments
> 
> 
> On Tue, 28 May 2024 at 10:52, Jingbo Xu <jefflexu@xxxxxxxxxxxxxxxxx>
> wrote:
> > 
> > Hi Peter-Jan,
> > 
> > Thanks for the amazing work.
> > 
> > I'd just like to know if you have any plan of making fiq and fiq-
> > >lock
> > more scalable, e.g. make fiq a per-CPU software queue?
We have also identified the single fiq and fiq->lock as a logically
large bottleneck in our system's data path. But we don't have hard proof
for this just yet.

I also still need to investigate what the impact of having multiple
locks would be on the file system consistency in the FUSE driver. File
systems like their locks...
Can anyone here comment on that?

> 
> Doing a per-CPU queue is not necessarily a good idea: async requests
> could overload one queue while others are idle.
> 
> One idea is to allow request to go through a per-CPU fast path if the
> respective listener is idle.  Otherwise the request would enter the
> default slow queue, where idle listeners would pick requests (like
> they do now).
> 
> Might make sense to also optimize the way this picking is done if
> there are several idle listeners according to how close the listener's
> CPU is to the one that generated the request.
> 
> Thanks,
> Miklos

I am not that familiar yet with the FUSE driver. What are these
listeners you are referring to? If I follow a FUSE file system operation
like fuse_statfs, I see a single-threaded path towards the
wake_pending_and_unlock of virtio-fs via fuse_simple_request.
Or are these listeners something from the virtiofsd implementation?

I think the optimality of another "simple" multi-queue layer but in the
FUSE driver would depend on the virtio-fs device implementation (busy
polling or thread pooling like virtiofsd) and how the file system
operates (asynchronously over the network or locally accessing the
disk).

Are you aware of other device drivers that perform smart tricks like
checking if the per-core queue is full and using another empty one?




[Index of Archives]     [KVM Development]     [Libvirt Development]     [Libvirt Users]     [CentOS Virtualization]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux