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.