spdlog-rs
spdlog-rs copied to clipboard
Replace `write!()` for integers with `write_str` using `numtoa` crate
Closes #98.
Since the author of itoa decided not to support leading zeros (https://github.com/dtolnay/itoa/issues/61#issuecomment-3341925250), we will only experiment with numtoa to see if there is any performance improvement and decide to use it or not.
I will benchmark this PR on a real machine tomorrow.
Self-reminder
This PR uses the numtoa I forked, so merge this after the upstream PR mmstick/numtoa#40 is merged and released.
Before
test bench_1_file ... bench: 195.69 ns/iter (+/- 13.53)
test bench_2_file_async ... bench: 243.52 ns/iter (+/- 15.84)
test bench_3_rotating_file_size ... bench: 197.99 ns/iter (+/- 35.30)
test bench_4_rotating_daily ... bench: 196.43 ns/iter (+/- 13.12)
test bench_5_level_off ... bench: 1.40 ns/iter (+/- 0.04)
test result: ok. 0 passed; 0 failed; 0 ignored; 5 measured; 0 filtered out; finished in 17.11s
test bench_1_full_formatter ... bench: 83.51 ns/iter (+/- 5.01)
test bench_1_json_formatter ... bench: 166.04 ns/iter (+/- 15.92)
test bench_2_full_pattern_ct ... bench: 138.17 ns/iter (+/- 11.80)
test bench_3_full_pattern_rt ... bench: 140.68 ns/iter (+/- 10.16)
test bench_4_ct_am_pm ... bench: 60.71 ns/iter (+/- 2.18)
test bench_4_ct_column ... bench: 38.33 ns/iter (+/- 3.50)
test bench_4_ct_date ... bench: 75.19 ns/iter (+/- 8.07)
test bench_4_ct_date_short ... bench: 73.92 ns/iter (+/- 7.21)
test bench_4_ct_datetime ... bench: 91.50 ns/iter (+/- 10.28)
test bench_4_ct_day ... bench: 64.51 ns/iter (+/- 5.75)
test bench_4_ct_eol ... bench: 36.24 ns/iter (+/- 2.75)
test bench_4_ct_file ... bench: 37.86 ns/iter (+/- 2.27)
test bench_4_ct_file_name ... bench: 35.97 ns/iter (+/- 1.40)
test bench_4_ct_full ... bench: 96.20 ns/iter (+/- 8.89)
test bench_4_ct_hour ... bench: 64.49 ns/iter (+/- 5.04)
test bench_4_ct_hour_12 ... bench: 64.62 ns/iter (+/- 6.27)
test bench_4_ct_level ... bench: 39.62 ns/iter (+/- 5.53)
test bench_4_ct_level_short ... bench: 39.39 ns/iter (+/- 0.55)
test bench_4_ct_line ... bench: 38.33 ns/iter (+/- 2.99)
test bench_4_ct_logger ... bench: 38.95 ns/iter (+/- 1.88)
test bench_4_ct_microsecond ... bench: 80.18 ns/iter (+/- 19.34)
test bench_4_ct_millsecond ... bench: 73.10 ns/iter (+/- 4.69)
test bench_4_ct_minute ... bench: 62.51 ns/iter (+/- 5.27)
test bench_4_ct_module_path ... bench: 38.88 ns/iter (+/- 3.48)
test bench_4_ct_month ... bench: 64.16 ns/iter (+/- 4.57)
test bench_4_ct_month_name ... bench: 65.89 ns/iter (+/- 5.02)
test bench_4_ct_month_name_full ... bench: 61.89 ns/iter (+/- 2.24)
test bench_4_ct_nanosecond ... bench: 79.60 ns/iter (+/- 8.04)
test bench_4_ct_payload ... bench: 39.04 ns/iter (+/- 3.69)
test bench_4_ct_pid ... bench: 54.29 ns/iter (+/- 8.43)
test bench_4_ct_second ... bench: 63.32 ns/iter (+/- 8.40)
test bench_4_ct_source ... bench: 38.00 ns/iter (+/- 3.07)
test bench_4_ct_tid ... bench: 52.84 ns/iter (+/- 3.61)
test bench_4_ct_time ... bench: 76.61 ns/iter (+/- 0.57)
test bench_4_ct_time_12 ... bench: 75.41 ns/iter (+/- 4.64)
test bench_4_ct_time_short ... bench: 65.90 ns/iter (+/- 3.46)
test bench_4_ct_tz_offset ... bench: 63.68 ns/iter (+/- 5.39)
test bench_4_ct_unix_timestamp ... bench: 64.09 ns/iter (+/- 5.41)
test bench_4_ct_weekday_name ... bench: 64.54 ns/iter (+/- 5.23)
test bench_4_ct_weekday_name_full ... bench: 63.59 ns/iter (+/- 13.02)
test bench_4_ct_year ... bench: 64.11 ns/iter (+/- 5.08)
test bench_4_ct_year_short ... bench: 65.96 ns/iter (+/- 2.07)
test bench_5_rt_am_pm ... bench: 68.51 ns/iter (+/- 2.57)
test bench_5_rt_column ... bench: 41.60 ns/iter (+/- 5.33)
test bench_5_rt_date ... bench: 78.67 ns/iter (+/- 4.34)
test bench_5_rt_date_short ... bench: 76.34 ns/iter (+/- 4.71)
test bench_5_rt_datetime ... bench: 96.80 ns/iter (+/- 4.42)
test bench_5_rt_day ... bench: 68.85 ns/iter (+/- 0.69)
test bench_5_rt_eol ... bench: 38.12 ns/iter (+/- 2.01)
test bench_5_rt_file ... bench: 40.00 ns/iter (+/- 4.37)
test bench_5_rt_file_name ... bench: 39.45 ns/iter (+/- 1.58)
test bench_5_rt_full ... bench: 104.59 ns/iter (+/- 29.35)
test bench_5_rt_hour ... bench: 67.53 ns/iter (+/- 5.98)
test bench_5_rt_hour_12 ... bench: 65.05 ns/iter (+/- 8.57)
test bench_5_rt_level ... bench: 41.95 ns/iter (+/- 3.79)
test bench_5_rt_level_short ... bench: 40.64 ns/iter (+/- 4.11)
test bench_5_rt_line ... bench: 39.84 ns/iter (+/- 2.27)
test bench_5_rt_logger ... bench: 39.57 ns/iter (+/- 1.60)
test bench_5_rt_microsecond ... bench: 78.39 ns/iter (+/- 4.44)
test bench_5_rt_millsecond ... bench: 78.98 ns/iter (+/- 13.18)
test bench_5_rt_minute ... bench: 68.98 ns/iter (+/- 2.88)
test bench_5_rt_module_path ... bench: 38.51 ns/iter (+/- 4.41)
test bench_5_rt_month ... bench: 63.72 ns/iter (+/- 3.06)
test bench_5_rt_month_name ... bench: 65.27 ns/iter (+/- 5.83)
test bench_5_rt_month_name_full ... bench: 65.77 ns/iter (+/- 3.73)
test bench_5_rt_nanosecond ... bench: 81.23 ns/iter (+/- 3.46)
test bench_5_rt_payload ... bench: 42.51 ns/iter (+/- 4.69)
test bench_5_rt_pid ... bench: 57.29 ns/iter (+/- 5.54)
test bench_5_rt_second ... bench: 67.42 ns/iter (+/- 5.39)
test bench_5_rt_source ... bench: 39.34 ns/iter (+/- 1.65)
test bench_5_rt_tid ... bench: 53.23 ns/iter (+/- 5.38)
test bench_5_rt_time ... bench: 76.06 ns/iter (+/- 14.06)
test bench_5_rt_time_12 ... bench: 77.75 ns/iter (+/- 3.35)
test bench_5_rt_time_short ... bench: 73.13 ns/iter (+/- 8.43)
test bench_5_rt_tz_offset ... bench: 68.19 ns/iter (+/- 5.45)
test bench_5_rt_unix_timestamp ... bench: 66.28 ns/iter (+/- 4.74)
test bench_5_rt_weekday_name ... bench: 63.58 ns/iter (+/- 2.88)
test bench_5_rt_weekday_name_full ... bench: 67.71 ns/iter (+/- 2.54)
test bench_5_rt_year ... bench: 67.61 ns/iter (+/- 4.07)
test bench_5_rt_year_short ... bench: 64.77 ns/iter (+/- 3.79)
test result: ok. 0 passed; 0 failed; 0 ignored; 80 measured; 0 filtered out; finished in 40.87s
After
test bench_1_file ... bench: 189.57 ns/iter (+/- 10.78)
test bench_2_file_async ... bench: 229.95 ns/iter (+/- 20.25)
test bench_3_rotating_file_size ... bench: 192.22 ns/iter (+/- 36.45)
test bench_4_rotating_daily ... bench: 196.21 ns/iter (+/- 15.13)
test bench_5_level_off ... bench: 1.18 ns/iter (+/- 0.08)
test result: ok. 0 passed; 0 failed; 0 ignored; 5 measured; 0 filtered out; finished in 19.94s
test bench_1_full_formatter ... bench: 81.42 ns/iter (+/- 6.23)
test bench_1_json_formatter ... bench: 158.59 ns/iter (+/- 7.60)
test bench_2_full_pattern_ct ... bench: 133.51 ns/iter (+/- 6.24)
test bench_3_full_pattern_rt ... bench: 134.88 ns/iter (+/- 4.24)
test bench_4_ct_am_pm ... bench: 64.14 ns/iter (+/- 3.74)
test bench_4_ct_column ... bench: 38.07 ns/iter (+/- 1.73)
test bench_4_ct_date ... bench: 77.01 ns/iter (+/- 1.24)
test bench_4_ct_date_short ... bench: 74.72 ns/iter (+/- 6.27)
test bench_4_ct_datetime ... bench: 91.03 ns/iter (+/- 11.50)
test bench_4_ct_day ... bench: 62.40 ns/iter (+/- 3.50)
test bench_4_ct_eol ... bench: 36.92 ns/iter (+/- 2.60)
test bench_4_ct_file ... bench: 37.74 ns/iter (+/- 2.71)
test bench_4_ct_file_name ... bench: 37.16 ns/iter (+/- 3.98)
test bench_4_ct_full ... bench: 88.13 ns/iter (+/- 16.85)
test bench_4_ct_hour ... bench: 64.53 ns/iter (+/- 2.61)
test bench_4_ct_hour_12 ... bench: 64.61 ns/iter (+/- 6.20)
test bench_4_ct_level ... bench: 38.75 ns/iter (+/- 3.83)
test bench_4_ct_level_short ... bench: 36.93 ns/iter (+/- 3.38)
test bench_4_ct_line ... bench: 37.26 ns/iter (+/- 2.64)
test bench_4_ct_logger ... bench: 39.33 ns/iter (+/- 2.34)
test bench_4_ct_microsecond ... bench: 72.34 ns/iter (+/- 4.61)
test bench_4_ct_millsecond ... bench: 73.38 ns/iter (+/- 6.22)
test bench_4_ct_minute ... bench: 66.58 ns/iter (+/- 7.10)
test bench_4_ct_module_path ... bench: 37.71 ns/iter (+/- 3.11)
test bench_4_ct_month ... bench: 64.75 ns/iter (+/- 6.29)
test bench_4_ct_month_name ... bench: 63.62 ns/iter (+/- 3.71)
test bench_4_ct_month_name_full ... bench: 64.33 ns/iter (+/- 4.71)
test bench_4_ct_nanosecond ... bench: 78.16 ns/iter (+/- 11.47)
test bench_4_ct_payload ... bench: 40.35 ns/iter (+/- 3.08)
test bench_4_ct_pid ... bench: 49.71 ns/iter (+/- 2.72)
test bench_4_ct_second ... bench: 65.37 ns/iter (+/- 3.66)
test bench_4_ct_source ... bench: 40.72 ns/iter (+/- 3.03)
test bench_4_ct_tid ... bench: 48.33 ns/iter (+/- 2.81)
test bench_4_ct_time ... bench: 79.01 ns/iter (+/- 2.31)
test bench_4_ct_time_12 ... bench: 81.32 ns/iter (+/- 2.97)
test bench_4_ct_time_short ... bench: 70.70 ns/iter (+/- 1.68)
test bench_4_ct_tz_offset ... bench: 65.55 ns/iter (+/- 6.20)
test bench_4_ct_unix_timestamp ... bench: 64.96 ns/iter (+/- 6.10)
test bench_4_ct_weekday_name ... bench: 64.89 ns/iter (+/- 4.82)
test bench_4_ct_weekday_name_full ... bench: 61.20 ns/iter (+/- 3.93)
test bench_4_ct_year ... bench: 64.38 ns/iter (+/- 7.70)
test bench_4_ct_year_short ... bench: 63.08 ns/iter (+/- 4.40)
test bench_5_rt_am_pm ... bench: 64.10 ns/iter (+/- 4.56)
test bench_5_rt_column ... bench: 39.66 ns/iter (+/- 2.72)
test bench_5_rt_date ... bench: 76.23 ns/iter (+/- 4.84)
test bench_5_rt_date_short ... bench: 77.28 ns/iter (+/- 8.36)
test bench_5_rt_datetime ... bench: 93.57 ns/iter (+/- 7.00)
test bench_5_rt_day ... bench: 66.75 ns/iter (+/- 5.66)
test bench_5_rt_eol ... bench: 40.22 ns/iter (+/- 3.44)
test bench_5_rt_file ... bench: 40.89 ns/iter (+/- 4.90)
test bench_5_rt_file_name ... bench: 39.95 ns/iter (+/- 2.66)
test bench_5_rt_full ... bench: 95.05 ns/iter (+/- 5.41)
test bench_5_rt_hour ... bench: 66.97 ns/iter (+/- 4.03)
test bench_5_rt_hour_12 ... bench: 65.81 ns/iter (+/- 6.01)
test bench_5_rt_level ... bench: 41.43 ns/iter (+/- 3.01)
test bench_5_rt_level_short ... bench: 38.85 ns/iter (+/- 3.14)
test bench_5_rt_line ... bench: 40.07 ns/iter (+/- 2.22)
test bench_5_rt_logger ... bench: 38.88 ns/iter (+/- 2.91)
test bench_5_rt_microsecond ... bench: 76.23 ns/iter (+/- 3.93)
test bench_5_rt_millsecond ... bench: 72.86 ns/iter (+/- 5.71)
test bench_5_rt_minute ... bench: 67.34 ns/iter (+/- 8.39)
test bench_5_rt_module_path ... bench: 39.34 ns/iter (+/- 2.21)
test bench_5_rt_month ... bench: 66.18 ns/iter (+/- 3.28)
test bench_5_rt_month_name ... bench: 66.66 ns/iter (+/- 6.73)
test bench_5_rt_month_name_full ... bench: 68.75 ns/iter (+/- 7.72)
test bench_5_rt_nanosecond ... bench: 77.68 ns/iter (+/- 4.22)
test bench_5_rt_payload ... bench: 41.69 ns/iter (+/- 4.27)
test bench_5_rt_pid ... bench: 50.46 ns/iter (+/- 3.49)
test bench_5_rt_second ... bench: 65.08 ns/iter (+/- 5.42)
test bench_5_rt_source ... bench: 41.49 ns/iter (+/- 2.13)
test bench_5_rt_tid ... bench: 49.21 ns/iter (+/- 3.86)
test bench_5_rt_time ... bench: 78.55 ns/iter (+/- 5.45)
test bench_5_rt_time_12 ... bench: 82.25 ns/iter (+/- 13.14)
test bench_5_rt_time_short ... bench: 74.34 ns/iter (+/- 3.33)
test bench_5_rt_tz_offset ... bench: 66.45 ns/iter (+/- 3.56)
test bench_5_rt_unix_timestamp ... bench: 65.93 ns/iter (+/- 5.82)
test bench_5_rt_weekday_name ... bench: 66.85 ns/iter (+/- 10.07)
test bench_5_rt_weekday_name_full ... bench: 65.56 ns/iter (+/- 4.89)
test bench_5_rt_year ... bench: 66.90 ns/iter (+/- 2.78)
test bench_5_rt_year_short ... bench: 66.56 ns/iter (+/- 3.48)
test result: ok. 0 passed; 0 failed; 0 ignored; 80 measured; 0 filtered out; finished in 47.06s
cargo -Vv
cargo -Vv
cargo 1.89.0 (c24e10642 2025-06-23)
release: 1.89.0
commit-hash: c24e1064277fe51ab72011e2612e556ac56addf7
commit-date: 2025-06-23
host: x86_64-pc-windows-msvc
libgit2: 1.9.0 (sys:0.20.2 vendored)
libcurl: 8.12.1-DEV (sys:0.4.80+curl-8.12.1 vendored ssl:Schannel)
os: Windows 10.0.19045 (Windows 10 Pro) [64-bit]
Okay, slightly improvement, since this doesn't affect any public API, so we are not in a hurry to include it in v0.5.0.