From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 59F52EB64D7 for ; Mon, 19 Jun 2023 03:12:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229648AbjFSDMb (ORCPT ); Sun, 18 Jun 2023 23:12:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57568 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229820AbjFSDMI (ORCPT ); Sun, 18 Jun 2023 23:12:08 -0400 Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01on2096.outbound.protection.outlook.com [40.107.215.96]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BC177E6E for ; Sun, 18 Jun 2023 20:11:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ldlgb3JpFv2GT6//j0h4ZzpRDNV6yeGCMhQfEYsfTvvWwDX9pQ65cGv2xdNPjsJL+Gs7XND8jqmFmVLrv02Z+OjQ1Qj7JMyW/GjIVd6vd4oh08h3cI72/i+LfYvUv95EJDt5AiNPm+buJeFhv2Jv153MaqQwUHXV6JalbwRI4EQVsnSlt81iAuaW5Q5x8eLAThtRBwgvLpqiCBWXlNtgs5A2S0AP8vPTe0IPNfpx7L/c7x14sB7WuQYaDEN/xqKN/JQttmHPRSRl/4IE807V2twBLyH01vEfBlFDBMYQBF5hOsS2ZVZZm0d7onJH7pA4Zh18mVLuROY01YOtCD8tyg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=5s2CdHfnTK/34CbL6Br9NFOc3uKGNsaPossuTprqu9g=; b=QhacGAhVj3RfwTEjatmY5TvjsxCIpwxSniciYgp5hSMUelF9XRifctCtceoGx8B7bpvD1P3xzKSZaAA7aYayV7eaYym/E3J3V6qcgrhrnRsvlTlbI1Vzm7vqip8DHnnmZpzspSlfJVMh26AkxM4QZu8CinyFfzWXpFs8CeZbPKZWOV61K/y3fN9s9xcySn3KrMKC6EyL4jzrbkv2dOGZrqIoqCX0VBz82OBi7J80xV4mlK9OmwDrSoPYSGhBuH7wvyHXgnTpWbUxPhpUArXQpzrg+Hjm6QxxcYgNEBYMlM2knLY+skwpftkBmedFX6VXMYK29bk2mGxl08O1+92PKw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=vivo.com; dmarc=pass action=none header.from=vivo.com; dkim=pass header.d=vivo.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vivo.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=5s2CdHfnTK/34CbL6Br9NFOc3uKGNsaPossuTprqu9g=; b=IOtYC6B6poJqhfIME78Dc0GsqEkpmoe9bh4Tq+bYbISbx7ahqExHKpkFk+w05/uW0FBe2QybUSJu/Im1oChMGrszlD1TBsPLrSFWuunkxgdaw9Qk7op1Ue3hpNrPWpQ5RAcuTPGbcDmtgV4a8nV8a5CACNkyJ3eWutIW2Ykd1AEAz4xfFxrOs3Lk06RXZerhsEM+EFo9Ar0z7b1xIaq6Gd7rMB1kbfencjxQAfQNB6sEICD2lO8/28d1rK078w7xstpCkXNcly3dhLjkOLiKQa2HWy7gTO/yjpyNGreF+wWGL+gjmIQeAFHOBzn1gQo7w6uymw/z/QZA2+WaR9zUGQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=vivo.com; Received: from SEZPR06MB5269.apcprd06.prod.outlook.com (2603:1096:101:78::6) by PUZPR06MB5934.apcprd06.prod.outlook.com (2603:1096:301:104::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6500.35; Mon, 19 Jun 2023 03:11:53 +0000 Received: from SEZPR06MB5269.apcprd06.prod.outlook.com ([fe80::fa0e:6c06:7474:285c]) by SEZPR06MB5269.apcprd06.prod.outlook.com ([fe80::fa0e:6c06:7474:285c%4]) with mapi id 15.20.6500.036; Mon, 19 Jun 2023 03:11:52 +0000 Message-ID: Date: Mon, 19 Jun 2023 11:11:47 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.1 Subject: Re: [PATCH] f2fs: compress: don't force buffered io when in COMPR_MODE_USER mode To: Chao Yu , Jaegeuk Kim Cc: Qi Han , linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org References: <20230609131555.56651-1-frank.li@vivo.com> <8097d4d9-815e-2527-0fb7-90ec0609a4a3@kernel.org> <7ab6b6f9-37fa-9bf2-69ce-7b1b1944d9f3@kernel.org> From: Yangtao Li In-Reply-To: <7ab6b6f9-37fa-9bf2-69ce-7b1b1944d9f3@kernel.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-ClientProxiedBy: SI2P153CA0003.APCP153.PROD.OUTLOOK.COM (2603:1096:4:140::20) To SEZPR06MB5269.apcprd06.prod.outlook.com (2603:1096:101:78::6) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SEZPR06MB5269:EE_|PUZPR06MB5934:EE_ X-MS-Office365-Filtering-Correlation-Id: 893b3b79-8100-4a2a-0828-08db7072ed8a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: bi62B3xZQJMbCHJu3kyzh7QSjxNitLCYCaBXSpFIFA2Cj4HHq161ldZ4z9Hh9RQzZwbP574zuGnHjXR5z0i/NUxDQwIuIrCaK1NNk0LVKp1SDiP4H+6pMV4qaUB0H5kXslTSbvhTp6LrRnE/pcx/T4P2Dv4kBF1PgzLiYS0WUwLuv8WWVSqmjiG1c/KDAKMQr2smLbaoupgSqnGx9rb5vDiCYnPRMjAsE8t9KZ2GaG0T1/qMkBPW1fK3MfmrpUrT+57jmJOEIDnsAqTyJvHt/F799pLMv2RJhGrVrGthX6wyHHAFCzEkOjwmxjVqcG31p9PzZvcEynXqZQxuKyriG3k1y7VSTe7kru7LAO10GRLKujtFdTpmKrfh+oiLSVr//hcHjTdLfURJE8dofhf/mJad0ZGE1z16It2yo69TyREz/pHt48w+BUZeIKTU+r6qZ9UkeGhTPCYI0sGuuKZOmF6jPPZ4UoKV4z9pFUlGAxO9FvSw0mRLIaJveTjLMlIpGub4k9C/5mGP2z0QNAE4ZHDvYrZl4ap65Vd4UrebXWOgR/IJfNwwOwaXgcjMKjz4Fyb2zORRQ4kMN6W3e+uA020xYjjixoVj/33gcyY5CsVnY1KWmlaynugVzZJx8fDvFGCAknwUxrTnIfvCL1T6e9ibbiqdxTp/zH9TQ4y3ZbsDwheltvlaC7qJ8pfRDI1P X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SEZPR06MB5269.apcprd06.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230028)(4636009)(39860400002)(396003)(346002)(376002)(136003)(366004)(451199021)(41300700001)(5660300002)(8936002)(8676002)(2906002)(40140700001)(36756003)(86362001)(31696002)(26005)(6506007)(6512007)(53546011)(52116002)(110136005)(186003)(478600001)(6486002)(6666004)(66946007)(66556008)(66476007)(4326008)(38350700002)(38100700002)(316002)(31686004)(2616005)(83380400001)(45980500001)(43740500002);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Z2JTS2xUK3hObjZKcFhHZ0dCdmNCU1V6cmZWcHZuZlBBcks1TzUzeEk3V2pq?= =?utf-8?B?SzNlc2lKMzNaRlIyZkVsQmVsL0l0ZTlXcGpvdGJCek5WTVJvQkc0eUhZdFJI?= =?utf-8?B?VlZyYWE1OVFMaEZtbnVCS2pzQnI2bWpoZGlYL1BGT2xSTmdNTWxyVklYa1ZT?= =?utf-8?B?WGYzenF4Yk44ekwva2dwamxFUkpKVnlZRnVUY1drdlVzNVZ2NWMzMXZJcnI0?= =?utf-8?B?T1E3SUVYSTUrQ200UXRwenYrU0RtbUJCWTZxMHJQeURCUnBQdTA5bDR5VmYx?= =?utf-8?B?ajdwNndYRFV6bzNjSjg2RVAwZUpVVUtucHpja2l1cGwrbktod2FGRTRxako3?= =?utf-8?B?UStYQklyVVhGNU1zaVRGbGhkTWpZY2ZmQVd6TjV1WlJWSUJ3UFdXZXRsaEdi?= =?utf-8?B?NXJsSktlWjB6d3ZzTXVCWFNSOXhBY1cvYzducG1pSjBObWNMdGpHRXZxeU1S?= =?utf-8?B?SlVXQ01tZUtBQk9KWVJ0NkVualZJaFBvWFprdkRSNUtBTFVjQ0hFRnJtZmJS?= =?utf-8?B?b3VrRkFweHV5OHZlcU5TcjAxUUg5clNkcEhFTVJXNE8yVVRkQ2k0RFZOS2c2?= =?utf-8?B?eWdXN1llcjBnNTFkeHAxVWhaWXVoVkdEK0s2MmZFYmdHb3EwNmxTTGVPYUhl?= =?utf-8?B?SGFYcGZaK1dlY0JzM2M0SnU4Y25Yam5LWFJaSTlyZ1FiQnFEdHFVVkUwbU5M?= =?utf-8?B?aTZUZTVRZ2Jrc1Z4T3owT09pbkk2dnBzWVdmeXJ2NklnNmo2OTRPQ1NXNFlw?= =?utf-8?B?RW15UDZDMXJ4K2RNa3R2VEFabGxZeC9qR3ZmQ2dpUzV6eCtXekE3Y1hGSnJx?= =?utf-8?B?OHpCTkVSTDM3NjdGTkVSK2NCTU41TVVoVW5FV1llSmE4SVBXODRoeVRWL3R3?= =?utf-8?B?d2N1bmlDa0pYRjkvVG81bEF1TWd5TlRaS3FQeWk2S3Frc3ovaWtkb2k1U2ZK?= =?utf-8?B?OVF0QU9Bc2w0ajlwR1UzY1ViM3lZaTlZaTB3Y2RkbnJSU2hvZXIzbmFUSk5G?= =?utf-8?B?YVVTNkxJZVAyUHA0UnA5QzdGUXI4TWZDbmNoMVJyNWVnK044VFJCWFFTRlhH?= =?utf-8?B?WFN4TG1YWUpETTY2MGZTU2FmR1MrWTBRL2IrZGI4MkkrMVZwa09oVTZWTWxu?= =?utf-8?B?cDZKUGRIUDRIbEQxZFloT1QydkRkc1ZiRjlQNjIyb3VDYjBJZVkvRjBPZW0r?= =?utf-8?B?YkZndlhJdHd5Zm9VZzQ2QUZhN003TWxzd3FhSFZvWmpQVjZYTzhSWmxnZXox?= =?utf-8?B?ZEp0c2pJMStTWXNocWMwYzNxQVBQL1ZnQklrRmpyRUJIMzFMWEdqUlViYlla?= =?utf-8?B?NGYvR3p5cnRIMHRSYm1MQnR6czN2bHljQkR4ZTE4bmlTcFFHTGhKRkJSTk1B?= =?utf-8?B?QW53L1doMGo2NTBCUnBZOVF2dmhKYXRLRnJUdUtFK0JJSW9PSTkxMnJHaTZh?= =?utf-8?B?d21vTEEzZ2xZMm44L204cjVOVG8zekRRUWwycXNJeTUrZmxnL1p1SXNJTTc4?= =?utf-8?B?ckd0blhNbkZhSy8zVUQ3eE9YS0JZSFZCd2cxNjk0YjVqWXB1OGc5WHZOWE13?= =?utf-8?B?bjNTZVRvb2JnUlA1Y0RES1ZJMjd1cVA2NHY3WHd3V3ZHRDJueHk0bmxTekkx?= =?utf-8?B?MmZGanJWRHNFM2x1Uyt6MG9xMjVoM0Q4dlJvSUoyc0RzaXFwWFBYMFNNZ1Vy?= =?utf-8?B?dGU0TEc0MTNoK3NSemdqd3RwRFZ6QlNrU3l2Y0QzVlU0d2RxekJOVjg5SHh6?= =?utf-8?B?WjUvTGV5aG1IWVVOV3hkSHhXSWx2TnM4elp0bDQ3b21vS1hRUDRoZ3d5cjVz?= =?utf-8?B?WUZFTU1qSzNXUkgxVnJ4bkRlVndVWmlEalVPTWtYcTA5cnRGWGg3ZExqdjli?= =?utf-8?B?bWIvWVNrY1g1NUNGNkM3eWJNRGQzbXhER0JPeFdMQzN5V1Zxd25HSXRuaU5i?= =?utf-8?B?LzJTNnpjWWQrWXVNSEF1VDRINlNPQ0N2TlBtemtiQnNFTGg3VkFWbUpBbW9u?= =?utf-8?B?WmVxNkFaWmtUOUZoRUY3SjlkUWV2UGdlK1VDS2cwUnF6dGVWbFVWVWZXdDJT?= =?utf-8?B?NEExcjRvRDFmWTJ3ZXd6OGxGdXUybGloZlJoS2YzYjJNeW1pU3BWRXJuTmFq?= =?utf-8?Q?ROe3ICIJTa/wStDfRK24xBWQR?= X-OriginatorOrg: vivo.com X-MS-Exchange-CrossTenant-Network-Message-Id: 893b3b79-8100-4a2a-0828-08db7072ed8a X-MS-Exchange-CrossTenant-AuthSource: SEZPR06MB5269.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jun 2023 03:11:51.9745 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 923e42dc-48d5-4cbe-b582-1a797a6412ed X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Lp6NEMgpPEScsXqhXhb79oSMRMs5XMZ5Fd2VWn9Hh2XmBw7dbiWSLjusVjYvSdhDLreeEoT5ksv/bgCdo9gdMg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PUZPR06MB5934 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2023/6/19 8:54, Chao Yu wrote: > On 2023/6/13 12:14, Yangtao Li wrote: >> >> On 2023/6/12 22:38, Chao Yu wrote: >>> On 2023/6/9 21:15, Yangtao Li wrote: >>>> It is observed that when in user compression mode >>>> (compress_extension=*), >>>> even though the file is not compressed, the file is still forced to >>>> use >>>> buffer io, which makes the AndroBench sequential read and write drop >>>> significantly. In fact, when the file is not compressed, we don't need >>>> to force it to buffer io. >>>> >>>>                    | w/o patch | w/ patch | >>>> seq read  (MB/s) | 1320.068  | 3696.154 | >>>> seq write (MB/s) | 617.996   | 2978.478 | >>>> >>>> Fixes: 4c8ff7095bef ("f2fs: support data compression") >>>> Signed-off-by: Qi Han >>>> Signed-off-by: Yangtao Li >>>> --- >>>>    fs/f2fs/f2fs.h | 14 ++++++++++++++ >>>>    fs/f2fs/file.c |  2 +- >>>>    2 files changed, 15 insertions(+), 1 deletion(-) >>>> >>>> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h >>>> index 1efcfd9e5a99..7f5472525310 100644 >>>> --- a/fs/f2fs/f2fs.h >>>> +++ b/fs/f2fs/f2fs.h >>>> @@ -3168,6 +3168,20 @@ static inline int f2fs_compressed_file(struct >>>> inode *inode) >>>>            is_inode_flag_set(inode, FI_COMPRESSED_FILE); >>>>    } >>>>    +static inline bool f2fs_is_compressed_file(struct inode *inode) >>>> +{ >>>> +    int compress_mode = F2FS_OPTION(F2FS_I_SB(inode)).compress_mode; >>>> + >>>> +    if (compress_mode == COMPR_MODE_FS) >>>> +        return f2fs_compressed_file(inode); >>>> +    else if (atomic_read(&F2FS_I(inode)->i_compr_blocks) || >>> >>> Should check dirty page as well? i_compr_blocks may increase after >>> data writeback. >>> >> IIUC, in COMPR_MODE_USER mode, i_compr_blocks will only be updated when >> FI_ENABLE_COMPRESS is enabled. >> >> If FI_ENABLE_COMPRESS is not enabled, i_compr_blocks will never be >> updated after data writeback. >> >> So there is no need to additionally judge whether there is a dirty page? > > Oh, user mode, that's correct. > > If we allow dio/aio on compress file, it needs to consider race case in > between aio and ioc_compress_file. The inode_lock is already held in f2fs_file_write_iter and f2fs_ioc_compress_file, I guess this is enough? What else? 4691 static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from) 4692 { 4693         struct inode *inode = file_inode(iocb->ki_filp); 4694         const loff_t orig_pos = iocb->ki_pos; 4695         const size_t orig_count = iov_iter_count(from); 4696         loff_t target_size; 4697         bool dio; 4698         bool may_need_sync = true; 4699         int preallocated; 4700         ssize_t ret; 4701 4702         if (unlikely(f2fs_cp_error(F2FS_I_SB(inode)))) { 4703                 ret = -EIO; 4704                 goto out; 4705         } 4706 4707         if (!f2fs_is_compress_backend_ready(inode)) { 4708                 ret = -EOPNOTSUPP; 4709                 goto out; 4710         } 4711 4712         if (iocb->ki_flags & IOCB_NOWAIT) { 4713                 if (!inode_trylock(inode)) { 4714                         ret = -EAGAIN; 4715                         goto out; 4716                 } 4717         } else { 4718                 inode_lock(inode); 4719         } 4115 static int f2fs_ioc_compress_file(struct file *filp) 4116 { 4117         struct inode *inode = file_inode(filp); 4118         struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 4119         pgoff_t page_idx = 0, last_idx; 4120         unsigned int blk_per_seg = sbi->blocks_per_seg; 4121         int cluster_size = F2FS_I(inode)->i_cluster_size; 4122         int count, ret; 4123 4124         if (!f2fs_sb_has_compression(sbi) || 4125                         F2FS_OPTION(sbi).compress_mode != COMPR_MODE_USER) 4126                 return -EOPNOTSUPP; 4127 4128         if (!(filp->f_mode & FMODE_WRITE)) 4129                 return -EBADF; 4130 4131         if (!f2fs_compressed_file(inode)) 4132                 return -EINVAL; 4133 4134         f2fs_balance_fs(sbi, true); 4135 4136         file_start_write(filp); 4137         inode_lock(inode); Thanks, > > Thanks, > >> >> >> Thanks, >> >>> Thanks, >>> >>>> +        is_inode_flag_set(inode, FI_COMPRESS_RELEASED) || >>>> +        is_inode_flag_set(inode, FI_ENABLE_COMPRESS)) >>>> +        return true; >>>> + >>>> +    return false; >>>> +} >>>> + >>>>    static inline bool f2fs_need_compress_data(struct inode *inode) >>>>    { >>>>        int compress_mode = >>>> F2FS_OPTION(F2FS_I_SB(inode)).compress_mode; >>>> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c >>>> index 74ecc9e20619..0698129b2165 100644 >>>> --- a/fs/f2fs/file.c >>>> +++ b/fs/f2fs/file.c >>>> @@ -821,7 +821,7 @@ static bool f2fs_force_buffered_io(struct inode >>>> *inode, int rw) >>>>            return true; >>>>        if (fsverity_active(inode)) >>>>            return true; >>>> -    if (f2fs_compressed_file(inode)) >>>> +    if (f2fs_is_compressed_file(inode)) >>>>            return true; >>>>          /* disallow direct IO if any of devices has unaligned >>>> blksize */