• # Re: Le monde merveilleux de Linux 2.6

    Posté par . En réponse à la dépêche Le monde merveilleux de Linux 2.6. Évalué à 9.

    Un petit texte que j'avais écris sur le 2.6 (en francais !!) avec pleins de fautes et d'omissions, et sans rentrer dans les détails des mécanismes internes (genre sysfs et kobject)
    en espérant que ca peut servir ....


    Nouveau dans le noyau 2.6
    =========================

    http://lwn.net/Articles/17846/(...)

    Objectifs :
    -----------
    Meilleur comportement en cas extrèmes
    Meilleur support des architectures "importantes" (multi-proc, plein de mémoire
    plein de disque, plein de process)
    Entrées sorties asynchrones (pour BDD)
    Network driver API plus résistante
    Intégrer des systèmes de fichiers plus performants
    VM, bien sûr, à améliorer
    Power Management


    Ce que ça change pour le end-user?
    ----------------------------------
    Une plus grande réactivité du système, grace au "preempt kernel" et au low-latency patches.

    meilleur comportement dans cas extrèmes (VM)
    mais demande plus de mémoire (rmap).
    Plus de drivers (USB 2.0, ALSA)
    Plus de performances concernant les entrées/sorties (nouvel élévateur, nouveaux systèmes de fichiers, nouvelle VM)
    Comportement des Serveurs amélioré (JVM) ( O(1) patches, scalability)




    File system
    ===========
    support de XFS
    --------------
    (système de fichier journalisé de SGI, 64 bits)

    support de JFS
    --------------
    encore un système de fichier journalisé


    support de ReiserFS v4
    ----------------------
    a) support de plugins (sécurité, cryptage....)
    b) plus rapide
    c) atomicité et rollback (du monde des BDDs)
    d) de plus en plus proche des BDDs
    http://www.namesys.com(...)


    ext2/ext3 attributs étendus
    ---------------------------
    (ACL, security)
    Les perfs de ext2/3 on aussi été grandement améliorées.

    inclusion de EVMS
    -----------------
    Enterprise Volume Management System.
    Système de fichier virtuel (vfs) permettant une gestion fine des ressources disques, de créer des VFS sur plusieurs disques (assez proche du RAID logiciel, mais plus général)


    Process & scheduling
    ====================
    1) plus de limitations sur le nombre de thread (2048 > autant qu'on veut)

    2) O(1) scheduler
    -----------------
    Le temps d'éxectuion du scheduler ne dépend plus du nombre de process courant;
    c'est surtout utile sur des machines ou il y a plein de process qui tournent.
    Le nouveau scheduler détecte aussi les process interactifs via des statisitiques et s'assure que ceux-ci ne sont pas bouffés par un process qui demande beaucoup de CPU.
    http://www.kerneltrap.org/node.php?id=517(...)

    3) moins de big kernel lock
    ---------------------------
    ==> moins de latence
    c'était un mécanisme qui permettait de s'assurer que la partie de code qu'on est en train d'exécuter ne serait pas stoppée, en utilisant cli/sti notamment.
    C'est remplacé par des lock plus fins

    4) preemption à l'intérieur du kernel
    -------------------------------------
    le kernel devient preemptif, 2 threads peuvent executer la même portion de code
    On utilise des spinlock pour marquer les zones d'exclusion.
    Si le kernel est en train d'éxécuter un tache et qu'il est interrompu par une interruption de priorité supérieure, il va éxécuter cette nouvelle tache
    Ce patch réduit la latence du kernel

    4) native posix thread library for linux
    ----------------------------------------
    ==> multi-threading se fait au niveau du kernel (à la différence de la libpthread actuelle)
    Supporte une nouvelle API de thread POSIX.
    per-thread core dump, mutex, signaux

    grosses améliorations sur les serveurs multi-threadés (Java, apache)

    5) autres algorithmes O(1)
    -------------------------
    PID allocateur
    sys_exit
    VM page aging, laundering


    Virtual mem
    ===========
    1) reverse mapping
    ------------------
    (liste de pages utilées ==> process)
    Dans les VM précédentes, on a une liste process ===> pages utilisées
    rmap ===> chaque pageon associe le process qui l'utilise
    Cela améliore les performances principalement quand le système veut libérer
    les pages dans une zone spécifique, en identifiant quelles pages sont utiles
    ou pas.
    http://linux.html.it/articoli/rik_van_riel_en2.htm(...)

    2) meilleur support des multi-proc
    ----------------------------------

    3) NUMA
    -------
    meilleur support des architectures multi-processeurs avec zones de mémoire
    discontinues (une RAM par processeur)



    Networking
    ==========
    1) NAPI new API
    -------
    ftp://robur.slu.se/pub/Linux/net-development/NAPI/converting-to-NA(...)
    www.cyberus.ca/~hadi/usenix-paper.tgz
    Il s'agit d'une nouvelle interface de programmation des drivers réseaux

    En gros, quand la pile requierd des paquets d'une interface il lance
    dev->poll(device,budget)
    budget etant le nombre de paquets que le drivers peuvent recevoir avant de
    rendre la main a la pile TCP/IP
    Quand on recoit un paquet :
    a) on desactive les interruptions (paquets qui arrive)
    b) on l'ajoute le device a la liste des devices qui peuvent etre "pollées"


    Quand on "polle" un device :
    a) on regarde si on a encore du budget; si non, on renvoie "not done"
    b) on transmet tous les paquets a la pile TCP/IP
    c) on modifie le quota du device
    d) si plus de packets, on réactive les interruptions

    ce mécanisme permet un bien meilleur comportement en cas de charge importante,
    ou la machine peut s'écrouler sous la charge (PII, 60000 paquets/sec)
    le processeur ne passe pas son temps à "acknowledger" les interruptions
    Mais c'est aussi très efficace avec des charges normales.
    De plus le mécanisme de budget permet d'assurer la "fairness" entre les interfaces.

    supporté sur e1000, 3cr990

    2) Intégration de HTB en standard
    ---------------------------------
    HTB = hierarchical token bucklet, un excellent "packet scheduler",
    plus simple que CBQ
    http://luxik.cdi.cz/~devik/qos/htb(...)
    (aussi dans 2.4.20)

    3) IPSEC
    --------
    ce n'est pas freeswan, c'est tiré du USAGI (groupe qui travaille sur ipv6)
    c'est couplé avec l'interface cryptoAPI
    Possibilité d'interfacer avec les démons IKE (pluto) de chez freeswan
    Mais ca marche super bien avec le port du projet KAME *BSD
    http://sourceforge.net/projects/ipsec-tools/(...)

    4) IPv6 mieux supporté
    ----------------------
    - support des addresses anycast
    - IPsec (transport mode et tunnel mode)
    - ICMPv6 Node Information Queries
    - Privacy Extensions (RFC 3041) pour address autoconfiguration
    - better source address selection
    - ISATAP, Intra-Site Automatic Tunnel Addressing Protocol
    - IPv4 et/ou IPv6 over IPv4 tunnel
    - IPv4/IPv6 socket binding sur le même port
    - dropping IPv6 packets with malicious address(es)
    - default route when IPv6 forwarding is enabled
    - meilleur support NDP(Neighbor Discovery Protocol)
    - meilleur support du Stateless Address Auto-configuration
    - RFC2553 / RFC2553bis APIs support (décrit l'interface socket au niveau prog)
    - RFC2292 / RFC2292bis APIs (options avancées sur les sockets ipv6)
    - applications IPv6 (ping, traceroute)

    http://www.networksorcery.com/enp/protocol/ipv6.htm(...)
    http://www.linux-ipv6.org/(...)

    5) meilleur support 802.11
    --------------------------
    Bug fixes......

    6) NFSv4
    --------
    Nouvelle version de NFS

    7) CIFS
    -------
    linux marchera t'il mieux que la bouse de chez Redmond?

    8) CryptoAPI
    ------------
    Une API de cryptographie pour IPSEC, mais aussi les cryptedFS
    aujourd'hui SHA1, MD5, DES,3DES,AES, blowfish
    http://samba.org/~jamesm/crypto/(...)

    9) ebtables
    -----------
    ebtables est l'équivalent de iptables pour se qui est du filtrage sur un linux
    en mode bridge; (règles par MAC, brouting)

    http://users.pandora.be/bart.de.schuymer/ebtables/(...)

    10) TCP segmentation
    --------------------
    permet de d'envoyer a la carte des buffers plus grands que le MTU (64k); C'est la carte elle-même qui se charge de couper les paquets en "petits bouts" en utilisant le header global ==> moins de traitement pour le kernel
    (c'est pas de la fragmentation)
    Supporté sur e1000, 3com 3cr990.


    11) support du MPLS
    -------------------
    Linux 2.6 devrait intégrer en standard le support du MPLS


    USB
    ===
    2.0

    Divers
    ======
    User mode linux
    Son : ALSA
    AMD 64 bits
    PPC 64 bits
    nouveau système de gestion des modules (ca se fait dans le kernel)


    4) Software suspend
    -------------------
    Permet de sauvegarder l'état mémoire de la machine de le sauvegarder
    sur le swap; au reboot d'après, retour dans le même état

    http://falcon.sch.bme.hu/~seasons/linux/swsusp.html(...)
    http://fchabaud.free.fr/English/(...)

    5) ACPI
    -------
    advanced configuration power interface
    http://acpi.sourceforge.net/(...)
    http://www.columbia.edu/~ariel/acpi/acpi_howto.txt(...)


    Block device
    ============
    1) New IO scheduler
    -------------------
    portion de code qui décide l'ordre dans lequel les requètes disque seront processées
    Maintenant, on a un "anticipory scheduler" qui fait cela :
    quand il y a un "read", on le met dans les premiers dans la queue. Apres
    l'avoir servi, on ne fait rien pendant un cours instant (ie on ne repos
    itionne pas les tete pour effectuer un write) au cas ou il y a aurait
    un autre read près (ce qui est tres fréquent empiriquement). Si c'est le cas,
    on le sert immédiatement, sinon on timeout on reprend.
    Ce scheduler booste de facon tres impressionante les perfs I/O
    (ordre de grandeur minutes ==> sec pour read quand il y a des write etc..)
    Le seul cas un peut déterioré est quand il a un streaming de read et
    qu'on veut faire un write .
    en général, l'AS est meilleur sauf pour les BDD

    http://www.kerneltrap.org/node.php?id=567(...)
    http://www.cs.rice.edu/~ssiyer/r/antsched/(...)

    2) UDF write support CD-R/W
    ---------------------------
    comment graver ces CD R/W comme un porc......

    3) asynchronous IO
    ------------------
    (en gros une app lance une requète IO et n'attend pas qu'elle revienne); elle est notifié plus tard par signal
    Utile pour BDD, serveurs... (avant, on utilisait des threads pour simuler cela
    ce qui etait très peu efficace)

    4) plus de limite a 2TB
    -----------------------