cifs: Fix read-performance regression by dropping readahead expansion
Subsystems (5)
David Howells
maintainerPATCH 1/1 cifs: Fix read-performance regression by dropping readahead expansion
cifs_expand_read() is causing a performance regression of around 30% by causing extra pagecache to be allocated for an inode in the readahead path before we begin actually dispatching RPC requests, thereby delaying the actual I/O. The expansion is sized according to the rsize parameter, which seems to be 4MiB on my test system; this is a big step up from the first requests made by the fio test program.
Fix this by removing cifs_expand_readahead(). Readahead expansion is mostly useful for when we're using the local cache if the local cache has a block size greater than PAGE_SIZE, so we can dispense with it when not caching.
Signed-off-by David Howells <[email protected]>
cc Steve French <[email protected]>
cc Paulo Alcantara <[email protected]>
cc Jeff Layton <[email protected]>
cc Matthew Wilcox <[email protected]>
--- fs/smb/client/file.c | 30 ------------------------------ 1 file changed, 30 deletions(-)
fs/smb/client/file.c +0 -30
@@ -245,35 +245,6 @@ static int cifs_init_request(struct netfs_io_request *rreq, struct file *file)return 0 ; } -/* -* Expand the size of a readahead to the size of the rsize, if at least as -* large as a page, allowing for the possibility that rsize is not pow-2 -* aligned. -*/ -static void cifs_expand_readahead (struct netfs_io_request *rreq) -{ -unsigned int rsize = rreq->rsize; -loff_t misalignment, i_size =i_size_read (rreq->inode); - -if (rsize <PAGE_SIZE ) -return ; - -if (rsize <INT_MAX ) - rsize =roundup_pow_of_two (rsize); -else - rsize = ((unsigned int )INT_MAX +1 ) /2 ; - - misalignment = rreq->start & (rsize -1 ); -if (misalignment) { - rreq->start -= misalignment; - rreq->len += misalignment; - } - - rreq->len =round_up (rreq->len, rsize); -if (rreq->start < i_size && rreq->len > i_size - rreq->start) - rreq->len = i_size - rreq->start; -} -/* * Completion of a request operation. */
@@ -329,7 +300,6 @@ const struct netfs_request_ops cifs_req_ops = { .init_request = cifs_init_request, .free_request = cifs_free_request, .free_subrequest = cifs_free_subrequest, - .expand_readahead = cifs_expand_readahead, .clamp_length = cifs_clamp_length, .issue_read = cifs_req_issue_read, .done = cifs_rreq_done,