Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ByteBuffer] Reduce ARC traffic when reading #1978

Merged

Conversation

fabianfett
Copy link
Member

In my local testing it seems that the compiler adds a retain and release cycle around the use of map here.

Modifications:

  • Replaced the use of .map with a guard let in the byteBuffer read methods.

Result:

Faster reads on ByteBuffer.

@fabianfett
Copy link
Member Author

@swift-nio-bot test perf please

@swift-server-bot
Copy link

performance report

build id: 81

timestamp: Thu Oct 21 14:21:39 UTC 2021

results

nameminmaxmeanstd
write_http_headers 0.004169956 0.00419325 0.0041795288 7.766251903088347e-06
http_headers_canonical_form 0.088055274 0.088587642 0.0882778209 0.00025034319680366374
http_headers_canonical_form_trimming_whitespace 0.168275028 0.169624616 0.1692467345 0.0004882337811140741
http_headers_canonical_form_trimming_whitespace_from_short_string 0.153795174 0.156386562 0.15484314670000002 0.000743439201082233
http_headers_canonical_form_trimming_whitespace_from_long_string 0.237557188 0.239528825 0.23892181529999998 0.0005725042828614283
bytebuffer_write_12MB_short_string_literals 0.541479508 0.54719041 0.5430489761 0.0017167516237856894
bytebuffer_write_12MB_short_calculated_strings 0.541006557 0.543095481 0.5418912588 0.0005578923293874074
bytebuffer_write_12MB_medium_string_literals 0.182454814 0.185974794 0.18474813029999998 0.0010591400016275326
bytebuffer_write_12MB_medium_calculated_strings 0.229726193 0.233763991 0.23103418950000001 0.0012363111472903992
bytebuffer_write_12MB_large_calculated_strings 0.14716342 0.148505867 0.14779702649999998 0.0003641974028372413
bytebuffer_lots_of_rw 0.47108764 0.475915602 0.4724715663 0.0017907100827541404
bytebuffer_write_http_response_ascii_only_as_string 0.040969405 0.04142388 0.0410970444 0.00017065109840464334
bytebuffer_write_http_response_ascii_only_as_staticstring 0.031699864 0.032273651 0.0318890161 0.0002003290520975978
bytebuffer_write_http_response_some_nonascii_as_string 0.041542704 0.043524175 0.0419298697 0.0005995650532103435
bytebuffer_write_http_response_some_nonascii_as_staticstring 0.032287417 0.032818364 0.0324188661 0.00020020785707273273
no-net_http1_10k_reqs_1_conn 0.109151003 0.115363126 0.11112164760000001 0.0022130553501657282
http1_10k_reqs_1_conn 0.603534636 0.613215139 0.6094643499 0.003042471993141479
http1_10k_reqs_100_conns 0.596938067 0.601148947 0.5989975538000001 0.0013332306436497894
future_whenallsucceed_100k_immediately_succeeded_off_loop 0.078860741 0.080310505 0.0795883566 0.0004380483918080299
future_whenallsucceed_100k_immediately_succeeded_on_loop 0.0781298 0.086177285 0.0793687205 0.0024084819765559703
future_whenallsucceed_100k_deferred_off_loop 0.29794172 0.305158389 0.301420458 0.002478755914605993
future_whenallsucceed_100k_deferred_on_loop 0.135919682 0.139265652 0.1368457608 0.0009255819584314108
future_whenallcomplete_100k_immediately_succeeded_off_loop 0.036776816 0.038440418 0.0378630081 0.000529992511073391
future_whenallcomplete_100k_immediately_succeeded_on_loop 0.036233749 0.037457102 0.0367684395 0.0004175333296868504
future_whenallcomplete_100k_deferred_off_loop 0.221114073 0.225355666 0.2228828944 0.0015060956533410213
future_whenallcomplete_100k_deferred_on_loop 0.072958725 0.079199835 0.0739254677 0.0018853156049431698
future_reduce_10k_futures 0.03832076 0.039375941 0.0386847819 0.00031046723969435614
future_reduce_into_10k_futures 0.038530985 0.039488932 0.0389915629 0.00029453830262914066
channel_pipeline_1m_events 0.097142373 0.09731771 0.09721936719999999 6.730169132231618e-05
websocket_encode_50b_space_at_front_1m_frames_cow 0.515673586 0.520921327 0.516471733 0.0015766917713478546
websocket_encode_50b_space_at_front_1m_frames_cow_masking 0.067899326 0.068369067 0.06805335180000001 0.0002114663834018727
websocket_encode_1kb_space_at_front_100k_frames_cow 0.054371187 0.054822104 0.054467691 0.00017908688503690738
websocket_encode_50b_no_space_at_front_1m_frames_cow 0.515659588 0.516209981 0.5159911945 0.00021541721841696981
websocket_encode_1kb_no_space_at_front_100k_frames_cow 0.054346354 0.054782316 0.054494673800000004 0.00019221477404761982
websocket_encode_50b_space_at_front_10k_frames 0.006773438 0.006788569 0.0067806718000000005 5.3915513908338085e-06
websocket_encode_50b_space_at_front_10k_frames_masking 0.083597739 0.084283576 0.08385275480000001 0.0002514137424082724
websocket_encode_1kb_space_at_front_1k_frames 0.000800629 0.000810076 0.0008058901 2.527154853893122e-06
websocket_encode_50b_no_space_at_front_10k_frames 0.006711524 0.006741929 0.0067203561999999994 9.273534443062423e-06
websocket_encode_1kb_no_space_at_front_1k_frames 0.000716539 0.000725509 0.0007205386 2.970895719775087e-06
websocket_decode_125b_100k_frames 0.113300821 0.113899097 0.11361955409999999 0.00026156412002772506
websocket_decode_125b_with_a_masking_key_100k_frames 0.116529743 0.117321292 0.116867138 0.00027744140644307143
websocket_decode_64kb_100k_frames 0.117149372 0.117855565 0.1174712706 0.00026469819010177444
websocket_decode_64kb_with_a_masking_key_100k_frames 0.120513076 0.12149612 0.12113974729999999 0.000293264263531509
websocket_decode_64kb_+1_100k_frames 0.116055353 0.116678255 0.11637806710000001 0.00023951466780389562
websocket_decode_64kb_+1_with_a_masking_key_100k_frames 0.11943286 0.120195038 0.1197772104 0.00024792255236540594
circular_buffer_into_byte_buffer_1kb 0.041226056 0.041659248 0.041335674899999994 0.00014950777100981264
circular_buffer_into_byte_buffer_1mb 0.082269057 0.082755151 0.0824666681 0.00021936225923265562
byte_buffer_view_iterator_1mb 0.020487769 0.020909135 0.0205405942 0.00013004639736374394
byte_to_message_decoder_decode_many_small 0.181182936 0.181855663 0.18167033159999998 0.00018210606918936327
generate_10k_random_request_keys 0.091555963 0.091818431 0.09170850230000001 9.227365683305332e-05

