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

izorkin на gmail.com izorkin на gmail.com
Чт Янв 4 16:04:31 UTC 2024


Добрый вечер, Илья.
 
Замерил тесты на физическом сервере, пока без без поддержки 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
 
Анализ профиля для протокола 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, из-за которого проявляется более низкая скорость?
 
 
Вы писали 4 января 2024 г., 15:40:06:

> на вашей виртуальной машине производительность уперлась в особенности реализации QUIC, вы просто выгребли 100% процессора.
> скажем, вы замеряли "сколько можно получить байт в сек на данном цпу для разных реализаций"

> в QUIC Interop тесты весьма и весьма ресурсоемкие, там кроме передачи шифрованного трафика еще дешифруется трафик, захваченный через tshark.
> в тестах, где меньше, чем 9700 - уперлись в особенности реализации, а 9700 - это выглядит как потолок для того железа

> чем замечательны http/2 и http/3 - это протоколы и реализации очень качественно покрытые тестами, что-то совершенно невообразимое для http/1.1

-- 
С уважением,
 Izorkin                          mailto:izorkin на gmail.com
----------- следующая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20240104/126a677e/attachment-0001.htm>


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