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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.