comparison

name current previous winner diff
write_http_headers 0.004169956 0.004173768 current 0%
http_headers_canonical_form 0.088055274 0.087810981 previous 0%
http_headers_canonical_form_trimming_whitespace 0.168275028 0.167407024 previous 0%
http_headers_canonical_form_trimming_whitespace_from_short_string 0.153795174 0.153040553 previous 0%
http_headers_canonical_form_trimming_whitespace_from_long_string 0.237557188 0.237190983 previous 0%
bytebuffer_write_12MB_short_string_literals 0.541479508 0.534323642 previous 1%
bytebuffer_write_12MB_short_calculated_strings 0.541006557 0.532762593 previous 1%
bytebuffer_write_12MB_medium_string_literals 0.182454814 0.178170728 previous 2%
bytebuffer_write_12MB_medium_calculated_strings 0.229726193 0.22884603 previous 0%
bytebuffer_write_12MB_large_calculated_strings 0.14716342 0.147709601 current 0%
bytebuffer_lots_of_rw 0.47108764 0.529788832 current -11%
bytebuffer_write_http_response_ascii_only_as_string 0.040969405 0.040653462 previous 0%
bytebuffer_write_http_response_ascii_only_as_staticstring 0.031699864 0.031083966 previous 1%
bytebuffer_write_http_response_some_nonascii_as_string 0.041542704 0.041689994 current 0%
bytebuffer_write_http_response_some_nonascii_as_staticstring 0.032287417 0.032483179 current 0%
no-net_http1_10k_reqs_1_conn 0.109151003 0.107796223 previous 1%
http1_10k_reqs_1_conn 0.603534636 0.608815231 current 0%
http1_10k_reqs_100_conns 0.596938067 0.599726853 current 0%
future_whenallsucceed_100k_immediately_succeeded_off_loop 0.078860741 0.077595126 previous 1%
future_whenallsucceed_100k_immediately_succeeded_on_loop 0.0781298 0.078733979 current 0%
future_whenallsucceed_100k_deferred_off_loop 0.29794172 0.287749749 previous 3%
future_whenallsucceed_100k_deferred_on_loop 0.135919682 0.13355893 previous 1%
future_whenallcomplete_100k_immediately_succeeded_off_loop 0.036776816 0.035950449 previous 2%
future_whenallcomplete_100k_immediately_succeeded_on_loop 0.036233749 0.035990379 previous 0%
future_whenallcomplete_100k_deferred_off_loop 0.221114073 0.212803552 previous 3%
future_whenallcomplete_100k_deferred_on_loop 0.072958725 0.070250905 previous 3%
future_reduce_10k_futures 0.03832076 0.038230662 previous 0%
future_reduce_into_10k_futures 0.038530985 0.037234258 previous 3%
channel_pipeline_1m_events 0.097142373 0.097675333 current 0%
websocket_encode_50b_space_at_front_1m_frames_cow 0.515673586 0.517624033 current 0%
websocket_encode_50b_space_at_front_1m_frames_cow_masking 0.067899326 0.065880294 previous 3%
websocket_encode_1kb_space_at_front_100k_frames_cow 0.054371187 0.054261527 previous 0%
websocket_encode_50b_no_space_at_front_1m_frames_cow 0.515659588 0.517575663 current 0%
websocket_encode_1kb_no_space_at_front_100k_frames_cow 0.054346354 0.054403566 current 0%
websocket_encode_50b_space_at_front_10k_frames 0.006773438 0.006794661 current 0%
websocket_encode_50b_space_at_front_10k_frames_masking 0.083597739 0.081286349 previous 2%
websocket_encode_1kb_space_at_front_1k_frames 0.000800629 0.000788918 previous 1%
websocket_encode_50b_no_space_at_front_10k_frames 0.006711524 0.006752694 current 0%
websocket_encode_1kb_no_space_at_front_1k_frames 0.000716539 0.000716036 previous 0%
websocket_decode_125b_100k_frames 0.113300821 0.116987663 current -3%
websocket_decode_125b_with_a_masking_key_100k_frames 0.116529743 0.119994401 current -2%
websocket_decode_64kb_100k_frames 0.117149372 0.12104027 current -3%
websocket_decode_64kb_with_a_masking_key_100k_frames 0.120513076 0.124047064 current -2%
websocket_decode_64kb_+1_100k_frames 0.116055353 0.120446876 current -3%
websocket_decode_64kb_+1_with_a_masking_key_100k_frames 0.11943286 0.123589328 current -3%
circular_buffer_into_byte_buffer_1kb 0.041226056 0.041295048 current 0%
circular_buffer_into_byte_buffer_1mb 0.082269057 0.082280352 current 0%
byte_buffer_view_iterator_1mb 0.020487769 0.020486943 previous 0%
byte_to_message_decoder_decode_many_small 0.181182936 0.197320356 current -8%
generate_10k_random_request_keys 0.091555963 0.089960851 previous 1%

significant differences found

@Lukasa Lukasa added the semver/patch No public API change. label Oct 21, 2021
@fabianfett fabianfett merged commit 269a617 into apple:main Oct 21, 2021
@fabianfett fabianfett deleted the ff-reduce-arc-around-bytebuffer-reading branch October 21, 2021 14:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
semver/patch No public API change.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants