From patchwork Mon Aug 20 16:22:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Henriques X-Patchwork-Id: 10570545 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C866414BD for ; Mon, 20 Aug 2018 16:21:47 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id AEC6429809 for ; Mon, 20 Aug 2018 16:21:47 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AC7FC2980C; Mon, 20 Aug 2018 16:21:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 40528297D8 for ; Mon, 20 Aug 2018 16:21:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726549AbeHTTiC (ORCPT ); Mon, 20 Aug 2018 15:38:02 -0400 Received: from mx2.suse.de ([195.135.220.15]:38420 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726024AbeHTTiC (ORCPT ); Mon, 20 Aug 2018 15:38:02 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 925F7AFEB; Mon, 20 Aug 2018 16:21:43 +0000 (UTC) From: Luis Henriques To: "Yan, Zheng" , Sage Weil , Ilya Dryomov , Gregory Farnum Cc: ceph-devel@vger.kernel.org, Luis Henriques Subject: [RFC PATCH 0/2] copy_file_range in cephfs kernel client Date: Mon, 20 Aug 2018 17:22:37 +0100 Message-Id: <20180820162239.13267-1-lhenriques@suse.com> Sender: ceph-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: ceph-devel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Hi! This series is my initial attempt at getting a copy_file_range syscall implementation in the kernel cephfs client using the 'copy-from' RADOS operation. The idea of getting this implemented was from Greg -- or, at least, he created a feature in the tracker [1]. I just decided to give it a try as the feature wasn't assigned to anyone ;-) I have this patchset sitting on my laptop for a while already, waiting for me to revisit it, review some of its TODOs... but I finally decided to send it out as-is instead, to get some early feedback. The first patch implements the copy-from operation in the libceph module. Unfortunately, the documentation for this operation is nonexistent and I had to do a lot of digging to figure out the details (and I probably I missed something!). For example, initially I was hoping that this operation could be used to copy more than one object at the time. Doing an OSD request per object copy is not ideal, but unfortunately it seems to be the only way. Anyway, my expectations are that this new operation will be useful for other features in the future. The 2nd patch is where the copy_file_range is implemented and could probably be optimised, but I didn't bother with that for now. The important bit is that we still may need to do some manual copies if the offsets aren't object aligned or if the length is smaller than the object size. I'm using do_splice_direct() for the manual copies as it was the easiest way to get a PoC running, but maybe there are better ways. I've done some functional testing on this PoC. And it also passes the generic xfstest suite, in particular the copy_file_range specific tests (430-434). But I haven't done any benchmarks to measure any performance changes in using this syscall. Any feedback is welcome, specially regarding the TODOs on the code. [1] https://tracker.ceph.com/issues/21944 Luis Henriques (2): ceph: support the RADOS copy-from operation ceph: support copy_file_range file operation fs/ceph/file.c | 182 ++++++++++++++++++++++++++++++++ include/linux/ceph/osd_client.h | 18 ++++ include/linux/ceph/rados.h | 19 ++++ net/ceph/osd_client.c | 73 +++++++++++++ 4 files changed, 291 insertions(+)