Forum Linux.noyau Vitesse maximum de la stack IP

Posté par  .
Étiquettes : aucune
0
6
déc.
2006
Bonjour a tous,

Je suis en train de travailler sur un projet Gigabit ethernet et, alors que la limite théorique de débit en UDP sur du Gigabit est aux allentour de 114Mo/s, j'ai une frontière bien déterminée à 90Mo/s.

Quelqu'un est il au courrant de cette limitation et sait il comment la contourner ??

Je tourne sur un Athlon 64 2,2Ghz avec 2 Go de Ram, Red Hat Enterprise 4, Noyau 2.6.9-42

Merci !
  • # Il y a plusieurs limites possible.

    Posté par  (site web personnel) . Évalué à 5.

    Il y a qq années un BSDiste m'avait dis que le seul moyen d'avoir la vitesse max d'une carte gigabits était d'avoir du freebsd sur une machine avec port PCI 64 bits. La pile IP BSD était plus rapide que celle de Linux.

    Depuis la puissance des PC a été multiplié par 3. Donc la limitation peut venir de la carte réseau elle-même (buffer trop petit pour limiter les couts, etc...), du réglage de la pile ip (genre le MUA ou un truc qui change la taille typique d'un buffer et donc qui permet d'avaler les latences plus facilement), de l'engorgement du bus PCI (souvent la carte mère dispose de plusieurs bus partagé sur les slots, il vaut mieux éviter de mettre la carte à coté du controleur disque dure, ).

    Ensuite, il y a le problème du driver de la carte elle même qui peut être plus ou moins bien réussi.

    "La première sécurité est la liberté"

    • [^] # Re: Il y a plusieurs limites possible.

      Posté par  . Évalué à 1.

      On peut modifier la valeur de ces buffer sans a avoir a recompiler le noyau ?

      La carte réseau est en pci et pas intégré directement à la carte mère, j'utilise le driver basic r8169 du noyau 2.6.9 (qui apparament n'est pas excelent, j'ai parfois des kernel panics !!)
      Le probleme, c'est que les dernieres version du drivers ne sont pas compatible avec mon noyau, j'ai essayé en vain de le porter mais visiblement pas mal de fonctions du kernel on changé depuis...

      :(
      • [^] # Re: Il y a plusieurs limites possible.

        Posté par  (site web personnel) . Évalué à 2.

        Essaye de regarder la structure des ports de ta cartes mères. Sur ma carte, il y a 2 bus PCI. Sur un il y a 2 slots, les 4 autres se partagent le dernier bus. Si ta carte est seul (regarde la doc, pour éviter que des chipset suplémentaire de cartes mère sois branché dessus), tu devrais avoir plus de perfs.

        "La première sécurité est la liberté"

  • # A priori non

    Posté par  . Évalué à 3.

    A moins que tu n'aie activé une QOS avec netfilter.

    Pour envisager une réponse, je dirai que ca peut venir de trois goulets :

    ton CPU pas assez puissant (un vmstat devrait te le dire)
    Ton bus PCI qui sature : 33 MHz * 4 octets -> 132 Mo/s a partager entre tous tes périphériques PCI, y compris tes disques.
    Ta carte réseau qui sature, en effet si c'est une carte intégrée a ta carte mère, la qualité n'est peut-être pas au top.

    Un article trouvé ici donne une limite réelle proche de celle que tu trouves 700 Mb/s en UDP soit 87,5 Mo/s:
    http://www-sop.inria.fr/mistral/personnel/Christophe.Retiere(...)
    • [^] # Re: A priori non

      Posté par  . Évalué à 1.

      Non je n'ai rien activé au niveau de netfilter en particulier (comment vérifier de manière sure ??)

      VMSTAT me retourne:
      procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
      r b swpd free buff cache si so bi bo in cs us sy id wa
      1 0 0 53920 145180 1646204 0 0 4 4 70 13 0 0 100 0

      Ma carte reseau n'est pas intégrée à la CM mais bon c'est pas du 3COM non plus, c'est un chip RT8169 qui a mon avis est vraiment sans plus.

      En tout cas merci pour le liens qui est interessant ;)
      • [^] # Re: A priori non

        Posté par  . Évalué à 1.


        VMSTAT me retourne:
        procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
        r b swpd free buff cache si so bi bo in cs us sy id wa
        1 0 0 53920 145180 1646204 0 0 4 4 70 13 0 0 100 0

        J'aurai du être plus précis, la première ligne retournée par vmstat est toujours fausse, il faut que tu fasses un

        vmstat 5 10

        pendant que tu balances ta charge réseau pour connaitre ta charge CPU. cette commande demande a vmstat de faire 10 échantillonnages espacés de 5 secondes
        les valeurs qui t'intéressent sont :
        - us : Temps CPU consommé par les processus en espace utilisateur
        - sy : Temps CPU consommé par les processus en espace noyau
        - id : Temps CPU passé à ne rien faire
        - wa : Temps CPU consommé en attente ( attente d'E/S ty)piquement )
        man vmstat pour en savoir plus.

        si id s'approche de 0 c'est que ton CPU est à bloc
        • [^] # Re: A priori non

          Posté par  . Évalué à 1.

          Merci pour la réponse !

          La charge CPU est au max à 45% (ID = 55) et je perds des trames. J'ai augmenté les buffer, mais a ces vitesses, ca devient chaud quand meme...

          Je me demande quand meme si ca ne vient pas d'une limitation du bus PCI car je tourne sur un chipset PCI/PCIx de chez ULI qui n'est certaiement pas optimal...
  • # dumbo

    Posté par  . Évalué à 1.

    t'as activé les jumboframe ?
    • [^] # Re: dumbo

      Posté par  . Évalué à 1.

      Non, mais je ne peux pas les utiliser pour des questions de compatibilités.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.