Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

lenteur d'un serveur tcp python sous vista

20 réponses
Avatar
Olivier Ravard
Bonjour à tous,

Un simple serveur TCP écrit en python avec la librairie
standard (xml-rpc par exemple) est très lent à répondre
aux requêtes sous vista alors que le même code est beaucoup
plus rapide sous XP. Après quelques tests, j'ai observé
qu'un message de taille importante (par exemple 1 million de
caractères) met entre 1 et 10 fois plus de temps pour être
transmis sur vista par rapport à XP (tests faits en "loopback"
et non sur un réseau local).

Le firewall et autres logiciels liés à la protection réseau
ont auparavant été arrêtés.
Le même test réalisé sur une autre machine vista montre le même
résultat.

Quelqu'un a-t-il observé ce genre de comportement sur vista ?

Merci.

Olivier

10 réponses

1 2
Avatar
Olivier Ravard

Bonjour à tous,

Un simple serveur TCP écrit en python avec la librairie standard
(xml-rpc par exemple) est très lent à répondre aux requêtes sous vista
alors que le même code est beaucoup plus rapide sous XP. Après quelques
tests, j'ai observé qu'un message de taille importante (par exemple 1
million de caractères) met entre 1 et 10 fois plus de temps pour être
transmis sur vista par rapport à XP (tests faits en "loopback" et non
sur un réseau local).

Le firewall et autres logiciels liés à la protection réseau ont
auparavant été arrêtés.


Anti-virus aussi ?
oui


Le même test réalisé sur une autre machine vista montre le même
résultat.

Quelqu'un a-t-il observé ce genre de comportement sur vista ?


Google dit que oui.

http://www.google.fr/search?q=VISTA+network+slow

Le premier lien donne des idées: http://www.neoblog.co.uk/?p
Le second met en cause MacAfee.

... pas lu les autres... et pas pressé de passer à VISTA !
J'avais déjà testé le premier et quand au 2ième, je ne l'ai pas..


A+, bons tests.







Avatar
Olivier Ravard
Bonsoir !

Vista, c'est un excellent OS, une fois qu'on l'a configuré, pour
l'adapter à ses besoins.
As-tu :
- désactivé le parefeu ? Tu indique "oui", mais as-tu arrêté aussi le
filtrage IP ?
- maintenu, configuré, ou désactivé l'UAC ?
- configuré le centre de sécurité ?
- fait le ménage dans les protocoles réseau (Vista gère IPv6 + IPv4 +
la QOS + la virtualisation du réseau + etc.)
- désactivé windows-defender ?
- si tu as un antivirus, l'as-tu configuré pour qu'il laisse passer
FTP sans analyses ?
- as-tu installé les mises à jour ?
Je vais passer tous ces points en revue et re-tester.

As-tu essayé mon script de test sur ta machine ?

Perso, j'estime que Vista est 5 % à 10 % plus lent qu'XP, mais offre
beaucoup de possibilités supplémentaires, notamment en invite de commande.

Je n'ai pas testé de serveur FTP ; mais j'ai des scripts qui envoient du
FTP (environ 10 à 20 Mo par jour). Cela va strictement à la même vitesse
qu'avec XP ou W2K.
Sur des transfert entre deux PC distants, on peut ne pas s'en apercevoir

car le débit en absolu est quand même raisonnable. C'est en loopback que
ça devient gênant (calcul parallèle sur multi-core par exemple), là où le
débit n'est pas limité par la ligne.

@+

Michel Claveau



Avatar
Méta-MCI (MVP)
Bonjour !

Dans le même genre, et pour quelques postes (de) clients, j'ai fait ce
batch :
netsh interface tcp set global autotuninglevel=disabled
netsh interface tcp set global rss=disabled
netsh interface tcp set global congestionprovider=none
netsh interface tcp set global ecncapability=disabled

Dans certains cas, ça accélère nettement le réseau. Mais, ce n'est pas
systématique, car ça dépend de l'architecture et des composants du LAN.

@-salutations

Michel Claveau
Avatar
Méta-MCI \(MVP\)
Bonjour !

