Проблема производительности с Python, Mongo, Redis и Pingpong порог?Linux

Ответить Пред. темаСлед. тема
Anonymous
 Проблема производительности с Python, Mongo, Redis и Pingpong порог?

Сообщение Anonymous »

Я столкнулся с проблемой, что мои интеграционные тесты получают 3X повышение производительности на Ubuntu 20.04 с ядром 5.4, но на Ubuntu 22.04+ и всех ядрах Linux после 5.10.135 Такого повышения. < /p>
Интеграционные тесты - это Pytest Testsing Python 3.12. /> Тесты, саму приложение, услуги Mongo и Redis работают только локально в Docker Compose, поэтому не существует сетевой связи с другими хостами через реальную физическую сеть. />https://www.kernel.org/pub/linux/kernel ... ngelog-5.1

Код: Выделить всё

commit 4a41f453bedfd5e9cd040bad509d9da49feb3e2c
Author: Wei Wang 
Date:   Fri Jan 25 10:53:20 2019 -0800

tcp: change pingpong threshold to 3
Но в 5.10.135 Commit был by:
https://www.kernel.org/pub/linux/kernel ... ode]commit 77ac046a9ad3b9ee94d02f999d30db3ac106c98c
Author: Wei Wang
Date: Thu Jul 21 20:44:04 2022 +0000

Revert "tcp: change pingpong threshold to 3"

commit 4d8f24eeedc58d5f87b650ddda73c16e8ba56559 upstream.

This reverts commit 4a41f453bedfd5e9cd040bad509d9da49feb3e2c.
[/code]
и в 2023 году введен net.ipv4.tcp_pingpong_thresh, какая по умолчанию составляет 1:
https://www.kernel.org/pub/linux/kernel ... ngelog-6.7

Код: Выделить всё

commit 562b1fdf061bff9394ccd884456ed1173c224fdc
Author: Haiyang Zhang 
Date:   Wed Oct 11 13:30:44 2023 -0700

tcp: Set pingpong threshold via sysctl
< /code>
Проблема заключается в изменении net.ipv4.tcp_pingpong_thresh на 3 не имеет такого же эффекта производительности, как это было до 5.10.135. 77AC046A9AD3B9EE94D02F999D30DB3AC106C98C Прямо перед 562B1FDF061BFF9394CCD8844456ED1173C224FDFrom: Oleg Neumyvakin 
Date: Sun, 27 Jul 2025 20:40:47 +0700
Subject: [PATCH] Fix tcp pingpong threshold

---
net/ipv4/tcp_ipv4.c   |  2 +-
net/ipv4/tcp_output.c | 13 ++++++++-----
2 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c
index f603ad9307af..fe5b1545c499 100644
--- a/net/ipv4/tcp_ipv4.c
+++ b/net/ipv4/tcp_ipv4.c
@@ -3288,7 +3288,7 @@ static int __net_init tcp_sk_init(struct net *net)
net->ipv4.sysctl_tcp_syn_linear_timeouts = 4;
net->ipv4.sysctl_tcp_shrink_window = 0;

-       net->ipv4.sysctl_tcp_pingpong_thresh = 1;
+       net->ipv4.sysctl_tcp_pingpong_thresh = 3;

return 0;
}
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 8e6ebf35ed58..912080d8d80a 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -167,13 +167,16 @@ static void tcp_event_data_sent(struct tcp_sock *tp,
if (tcp_packets_in_flight(tp) == 0)
tcp_ca_event(sk, CA_EVENT_TX_START);

-       tp->lsndtime = now;
-
-       /* If it is a reply for ato after last received
-        * packet, increase pingpong count.
+       /* If this is the first data packet sent in response to the
+        * previous received data,
+        * and it is a reply for ato after last received packet,
+        * increase pingpong count.
*/
-       if ((u32)(now - icsk->icsk_ack.lrcvtime) < icsk->icsk_ack.ato)
+       if (before(tp->lsndtime, icsk->icsk_ack.lrcvtime) &&
+           (u32)(now - icsk->icsk_ack.lrcvtime) < icsk->icsk_ack.ato)
inet_csk_inc_pingpong_cnt(sk);
+
+       tp->lsndtime = now;
}

/* Account for an ACK we sent. */
--
2.43.0
Я создал синтетический тест с Mongo и Redis, используя Python или YCSB, но не видел разницу в производительности.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... -threshold
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»