uutils
coreutils
BlogDocsChangelog

timeout: Fix performance regression using sigtimedwait

#9173
Comparing
quantum-encoding:fix-timeout-performance
(
57dee85
) with
main
(
363bda0
)
CodSpeed Performance Gauge
0%
Untouched
123
Skipped
5

Benchmarks

Skipped (5)

Passed

cp_large_file[16]
src/uu/cp/benches/cp_bench.rs
CodSpeed Performance Gauge
+1%
343.3 µs341.2 µs
du_wide_tree[(5000, 500)]
src/uu/du/benches/du_bench.rs
CodSpeed Performance Gauge
+1%
11.3 ms11.2 ms
wc_bytes_synthetic[500]
src/uu/wc/benches/wc_bench.rs
CodSpeed Performance Gauge
0%
164.4 µs164 µs
ls_recursive_long_all_balanced_tree[(6, 4, 15)]
src/uu/ls/benches/ls_bench.rs
CodSpeed Performance Gauge
0%
135.8 ms135.5 ms
ls_recursive_long_all_mixed_tree
src/uu/ls/benches/ls_bench.rs
CodSpeed Performance Gauge
0%
2.8 ms2.8 ms
ls_recursive_long_all_deep_tree[(100, 4)]
src/uu/ls/benches/ls_bench.rs
CodSpeed Performance Gauge
0%
3.2 ms3.2 ms
cp_recursive_balanced_tree[(5, 4, 10)]
src/uu/cp/benches/cp_bench.rs
CodSpeed Performance Gauge
0%
72.4 ms72.3 ms
du_summarize_balanced_tree[(5, 4, 10)]
src/uu/du/benches/du_bench.rs
CodSpeed Performance Gauge
0%
8.4 ms8.4 ms
rm_recursive_tree
src/uu/rm/benches/rm_bench.rs
CodSpeed Performance Gauge
0%
13.6 ms13.6 ms
du_all_wide_tree[(5000, 500)]
src/uu/du/benches/du_bench.rs
CodSpeed Performance Gauge
0%
18.2 ms18.2 ms
numfmt_to_si_precision[10000]
src/uu/numfmt/benches/numfmt_bench.rs
CodSpeed Performance Gauge
0%
35.5 ms35.4 ms
ls_recursive_long_all_wide_tree[(15000, 1500)]
src/uu/ls/benches/ls_bench.rs
CodSpeed Performance Gauge
0%
142.1 ms142 ms
tsort_complex_dag[50000]
src/uu/tsort/benches/tsort_bench.rs
CodSpeed Performance Gauge
0%
84.7 ms84.7 ms
numfmt_to_iec[10000]
src/uu/numfmt/benches/numfmt_bench.rs
CodSpeed Performance Gauge
0%
34.2 ms34.2 ms
numfmt_to_si[10000]
src/uu/numfmt/benches/numfmt_bench.rs
CodSpeed Performance Gauge
0%
34.2 ms34.2 ms
numfmt_round_modes[("towards-zero", 10000)]
src/uu/numfmt/benches/numfmt_bench.rs
CodSpeed Performance Gauge
0%
34.6 ms34.6 ms
numfmt_round_modes[("down", 10000)]
src/uu/numfmt/benches/numfmt_bench.rs
CodSpeed Performance Gauge
0%
34.6 ms34.6 ms
numfmt_round_modes[("up", 10000)]
src/uu/numfmt/benches/numfmt_bench.rs
CodSpeed Performance Gauge
0%
34.6 ms34.6 ms
numfmt_from_si[10000]
src/uu/numfmt/benches/numfmt_bench.rs
CodSpeed Performance Gauge
0%
33.3 ms33.3 ms
uniq_heavy_duplicates[10000]
src/uu/uniq/benches/uniq_bench.rs
CodSpeed Performance Gauge
0%
1.9 ms1.9 ms
uniq_case_insensitive[10000]
src/uu/uniq/benches/uniq_bench.rs
CodSpeed Performance Gauge
0%
1.7 ms1.7 ms
cp_preserve_metadata[(5, 4, 10)]
src/uu/cp/benches/cp_bench.rs
CodSpeed Performance Gauge
0%
74.9 ms74.8 ms
uniq_with_count[10000]
src/uu/uniq/benches/uniq_bench.rs
CodSpeed Performance Gauge
0%
1.9 ms1.9 ms
wc_lines_extreme_line_lengths[(100000, 200)]
src/uu/wc/benches/wc_bench.rs
CodSpeed Performance Gauge
0%
1.6 ms1.6 ms
wc_chars_large_line_count[100000]
src/uu/wc/benches/wc_bench.rs
CodSpeed Performance Gauge
0%
994.6 µs994.5 µs
rm_single_file
src/uu/rm/benches/rm_bench.rs
CodSpeed Performance Gauge
0%
106.5 ms106.5 ms
factor_multiple_u64s[2]
src/uu/factor/benches/factor_bench.rs
CodSpeed Performance Gauge
0%
178.2 ms178.1 ms
sort_unique_locale[500000]
src/uu/sort/benches/sort_bench.rs
CodSpeed Performance Gauge
0%
494 ms494 ms
sort_ascii_utf8_locale
src/uu/sort/benches/sort_locale_bench.rs
CodSpeed Performance Gauge
0%
43.1 ms43 ms
rm_force_files
src/uu/rm/benches/rm_bench.rs
CodSpeed Performance Gauge
0%
2.1 ms2.1 ms
wc_lines_large_line_count[500000]
src/uu/wc/benches/wc_bench.rs
CodSpeed Performance Gauge
0%
2.9 ms2.9 ms
rm_multiple_files
src/uu/rm/benches/rm_bench.rs
CodSpeed Performance Gauge
0%
2.3 ms2.3 ms
wc_lines_variable_length[(50, 500)]
src/uu/wc/benches/wc_bench.rs
CodSpeed Performance Gauge
0%
3.4 ms3.4 ms
cksum_default
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
17.7 ms17.7 ms
expand_custom_tabstops[50000]
src/uu/expand/benches/expand_bench.rs
CodSpeed Performance Gauge
0%
37 ms37 ms
sort_ascii_c_locale
src/uu/sort/benches/sort_locale_bench.rs
CodSpeed Performance Gauge
0%
21.5 ms21.5 ms
cksum_raw_output
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
17.7 ms17.7 ms
hashsum_md5_check
src/uu/hashsum/benches/hashsum_bench.rs
CodSpeed Performance Gauge
0%
32 ms32 ms
cksum_crc
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
17.7 ms17.7 ms
numfmt_large_numbers_si[10000]
src/uu/numfmt/benches/numfmt_bench.rs
CodSpeed Performance Gauge
0%
32.9 ms32.9 ms
wc_default_large_line_count[100000]
src/uu/wc/benches/wc_bench.rs
CodSpeed Performance Gauge
0%
50.4 ms50.4 ms
fold_custom_width[50000]
src/uu/fold/benches/fold_bench.rs
CodSpeed Performance Gauge
0%
43.4 ms43.4 ms
sort_dictionary_order[500000]
src/uu/sort/benches/sort_bench.rs
CodSpeed Performance Gauge
0%
1.1 s1.1 s
tsort_linear_chain[1000000]
src/uu/tsort/benches/tsort_bench.rs
CodSpeed Performance Gauge
0%
1.5 s1.5 s
sort_german_locale
src/uu/sort/benches/sort_locale_bench.rs
CodSpeed Performance Gauge
0%
39.1 ms39.1 ms
wc_words_large_line_count[100000]
src/uu/wc/benches/wc_bench.rs
CodSpeed Performance Gauge
0%
47.9 ms47.9 ms
wc_bytes_lines_synthetic[2000]
src/uu/wc/benches/wc_bench.rs
CodSpeed Performance Gauge
0%
120.2 ms120.2 ms
hashsum_sha256_check
src/uu/hashsum/benches/hashsum_bench.rs
CodSpeed Performance Gauge
0%
173.6 ms173.6 ms
expand_many_lines[100000]
src/uu/expand/benches/expand_bench.rs
CodSpeed Performance Gauge
0%
149.9 ms149.9 ms
nl_many_lines[100000]
src/uu/nl/benches/nl_bench.rs
CodSpeed Performance Gauge
0%
79.7 ms79.7 ms
seq_with_step
src/uu/seq/benches/seq_bench.rs
CodSpeed Performance Gauge
0%
13.3 ms13.3 ms
seq_formatted
src/uu/seq/benches/seq_bench.rs
CodSpeed Performance Gauge
0%
97.2 ms97.2 ms
fold_many_lines[100000]
src/uu/fold/benches/fold_bench.rs
CodSpeed Performance Gauge
0%
116.2 ms116.2 ms
cksum_sysv
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
48 ms48 ms
sort_mixed_c_locale
src/uu/sort/benches/sort_locale_bench.rs
CodSpeed Performance Gauge
0%
38.3 ms38.3 ms
cksum_shake256
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
1.9 s1.9 s
wc_words_synthetic[2000]
src/uu/wc/benches/wc_bench.rs
CodSpeed Performance Gauge
0%
11.4 s11.4 s
cksum_sha3
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
1.8 s1.8 s
cksum_sha384
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
1.1 s1.1 s
cksum_sha256
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
1.7 s1.7 s
cksum_sha224
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
1.7 s1.7 s
cksum_sha2
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
1.7 s1.7 s
cksum_shake128
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
1.5 s1.5 s
cksum_sha512
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
1.1 s1.1 s
cksum_blake2b
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
192.9 ms192.9 ms
seq_integers
src/uu/seq/benches/seq_bench.rs
CodSpeed Performance Gauge
0%
26.1 ms26.1 ms
cksum_sm3
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
1.6 s1.6 s
cksum_sha1
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
722.9 ms722.9 ms
unexpand_large_file[10]
src/uu/unexpand/benches/unexpand_bench.rs
CodSpeed Performance Gauge
0%
549.3 ms549.3 ms
cksum_md5
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
317.8 ms317.8 ms
unexpand_many_lines[100000]
src/uu/unexpand/benches/unexpand_bench.rs
CodSpeed Performance Gauge
0%
262 ms262 ms
nl_large_file[10]
src/uu/nl/benches/nl_bench.rs
CodSpeed Performance Gauge
0%
100.9 ms100.9 ms
cksum_bsd
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
128.1 ms128.1 ms
sort_key_field[500000]
src/uu/sort/benches/sort_bench.rs
CodSpeed Performance Gauge
0%
700.1 ms700.1 ms
cksum_crc32b
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
14.1 ms14.1 ms
sort_accented_data[500000]
src/uu/sort/benches/sort_bench.rs
CodSpeed Performance Gauge
0%
362.4 ms362.4 ms
sort_numeric
src/uu/sort/benches/sort_locale_bench.rs
CodSpeed Performance Gauge
0%
23.2 ms23.2 ms
sort_mixed_data[500000]
src/uu/sort/benches/sort_bench.rs
CodSpeed Performance Gauge
0%
327.3 ms327.3 ms
cksum_blake3
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
95.7 ms95.7 ms
sort_case_sensitive[500000]
src/uu/sort/benches/sort_bench.rs
CodSpeed Performance Gauge
0%
174.2 ms174.2 ms
cut_fields_custom_delim
src/uu/cut/benches/cut_bench.rs
CodSpeed Performance Gauge
0%
40.7 ms40.7 ms
sort_german_c_locale
src/uu/sort/benches/sort_locale_bench.rs
CodSpeed Performance Gauge
0%
38.4 ms38.4 ms
sort_case_insensitive[500000]
src/uu/sort/benches/sort_bench.rs
CodSpeed Performance Gauge
0%
278.6 ms278.6 ms
sort_numeric[500000]
src/uu/sort/benches/sort_bench.rs
CodSpeed Performance Gauge
0%
1.2 s1.2 s
cksum_multiple_files
src/uu/cksum/benches/cksum_bench.rs
CodSpeed Performance Gauge
0%
26.5 ms26.5 ms
seq_custom_separator
src/uu/seq/benches/seq_bench.rs
CodSpeed Performance Gauge
0%
28.7 ms28.7 ms
cut_fields_tab
src/uu/cut/benches/cut_bench.rs
CodSpeed Performance Gauge
0%
34.1 ms34.1 ms
cut_bytes
src/uu/cut/benches/cut_bench.rs
CodSpeed Performance Gauge
0%
8.5 ms8.5 ms
sort_long_line[160000]
src/uu/sort/benches/sort_bench.rs
CodSpeed Performance Gauge
0%
1.6 ms1.6 ms
cut_characters
src/uu/cut/benches/cut_bench.rs
CodSpeed Performance Gauge
0%
7.5 ms7.5 ms
hashsum_sha256
src/uu/hashsum/benches/hashsum_bench.rs
CodSpeed Performance Gauge
0%
173.6 ms173.6 ms
mv_directory
src/uu/mv/benches/mv_bench.rs
CodSpeed Performance Gauge
0%
3.5 ms3.5 ms
hashsum_sha512
src/uu/hashsum/benches/hashsum_bench.rs
CodSpeed Performance Gauge
0%
110.8 ms110.8 ms
tsort_tree_dag[(10, 3)]
src/uu/tsort/benches/tsort_bench.rs
CodSpeed Performance Gauge
0%
34.4 ms34.4 ms
sort_reverse_mixed
src/uu/sort/benches/sort_locale_bench.rs
CodSpeed Performance Gauge
0%
39.1 ms39.1 ms
ls_recursive_wide_tree[(10000, 1000)]
src/uu/ls/benches/ls_bench.rs
CodSpeed Performance Gauge
0%
52.6 ms52.6 ms
mv_single_file
src/uu/mv/benches/mv_bench.rs
CodSpeed Performance Gauge
0%
129.6 ms129.6 ms
tsort_wide_dag[100000]
src/uu/tsort/benches/tsort_bench.rs
CodSpeed Performance Gauge
0%
134.7 ms134.8 ms
mv_force_overwrite
src/uu/mv/benches/mv_bench.rs
CodSpeed Performance Gauge
0%
125.1 ms125.1 ms
hashsum_sha1
src/uu/hashsum/benches/hashsum_bench.rs
CodSpeed Performance Gauge
0%
72.5 ms72.5 ms
split_lines
src/uu/split/benches/split_bench.rs
CodSpeed Performance Gauge
0%
5.7 ms5.7 ms
cp_recursive_wide_tree[(6000, 800)]
src/uu/cp/benches/cp_bench.rs
CodSpeed Performance Gauge
0%
189.5 ms189.6 ms
cp_recursive_deep_tree[(120, 4)]
src/uu/cp/benches/cp_bench.rs
CodSpeed Performance Gauge
0%
13.6 ms13.6 ms
hashsum_md5
src/uu/hashsum/benches/hashsum_bench.rs
CodSpeed Performance Gauge
0%
32 ms32 ms
cp_archive_balanced_tree[(5, 4, 10)]
src/uu/cp/benches/cp_bench.rs
CodSpeed Performance Gauge
0%
77.8 ms77.9 ms
ls_recursive_balanced_tree[(6, 4, 15)]
src/uu/ls/benches/ls_bench.rs
CodSpeed Performance Gauge
0%
55.6 ms55.6 ms
split_numeric_suffix
src/uu/split/benches/split_bench.rs
CodSpeed Performance Gauge
0%
5.9 ms5.9 ms
sort_mixed_utf8_locale
src/uu/sort/benches/sort_locale_bench.rs
CodSpeed Performance Gauge
0%
38.8 ms38.8 ms
sort_ascii_only[500000]
src/uu/sort/benches/sort_bench.rs
CodSpeed Performance Gauge
0%
353.4 ms353.6 ms
ls_recursive_mixed_tree
src/uu/ls/benches/ls_bench.rs
CodSpeed Performance Gauge
0%
1.4 ms1.4 ms
split_number_chunks
src/uu/split/benches/split_bench.rs
CodSpeed Performance Gauge
0%
275.3 µs275.5 µs
ls_recursive_deep_tree[(200, 2)]
src/uu/ls/benches/ls_bench.rs
CodSpeed Performance Gauge
0%
2.2 ms2.2 ms
numfmt_padding[(10000, 50)]
src/uu/numfmt/benches/numfmt_bench.rs
CodSpeed Performance Gauge
0%
47.7 ms47.7 ms
mv_multiple_to_dir
src/uu/mv/benches/mv_bench.rs
CodSpeed Performance Gauge
0%
13.1 ms13.1 ms
b64_encode_synthetic
src/uu/base64/benches/base64_bench.rs
CodSpeed Performance Gauge
0%
146.2 µs146.3 µs
sort_reverse_locale[500000]
src/uu/sort/benches/sort_bench.rs
CodSpeed Performance Gauge
0%
361.5 ms362.1 ms
sort_unique_mixed
src/uu/sort/benches/sort_locale_bench.rs
CodSpeed Performance Gauge
0%
39.3 ms39.4 ms
split_bytes
src/uu/split/benches/split_bench.rs
CodSpeed Performance Gauge
0%
505.1 µs506.3 µs
b64_decode_synthetic
src/uu/base64/benches/base64_bench.rs
CodSpeed Performance Gauge
0%
149.4 µs149.7 µs
b64_decode_ignore_garbage_synthetic
src/uu/base64/benches/base64_bench.rs
CodSpeed Performance Gauge
0%
149.9 µs150.2 µs
du_deep_tree[(100, 3)]
src/uu/du/benches/du_bench.rs
CodSpeed Performance Gauge
0%
1.2 ms1.2 ms
du_max_depth_balanced_tree[(6, 4, 10)]
src/uu/du/benches/du_bench.rs
CodSpeed Performance Gauge
0%
32.8 ms32.9 ms
tsort_input_parsing_heavy[5000]
src/uu/tsort/benches/tsort_bench.rs
CodSpeed Performance Gauge
-1%
82.3 ms83.2 ms

