From mboxrd@z Thu Jan 1 00:00:00 1970 From: Miklos Szeredi Subject: Re: fuse, readpage and readahead Date: Tue, 5 Feb 2013 15:11:44 +0100 Message-ID: References: <65F5F98566038744B1B43C8FD3B7549F1863F72B@IRSMSX104.ger.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Cc: "linux-fsdevel@vger.kernel.org" To: "Jarzmik, Robert" Return-path: Received: from mail-la0-f54.google.com ([209.85.215.54]:50704 "EHLO mail-la0-f54.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754286Ab3BEOLq (ORCPT ); Tue, 5 Feb 2013 09:11:46 -0500 Received: by mail-la0-f54.google.com with SMTP id gw10so181477lab.41 for ; Tue, 05 Feb 2013 06:11:44 -0800 (PST) In-Reply-To: <65F5F98566038744B1B43C8FD3B7549F1863F72B@IRSMSX104.ger.corp.intel.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Wed, Nov 28, 2012 at 5:55 PM, Jarzmik, Robert wrote: > Hi Miklos, > > I would like to understand the "synchronous" aspect of fuse readahead. > The usecase I have is : > - /sdcard is the FUSE mounted FS relying on /data, which is an ext4 > Filesystem on /dev/block/mmcblk0p1 > - one process is reading an mp3 file from a FUSE filesystem backed by > a local ext4 system > aplay /sdcard/Music/ElvisIsBack.mp3 > - another process is : dd if=/dev/zero of=/data/hog1 > > In my test, I came across the following scenario recently : > > filemap_fault() > ... > do_generic_file_read() > page_cache_async_readahead() > ondemand_readahead() > __do_page_cache_readahead() > read_pages() > fuse_readpages() > fuse_request_send() => takes around 500ms > > Here, fuse_request_send() will block as long as no reponse comes back > from the backing fuse (which is a local ext4 system). Correct me if > I'm wrong, but the synchronous fuse_request_send() is chosen on file > basis. > > The effect is that in filemap_fault() path, the process is blocked > for 500ms in my scenario, waiting for the readahead to complete, > while the first pagecache was succesfully found (I have an Ftrace > which tells me so). Therefore, I have a small audio glitch. > > My question is : is this the expected behaviour, ie. that read-ahead > blocks the filemap fault path ? If this was already discussed before, > could you please give me a link to the discussion ? Readahead is asynchronous by default. Synchronous mode may be forced with "-osync_read". See linux/fs/fuse/file.c:fuse_send_readpages(). Thanks, Miklos >