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
=========================
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)
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)
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)
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
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
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)
# Re: Le monde merveilleux de Linux 2.6
Posté par etienne_basset . En réponse à la dépêche Le monde merveilleux de Linux 2.6. Évalué à 9.
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
-----------------------