Commits

Click on a commit to change the comparison range
Base
main
363bda0
+0.01%
timeout: Fix performance regression using sigtimedwait Resolves #9099 The timeout implementation was using a 100ms polling loop, causing significant performance overhead (~100ms vs GNU's 1.1ms). This commit replaces the polling approach with POSIX sigtimedwait(), which suspends the process until SIGCHLD or timeout occurs, eliminating the busy-wait overhead. Key changes: - Block SIGCHLD/SIGTERM before spawning child - Use sigtimedwait() for efficient signal-based waiting - Properly save and restore signal mask on all exit paths - Handle EINTR correctly with timeout recalculation Performance improvement: - Before: 106.9ms ± 2.0ms - After: 1.2ms ± 0.1ms - GNU: 1.1ms ± 0.1ms Tested with 100+ iterations, maintains 100% reliability.
68d69bd
2 days ago
by quantum-encoding
-0.01%
Fix signal mask inheritance preventing child processes from receiving SIGTERM (6 failing tests fixed)
19e65a8
2 days ago
by quantum-encoding
+0.02%
Fix formatting for CI
5e6ec5b
2 days ago
by quantum-encoding
-71.38%
Replace deprecated EventFlag with EvFlags
71a065c
6 hours ago
by quantum-encoding
+1.82%
Sort imports alphabetically
ec37bd0
6 hours ago
by quantum-encoding
+69.53%
Fix overflow with very large timeouts on macOS
2f191b5
5 hours ago
by quantum-encoding
+0.01%
Add FreeBSD kqueue support
2903644
5 hours ago
by quantum-encoding
-0.01%
Overflow fixes - Cap timespec conversions to prevent EINVAL with huge timeouts
e6d14b8
4 hours ago
by quantum-encoding
+0.03%
Use libc::time_t::MAX instead of i64::MAX
72d5443
3 hours ago
by quantum-encoding
0%
When parsing extremely large durations (like i64::MAX days), the conversion to seconds overflows. Instead of failing, cap the duration at time_t::MAX seconds, which is the maximum valid timeout value.
533a4e7
3 hours ago
by quantum-encoding
-0.01%
Cap duration at time_t::MAX seconds.
256817a
3 hours ago
by quantum-encoding
-0.01%
Check if numeric value is too large before calling parse_time to avoid overflow errors. If value exceeds safe limits, cap at time_t::MAX seconds instead of failing.
57dee85
2 hours ago
by quantum-encoding
© 2025 CodSpeed Technology
Home Terms Privacy Docs