From: Coly Li <colyli@suse.de>
To: David Laight <David.Laight@ACULAB.COM>,
"Gustavo A. R. Silva" <gustavoars@kernel.org>,
Kent Overstreet <kent.overstreet@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Christina Jacob <cjacob@marvell.com>,
Hariprasad Kelam <hkelam@marvell.com>,
Sunil Goutham <sgoutham@marvell.com>,
Jesse Brandeburg <jesse.brandeburg@intel.com>
Cc: "linux-bcache@vger.kernel.org" <linux-bcache@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
dongdong tao <dongdong.tao@canonical.com>
Subject: Re: [PATCH][next] bcache: Use 64-bit arithmetic instead of 32-bit
Date: Sat, 13 Feb 2021 00:01:47 +0800 [thread overview]
Message-ID: <cb3ffad1-e877-c6f9-168e-da7f55c59485@suse.de> (raw)
In-Reply-To: <0a2eb2e143ad480cbce3f84c3c920b5f@AcuMS.aculab.com>
On 2/12/21 11:31 PM, David Laight wrote:
>>> if (c->gc_stats.in_use <= BCH_WRITEBACK_FRAGMENT_THRESHOLD_MID) {
>>> - fp_term = dc->writeback_rate_fp_term_low *
>>> + fp_term = (int64_t)dc->writeback_rate_fp_term_low *
>>> (c->gc_stats.in_use - BCH_WRITEBACK_FRAGMENT_THRESHOLD_LOW);
>>> } else if (c->gc_stats.in_use <= BCH_WRITEBACK_FRAGMENT_THRESHOLD_HIGH) {
>>> - fp_term = dc->writeback_rate_fp_term_mid *
>>> + fp_term = (int64_t)dc->writeback_rate_fp_term_mid *
>>> (c->gc_stats.in_use - BCH_WRITEBACK_FRAGMENT_THRESHOLD_MID);
>>> } else {
>>> - fp_term = dc->writeback_rate_fp_term_high *
>>> + fp_term = (int64_t)dc->writeback_rate_fp_term_high *
>>> (c->gc_stats.in_use - BCH_WRITEBACK_FRAGMENT_THRESHOLD_HIGH);
>>> }
>>> fps = div_s64(dirty, dirty_buckets) * fp_term;
>>>
>>
>> Hmm, should such thing be handled by compiler ? Otherwise this kind of
>> potential overflow issue will be endless time to time.
>>
>> I am not a compiler expert, should we have to do such explicit type cast
>> all the time ?
>
Hi David,
I add Dongdong Tao Cced, who is author of this patch.
Could you please offer me more information about the following lines?
Let me ask more for my questions.
> We do to get a 64bit product from two 32bit values.
> An alternative for the above would be:
> fp_term = c->gc_stats.in_use - BCH_WRITEBACK_FRAGMENT_THRESHOLD_HIGH;
> fp_term *= dc->writeback_rate_fp_term_high;
The original line is,
fp_term = dc->writeback_rate_fp_term_high * (c->gc_stats.in_use -
BCH_WRITEBACK_FRAGMENT_THRESHOLD_HIGH)
The first value dc->writeback_rate_fp_term_high is unsigned int (32bit),
and the second value (c->gc_stats.in_use -
BCH_WRITEBACK_FRAGMENT_THRESHOLD_HIGH) is unsigned int (32bit) too. And
fp_term is 64bit, if the product is larger than 32bits, the compiler
should know fp_term is 64bit and upgrade the product to 64bit.
The above is just my guess, because I feel compiling should have the
clue for the product upgrade to avoid overflow. But I almost know
nothing about compiler internal ....
>
> I hope BCH_WRITEBACK_FRAGMENT_THRESHOLD_LOW is zero :-)
Why BCH_WRITEBACK_FRAGMENT_THRESHOLD_LOW being zero can be helpful to
avoid the overflow ? Could you please to provide more detailed information.
I am not challenging you, I just want to extend my knowledge by learning
from you. Thanks in advance.
Coly Li
next prev parent reply other threads:[~2021-02-12 16:03 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-12 12:50 Gustavo A. R. Silva
2021-02-12 14:22 ` Coly Li
2021-02-12 15:31 ` David Laight
2021-02-12 16:01 ` Coly Li [this message]
2021-02-12 16:42 ` David Laight
2021-02-13 15:41 ` Coly Li
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=cb3ffad1-e877-c6f9-168e-da7f55c59485@suse.de \
--to=colyli@suse.de \
--cc=David.Laight@ACULAB.COM \
--cc=cjacob@marvell.com \
--cc=davem@davemloft.net \
--cc=dongdong.tao@canonical.com \
--cc=gustavoars@kernel.org \
--cc=hkelam@marvell.com \
--cc=jesse.brandeburg@intel.com \
--cc=kent.overstreet@gmail.com \
--cc=linux-bcache@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sgoutham@marvell.com \
/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
Powered by JetHome