From: Andreas Rohner <andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
To: Vyacheslav Dubeyko <slava-yeENwD64cLxBDgjK7y7TUQ@public.gmane.org>
Cc: linux-nilfs <linux-nilfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH v2 1/5] nilfs-utils: cldconfig add an option to set minimal free blocks
Date: Thu, 23 Jan 2014 19:31:44 +0100 [thread overview]
Message-ID: <52E16010.3050305@gmx.net> (raw)
In-Reply-To: <B1FCAEBD-EB58-4A06-BD6B-7D4FB533D9F1-yeENwD64cLxBDgjK7y7TUQ@public.gmane.org>
On 2014-01-23 18:49, Vyacheslav Dubeyko wrote:
>
> On Jan 21, 2014, at 4:59 PM, Andreas Rohner wrote:
>
>> With this option the user can specify the minimal number of free/dead
>> blocks before a segment can be cleaned.
>
> "Free or dead" or "free and dead"? What do you mean by free blocks?
> "Free blocks" sounds for me as blocks that I can allocate and to use
> immediately without any operations. If you mean invalid blocks (blocks
> that it was updated in this segment) then I need to do garbage collection
> operation for making it free. So, free blocks are really confusing term. And
> "dead blocks" sounds for me not very good.
I mean updated or deleted blocks, that need to be garbage collected.
Here [1] they are called "dead blocks".
>> This is a threshold for the GC
>> to prevent needless moving of data. If there are less free blocks
>> to gain from cleaning a segment than the specified number, the GC will
>> abort and try again with a different segment.
>>
>> By setting it to 0 this feature is effectively disabled.
>>
>> Signed-off-by: Andreas Rohner <andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
>> ---
>> include/nilfs_cleaner.h | 19 ++++++++++---------
>> sbin/cleanerd/cldconfig.c | 40 +++++++++++++++++++++++++++++++++++++++
>> sbin/cleanerd/cldconfig.h | 4 ++++
>> sbin/cleanerd/cleanerd.c | 23 ++++++++++++++++++++++
>> sbin/cleanerd/nilfs_cleanerd.conf | 9 +++++++++
>> sbin/nilfs-clean/nilfs-clean.c | 18 ++++++++++++++----
>> 6 files changed, 100 insertions(+), 13 deletions(-)
>>
>> diff --git a/include/nilfs_cleaner.h b/include/nilfs_cleaner.h
>> index 0bf02aa..42c4aa7 100644
>> --- a/include/nilfs_cleaner.h
>> +++ b/include/nilfs_cleaner.h
>> @@ -46,17 +46,18 @@ struct nilfs_cleaner_args {
>> uint64_t start_segnum; /* start segment number */
>> uint64_t nsegs; /* number of segments */
>> uint32_t runtime; /* runtime in seconds */
>> - uint32_t pad2;
>> + uint32_t min_free_blocks_threshold;
>> };
>> /* valid flags */
>> -#define NILFS_CLEANER_ARG_PROTECTION_PERIOD (1 << 0)
>> -#define NILFS_CLEANER_ARG_NSEGMENTS_PER_CLEAN (1 << 1)
>> -#define NILFS_CLEANER_ARG_CLEANING_INTERVAL (1 << 2)
>> -#define NILFS_CLEANER_ARG_USAGE_RATE_THRESHOLD (1 << 3) /* reserved */
>> -#define NILFS_CLEANER_ARG_START_SEGNUM (1 << 4) /* reserved */
>> -#define NILFS_CLEANER_ARG_NSEGS (1 << 5) /* reserved */
>> -#define NILFS_CLEANER_ARG_NPASSES (1 << 6) /* reserved */
>> -#define NILFS_CLEANER_ARG_RUNTIME (1 << 7) /* reserved */
>> +#define NILFS_CLEANER_ARG_PROTECTION_PERIOD (1 << 0)
>> +#define NILFS_CLEANER_ARG_NSEGMENTS_PER_CLEAN (1 << 1)
>> +#define NILFS_CLEANER_ARG_CLEANING_INTERVAL (1 << 2)
>> +#define NILFS_CLEANER_ARG_USAGE_RATE_THRESHOLD (1 << 3) /* reserved */
>> +#define NILFS_CLEANER_ARG_START_SEGNUM (1 << 4) /* reserved */
>> +#define NILFS_CLEANER_ARG_NSEGS (1 << 5) /* reserved */
>> +#define NILFS_CLEANER_ARG_NPASSES (1 << 6) /* reserved */
>> +#define NILFS_CLEANER_ARG_RUNTIME (1 << 7) /* reserved */
>> +#define NILFS_CLEANER_ARG_MIN_FREE_BLOCKS_THRESHOLD (1 << 8)
>
> What about NILFS_CLEANER_ARG_MIN_FBLK_THRESHOLD?
> But free blocks really confuse me.
Yes maybe the name is a bit confusing.
>> #define NILFS_CLDCONFIG_SELECTION_POLICY_IMPORTANCE \
>> @@ -120,6 +122,8 @@ struct nilfs_cldconfig {
>> #define NILFS_CLDCONFIG_RETRY_INTERVAL 60
>> #define NILFS_CLDCONFIG_USE_MMAP 1
>> #define NILFS_CLDCONFIG_LOG_PRIORITY LOG_INFO
>> +#define NILFS_CLDCONFIG_MIN_FREE_BLOCKS_THRESHOLD 256
>> +#define NILFS_CLDCONFIG_MC_MIN_FREE_BLOCKS_THRESHOLD 128
>
> Why 256 or 128? What is good? What is bad?
> I am a user. How can I define what value is appropriate?
> How should I think for choosing some value?
> For example, I want to have the fastest performance as possible. How can I define
> an appropriate value? Or, maybe, I want to clean as many segments as possible.
> How should I think?
>
> Or, maybe, I want combination of GC policies.
It is the minimal number of dead or free or invalid or however you want
to call them blocks, before a segment is allowed to be cleaned by the
GC. It is a tradeoff, but you are right it is not very intuitive. As I
stated before I am going to change that in the next version.
br,
Andreas Rohner
[1] http://lwn.net/Articles/522507/
--
To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2014-01-23 18:31 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-21 13:59 [PATCH v2 0/5] nilfs-utils: skip inefficient gc operations Andreas Rohner
[not found] ` <cover.1390310509.git.andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
2014-01-21 13:59 ` [PATCH v2 1/5] nilfs-utils: cldconfig add an option to set minimal free blocks Andreas Rohner
[not found] ` <22b5b3ac403052d3044dc8c1bebe323191376c03.1390310509.git.andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
2014-01-21 14:10 ` dexen deVries
2014-01-21 14:38 ` Andreas Rohner
2014-01-21 14:53 ` Andreas Rohner
2014-01-23 17:49 ` Vyacheslav Dubeyko
[not found] ` <B1FCAEBD-EB58-4A06-BD6B-7D4FB533D9F1-yeENwD64cLxBDgjK7y7TUQ@public.gmane.org>
2014-01-23 18:31 ` Andreas Rohner [this message]
2014-01-21 13:59 ` [PATCH v2 2/5] nilfs-utils: cleanerd: add custom error value to enable fast retry Andreas Rohner
[not found] ` <e9d3dd17318a994fe7e2c100368212e0b4029e13.1390310509.git.andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
2014-01-23 17:49 ` Vyacheslav Dubeyko
[not found] ` <FE7FB751-68F4-48C3-A97A-782F4F6E69FE-yeENwD64cLxBDgjK7y7TUQ@public.gmane.org>
2014-01-23 19:08 ` Andreas Rohner
2014-01-21 13:59 ` [PATCH v2 3/5] nilfs-utils: refactoring of nilfs_reclaim_segment to add minblocks param Andreas Rohner
[not found] ` <36ef66ee15b3de8ca00815a6baa7bf6b62ca57d4.1390310509.git.andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
2014-01-24 18:04 ` Ryusuke Konishi
2014-01-21 13:59 ` [PATCH v2 4/5] nilfs-utils: add support for NILFS_IOCTL_SET_SUINFO ioctl Andreas Rohner
[not found] ` <72f8c37258d08ba9793b0c1bb0374dd8efcd4756.1390310509.git.andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
2014-01-23 17:49 ` Vyacheslav Dubeyko
[not found] ` <62FA32DB-83AC-4570-BD73-618C169390FE-yeENwD64cLxBDgjK7y7TUQ@public.gmane.org>
2014-01-23 19:17 ` Andreas Rohner
[not found] ` <52E16AE4.4000303-hi6Y0CQ0nG0@public.gmane.org>
2014-01-25 16:16 ` Vyacheslav Dubeyko
2014-01-24 18:26 ` Ryusuke Konishi
[not found] ` <20140125.032633.184837411.konishi.ryusuke-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
2014-01-24 20:00 ` Andreas Rohner
[not found] ` <52E2C643.3070704-hi6Y0CQ0nG0@public.gmane.org>
2014-01-25 18:52 ` Ryusuke Konishi
2014-01-26 10:00 ` Ryusuke Konishi
[not found] ` <20140126.190004.443429632.konishi.ryusuke-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
2014-01-26 11:24 ` Andreas Rohner
2014-01-21 13:59 ` [PATCH v2 5/5] nilfs-utils: man: add description of min_free_blocks_threshold Andreas Rohner
2014-01-21 14:00 ` [PATCH v2 1/3] nilfs2: add new nilfs_suinfo_update struct Andreas Rohner
[not found] ` <cec6a449ddf5ae9da2928cdddfb96ebcb2789eee.1390312777.git.andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
2014-01-21 14:00 ` [PATCH v2 2/3] nilfs2: add nilfs_sufile_set_suinfo to update segment usage info Andreas Rohner
[not found] ` <2fd48b2d524a59a02bdad13c0c194de3e5b55cc7.1390312777.git.andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
2014-01-24 11:56 ` Ryusuke Konishi
[not found] ` <20140124.205623.400541300.konishi.ryusuke-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
2014-01-24 12:34 ` Andreas Rohner
[not found] ` <52E25DDC.2060502-hi6Y0CQ0nG0@public.gmane.org>
2014-01-24 16:34 ` Ryusuke Konishi
2014-01-21 14:00 ` [PATCH v2 3/3] nilfs2: implementation of NILFS_IOCTL_SET_SUINFO ioctl Andreas Rohner
[not found] ` <6fb5a6d45afca9ae2599c471c0e42805ed1b6c55.1390312777.git.andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
2014-01-24 13:20 ` Ryusuke Konishi
[not found] ` <20140124.222016.110509397.konishi.ryusuke-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
2014-01-24 13:44 ` Andreas Rohner
[not found] ` <52E26E46.3030702-hi6Y0CQ0nG0@public.gmane.org>
2014-01-24 15:23 ` Ryusuke Konishi
2014-01-24 4:56 ` [PATCH v2 1/3] nilfs2: add new nilfs_suinfo_update struct Ryusuke Konishi
[not found] ` <20140124.135635.27780504.konishi.ryusuke-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
2014-01-24 12:11 ` Andreas Rohner
[not found] ` <52E25883.3010307-hi6Y0CQ0nG0@public.gmane.org>
2014-01-24 12:37 ` Ryusuke Konishi
2014-01-22 23:46 ` [PATCH v2 0/5] nilfs-utils: skip inefficient gc operations Michael L. Semon
[not found] ` <52E05863.90604-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2014-01-23 10:25 ` Andreas Rohner
[not found] ` <52E0EE08.3040703-hi6Y0CQ0nG0@public.gmane.org>
2014-01-23 20:57 ` Michael L. Semon
2014-01-23 17:48 ` Vyacheslav Dubeyko
[not found] ` <85EBEC6B-CA69-472A-8DDD-8E056F809EC4-yeENwD64cLxBDgjK7y7TUQ@public.gmane.org>
2014-01-23 18:12 ` Andreas Rohner
[not found] ` <52E15B9E.6040307-hi6Y0CQ0nG0@public.gmane.org>
2014-01-24 8:02 ` Vyacheslav Dubeyko
[not found] ` <FC7F25C5-1E72-4DF5-B860-FBCE36E91EAB-yeENwD64cLxBDgjK7y7TUQ@public.gmane.org>
2014-01-24 14:18 ` Andreas Rohner
[not found] ` <52E27651.6070207-hi6Y0CQ0nG0@public.gmane.org>
2014-01-25 16:33 ` Vyacheslav Dubeyko
[not found] ` <82ACC3FC-BE83-483F-99D8-D13F4D02C58F-yeENwD64cLxBDgjK7y7TUQ@public.gmane.org>
2014-01-26 6:57 ` Ryusuke Konishi
[not found] ` <20140126.155740.56352351.konishi.ryusuke-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
2014-01-26 10:36 ` Andreas Rohner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=52E16010.3050305@gmx.net \
--to=andreas.rohner-hi6y0cq0ng0@public.gmane.org \
--cc=linux-nilfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=slava-yeENwD64cLxBDgjK7y7TUQ@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox