Re: nginxQuic: скорость загрузки при активации kTLS

Илья Шипицин chipitsine на gmail.com
Чт Янв 4 16:44:26 UTC 2024


чт, 4 янв. 2024 г. в 17:04, <izorkin на gmail.com>:

> Добрый вечер, Илья.
>
>
>
> Замерил тесты на физическом сервере, пока без без поддержки kTLS.
>
> Оказывается в тестах на виртуальной машине я неправильно интерпретировал
> интерпретировал скорости,
>
> которые выводила утилита curl. Вместо МБит/сек там идёт МБайт/сек.
>
>
>
> Результаты тестов при скачивании файла с самого сервера:
>
>  - HTTP/1.1 - ~3 504,14 МБит/сек (CPU load 100%)
>
>  - HTTP/2 - ~3 568,57 МБит/сек (CPU load 100%)
>
>  - HTTP/3 - ~2 872,09 МБит/сек (CPU load 58-62%)
>
>
>
> Результаты тестов при скачивании файла по локальной сети:
>
>  - HTTP/1.1 - ~2 325,03 МБит/сек (CPU load 45-50%)
>
>  - HTTP/2 - ~2 333,56 МБит/сек (CPU load 45-50%)
>
>  - HTTP/3 - ~1 350,26 МБит/сек (CPU load 50-55%)
>
>
> Анализ профиля для протокола HTTP/3 при скачивании файла с самого сервера:
>
>     482  27.1%  27.1%      482  27.1% __sendmsg
>
>     473  26.6%  53.7%      473  26.6% __libc_pread64
>
>     367  20.6%  74.4%      367  20.6% _aesni_ctr32_ghash_6x
>
>     151  8.5%  82.8%      151  8.5% __memmove_avx_unaligned_erms
>
>       58  3.3%  86.1%      58  3.3% epoll_wait
>
>       31  1.7%  87.9%      31  1.7% __recvmsg
>
>       10  0.6%  88.4%      93  5.2% ngx_quic_write_buffer
>
>       8  0.4%  88.9%      100  5.6% ngx_quic_recvmsg
>
>       7  0.4%  89.3%        7  0.4% __strcmp_avx2
>
>       7  0.4%  89.7%        7  0.4% ngx_quic_read_buffer
>
>       6  0.3%  90.0%      115  6.5% ngx_http_charset_body_filter
>
>       6  0.3%  90.3%      108  6.1% ngx_http_write_filter
>
>       6  0.3%  90.7%      82  4.6% ngx_quic_create_frame
>
>       6  0.3%  91.0%        8  0.4% ossl_gcm_set_ctx_params
>
>       5  0.3%  91.3%      19  1.1% EVP_CIPHER_CTX_ctrl
>
>       5  0.3%  91.6%        5  0.3% aesni_ctr32_encrypt_blocks
>
>       5  0.3%  91.8%        5  0.3% ngx_quic_alloc_buf
>
>       5  0.3%  92.1%      15  0.8% ngx_quic_handle_ack_frame_range
>
>       5  0.3%  92.4%      59  3.3% ngx_quic_handle_datagram
>
>       4  0.2%  92.6%      10  0.6% CRYPTO_gcm128_encrypt_ctr32
>


не совсем понятно, что означают эти проценты.
например " 482  27.1%  27.1%      482  27.1% __sendmsg" - что в первом и
что во втором столбце


>
>
> Анализ профиля для протокола HTTP/3 при скачивании файла по локальной сети:
>
>     953  33.5%  33.5%      953  33.5% __sendmsg
>
>     516  18.1%  51.6%      516  18.1% __libc_pread64
>
>     388  13.6%  65.2%      388  13.6% _aesni_ctr32_ghash_6x
>
>     128  4.5%  69.7%      128  4.5% __memmove_avx_unaligned_erms
>
>     128  4.5%  74.2%      128  4.5% epoll_wait
>
>     101  3.5%  77.7%      101  3.5% __recvmsg
>
>       24  0.8%  78.6%      306  10.7% ngx_quic_recvmsg
>
>       21  0.7%  79.3%      21  0.7% __strcmp_avx2
>
>       20  0.7%  80.0%      76  2.7% ngx_quic_create_frame
>
>       19  0.7%  80.7%      122  4.3% ngx_http_write_filter
>
>       18  0.6%  81.3%      18  0.6% aesni_encrypt
>
>       15  0.5%  81.8%      413  14.5% aesni_gcm_encrypt
>
>       14  0.5%  82.3%      56  2.0% EVP_CIPHER_CTX_ctrl
>
>       14  0.5%  82.8%    1690  59.3% ngx_quic_output
>
>       13  0.5%  83.3%      23  0.8% ossl_gcm_set_ctx_params
>
>       12  0.4%  83.7%      13  0.5% aesni_ctr32_encrypt_blocks
>
>       12  0.4%  84.1%      627  22.0% ngx_quic_crypto_common
>
>       12  0.4%  84.6%      16  0.6% ngx_quic_read_buffer
>
>       11  0.4%  84.9%      678  23.8% ngx_output_chain
>
>       11  0.4%  85.3%      695  24.4% ngx_quic_output_packet
>
>
>
> По итогу результаты значительно отличаются от тестов на виртуальной
> машине. На виртуальной машине при обработке
>
> протокола QUIC процесс упирался в 100% и выдавал скорость больше, чем при
> обработке протокола HTTP 1.1, а на
>
> реальном физическом месте держится в районе 60%, и просадка скорости
> значительная.
>
> Может быть где-то быть узкое место в обработке QUIC, из-за которого
> проявляется более низкая скорость?
>

смотрите. я предлагал потестировать quictls-1.1.1, вы проигнорировали.
более того, вы сняли профиль для http/1.1 - там видно, что использууется
sendfile, для http/3 используются совсем другие функции

т.е. вы буквально видите, что механизмы отдачи для http/1.1 и http/3 разные.

возможно, что в этом различии заключается то самое узкое место, про которое
вы говорите.

вы ожидаете прямого ответа "да, там где-то есть узкое место".
ок, вы его услышали. на этом исследование закончено )) ?


>
>
>
>
> Вы писали 4 января 2024 г., 15:40:06:
>
>
> на вашей виртуальной машине производительность уперлась в особенности
> реализации QUIC, вы просто выгребли 100% процессора.
> скажем, вы замеряли "сколько можно получить байт в сек на данном цпу для
> разных реализаций"
>
> в QUIC Interop тесты весьма и весьма ресурсоемкие, там кроме передачи
> шифрованного трафика еще дешифруется трафик, захваченный через tshark.
> в тестах, где меньше, чем 9700 - уперлись в особенности реализации, а 9700
> - это выглядит как потолок для того железа
>
> чем замечательны http/2 и http/3 - это протоколы и реализации очень
> качественно покрытые тестами, что-то совершенно невообразимое для http/1.1
>
>
> --
> С уважением,
>  Izorkin                          mailto:izorkin на gmail.com
> <izorkin на gmail.com>
> _______________________________________________
> nginx-ru mailing list
> nginx-ru на nginx.org
> https://mailman.nginx.org/mailman/listinfo/nginx-ru
>
----------- следующая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20240104/4357ddef/attachment.htm>


Подробная информация о списке рассылки nginx-ru