As-tu essayé mon script de test sur ta machine ?


Je viens juste d'essayer. Mais, au premier essai, ça plante. Je vais
regarder un peu le code-source...

@+

MCI

Avatar
Méta-MCI \(MVP\)
Re !

J'ai séparé le code en deux parties : client et serveur. J'ai lancé le
serveur dans une console, et le client dans une autre.
Voilà ce qu'affiche le serveur, sur ma machine :
time = 0.0469999313354
time = 0.0309998989105
time = 0.0319998264313
time = 0.0309998989105
time = 0.0310001373291
time = 0.0320000648499
time = 0.0310001373291
time = 0.0469999313354
time = 0.0460000038147
time = 0.0310001373291

En effet, ton code non séparé et non modifié affiche 10 fois :
Original exception was:
Unhandled exception in thread started by
Error in sys.excepthook:


Si ça peut t'aider...

@+

Michel Claveau
Avatar
Olivier Ravard
Bonjour !

As-tu essayé mon script de test sur ta machine ?


Je viens juste d'essayer. Mais, au premier essai, ça plante. Je vais
regarder un peu le code-source...
C'est normal car threads du server se plante lorsque l'appli quitte

et que les clients n'ont pas fini la transaction.
Il faut lancer le script avec python -i nom_du_script.py

@+

MCI




Avatar
Olivier Ravard
Re !

J'ai séparé le code en deux parties : client et serveur. J'ai lancé le
serveur dans une console, et le client dans une autre.
Voilà ce qu'affiche le serveur, sur ma machine :
time = 0.0469999313354
time = 0.0309998989105
time = 0.0319998264313
time = 0.0309998989105
time = 0.0310001373291
time = 0.0320000648499
time = 0.0310001373291
time = 0.0469999313354
time = 0.0460000038147
time = 0.0310001373291

Ah ! Je crois que j'ai un problème avec mon vista. Voici les résultats :

time = 0.0520000457764
time = 0.302999973297
time = 0.496000051498
time = 0.389000177383
time = 1.39600014687
time = 0.759000062943
time = 1.38300013542
time = 2.19500017166
time = 2.12299990654
time = 1.8140001297
!!!
En effet, ton code non séparé et non modifié affiche 10 fois :
Original exception was:
Unhandled exception in thread started by
Error in sys.excepthook:

C'est normal. Voir la réponse dans le message précédent.


Si ça peut t'aider...

@+

Michel Claveau



Avatar
Méta-MCI \(MVP\)
Bonsoir !

Que se passe-t'il, si, pour laisser le couple Python/Vista gérer ses
threads/sockets, tu fais un client comme ça :

for i in range(10):
print i,
time.sleep(0.04)
c.send()

?

@+

Michel Claveau
Avatar
Olivier Ravard
Bonsoir !

Que se passe-t'il, si, pour laisser le couple Python/Vista gérer ses
threads/sockets, tu fais un client comme ça :

for i in range(10):
print i,
time.sleep(0.04)
c.send()
Le premier coup c'était mieux, mais ensuite c'est pareil...

Comme si il avait un problème de pile.

En fait, j'ai remarqué que ce problème arrive pour les gros
packets. Pour les plus petits, la vitesse est quasi identique
à celle d'XP. Pour contourner le problème j'ai donc fait qq
chose du style :

tant qu'il y a des données à transmettre:
j'envoie un petit packet (tailleQ2000 caractères)
j'attend la confirmation que ce packet a bien été reçu

mais le problème n'est que contourné...

?

@+

Michel Claveau




Avatar
Méta-MCI \(MVP\)
Bonjour !

Problème de pile


C'est possible. D'autant plus que Vista est limité, par défaut à 10
connexions TCP/IP simultanées (y compris celles utilisées par l'OS,
skype, la mise à jour anti-virus, etc.)
Perso, j'ai (aussi) fait sauter cette limite.

Perso, j'ai opté pour Twisted-Matrix, car, même si c'est un peu plus
lent dans l'absolu, toute la mécanique des connexions simultanées est
correctement gérée.

@+

MCI

1 2