[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: io support par défaut à 16 bit; pkoi pas 32 ?



Salut,

Giggz a écrit :

bon j'ai trouvé dans la formation debian de l'ecp que lorsque le dma est
activé, il n'y a pas de différence entre l'io suuport à 16 ou à 32 bit. Qqn
peut confirmer ?

Je confirme. L'option 16/32 bits ne s'applique qu'aux transferts en mode PIO. J'explique.

Le bus IDE/ATA est un bus 16 bits, donc le transfert des données en mode PIO se fait traditionnellement par des accès I/O 16 bits du processeur avec le contrôleur hôte, même si le bus PCI est 32 bits. Seulement, de par la nature du protocole du bus PCI, les accès I/O successifs à une même adresse (ce qui est le cas des transferts en mode PIO) ont une très mauvaise efficacité : on ne peut pas faire de transfert en rafale (ce pour quoi le bus PCI est optimisé), il faut recommencer une transaction PCI à chaque mot transféré, ce qui coûte plusieurs cycles bus. La conséquence pratique est qu'il est impossible d'atteindre le débit du mode PIO 4 (16 Mo/s) sur un bus PCI dont le débit peut pourtant atteindre 132 Mo/s. Pour améliorer un peu les choses, la majorité des contrôleurs ATA hôtes supportent les accès sur 32 bits en mode PIO, ce qui permet de transférer deux mots de données de 16 bits à chaque transaction au lieu d'un sans augmenter la durée d'une transaction. Cela permet donc de doubler l'efficacité du bus PCI en mode PIO, ce qui n'est pas du luxe vu les résultats observés. Mais même, les performances restent inférieures à celle du mode MDMA 2.

La distinction entre les options -c1 et -c3, d'après la page de manuel de hdparm, est que -c3 effectue une espèce de synchronisation censée contourner un bug de certains contrôleurs ATA, au prix d'une petite perte de performance.

En mode DMA, la situation est complètement différente. C'est le contrôleur ATA hôte qui prend la maîtrise du bus PCI (busmaster) pour transférer les données directement entre lui et la mémoire centrale, sans intervention du processeur. Cela permet de faire des transferts en rafale sur le bus PCI, c'est-à-dire des transferts multiples à des adresses mémoire consécutives dans une même transaction, avec une bien meilleur efficacité qu'en mode PIO. C'est pourquoi les modes MDMA 2 (Multiword DMA) et UDMA 0 (Ultra DMA) permettent d'atteindre un meilleur débit sur le bus PCI que le mode PIO 4 alors qu'ils permettent théoriquement le même débit sur le bus ATA. Comme le contrôleur ATA définit la largeur des mots lors des transferts en mode DMA, le réglage 16/32 bits, qui ne s'applique qu'au transferts exécutés par le processeur central, n'a aucune influence.

Pour donner un ordre d'idée, voici des mesures de débit que j'avais effectuées. La colonne "Signal." rappelle le débit de signalisation de chaque mode de transfert à titre de comparaison.

  Mode  | 16 bits | 32 bits | Signal.
--------+---------+---------+--------
PIO 0   |   2,1   |   2,2   |  3,3
PIO 1   |   2,1   |   2,2   |  5,2
PIO 2   |   4,4   |   7,1   |  8,3
PIO 3   |   4,4   |   8,2   | 11,1
PIO 4   |   4,4   |   8,2   | 16,7
MDMA 2  |  15,1   |  15,1   | 16,7
UDMA 2  |  28,8   |  28,8   | 33,3

Comparer notamment la différence entre les modes PIO 4 16 bits, PIO 4 32 bits et MDMA 2.



Reply to: