You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2023/05/23 15:25:46 UTC
[couchdb] 01/01: Improve fsync metrics time calculation
This is an automated email from the ASF dual-hosted git repository.
vatamane pushed a commit to branch update-fsync-time-delta
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit d7bbe14d94383e10500097214f6fc5359954a495
Author: Nick Vatamaniuc <va...@gmail.com>
AuthorDate: Tue May 23 11:24:12 2023 -0400
Improve fsync metrics time calculation
Since we're using fractional milliseconds, might as well measure at the
nanosecond resolution.
```
rp(couch_stats:sample([fsync,time])).
[{min,19.572592},
{max,41.60692},
{arithmetic_mean,22.214490860169498},
{geometric_mean,22.134517662321407},
{harmonic_mean,22.068093005211708},
{median,22.147823},
{variance,4.5064974888058495},
{standard_deviation,2.1228512639386325},
{skewness,5.243648789818805},
{kurtosis,43.072222638582026},
{percentile,[{50,22.147823},
{75,23.18369},
{90,23.573497},
{95,23.780686},
{99,27.245643},
{999,41.60692}]},
{histogram,[{20.572592,24},
{21.572592,68},
{22.572592,51},
{23.572592,68},
{24.572592,19},
{25.572592,3},
{26.572592,0},
{27.572592,1},
{28.572592,0},
{29.572592,0},
{30.572592,0},
{31.572592,0},
{32.572592,0},
{33.572592,0},
{34.572592,0},
{35.572592,0},
{36.572592,0},
{37.572592,0},
{38.572592,0},
{39.572592,1},
{40.572592,0},
{41.572592,0},
{42.572592,1}]},
{n,236}]
ok
```
---
src/couch/src/couch_file.erl | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/src/couch/src/couch_file.erl b/src/couch/src/couch_file.erl
index 51b0e69e0..c9d7f2a93 100644
--- a/src/couch/src/couch_file.erl
+++ b/src/couch/src/couch_file.erl
@@ -643,13 +643,14 @@ format_status(_Opt, [PDict, #file{} = File]) ->
[{data, [{"State", File}, {"InitialFilePath", FilePath}]}].
fsync(Fd) ->
- % Our metrics histograms are in milliseconds so stick to that pattern.
- % However we measure the time delta in microseconds so we get fractional
- % microseconds for cases when the disk drives are faster.
- T0 = erlang:monotonic_time(microsecond),
+ T0 = erlang:monotonic_time(),
Res = file:sync(Fd),
- DtUSec = erlang:monotonic_time(microsecond) - T0,
- couch_stats:update_histogram([fsync, time], DtUSec / 1000),
+ T1 = erlang:monotonic_time(),
+ % Since histograms can consume floating point values we can measure in
+ % nanoseconds, then turn it into floating point milliseconds
+ DtNSec = erlang:convert_time_unit(T1 - T0, native, nanosecond),
+ DtMSec = DtNSec / 1000000,
+ couch_stats:update_histogram([fsync, time], DtMSec),
couch_stats:increment_counter([fsync, count]),
Res.