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: