Tests de vitesse Specs


Méthode:

Les tests sont faits sur Windows avec un programme en C++. Le programme utilise l'horloge précise de Windows (c'est a dire que le programme se déclare comme processus de haute priorité et compte le nombre de coups du processeur. On vérifie avec l'oscilloscope que le temps mesuré avec le PC est bien le temps réel). La précision sur le temps est environ de 5 %.

On observe que en règle générale, une lecture de 32 bits par le Specs prend 1 microseconde (us) et une écriture 0.2 us, les valeurs sont indépendantes du PC. Le reste est le temps passé dans les différentes librairies software qui dépend du PC et aussi le temps de processing du Slave.

Les mesures ici sont faites avec le PC test Specs du CERN (2.8 GHz, 512 MB RAM).

Les mesures sont aussi faites avec le même programme mais en exécutent sur le même PC un programme prenant environ 80 % du CPU. (Tests CPU Load)

 

Registre Slave Interne:

 

Test Temps pour 1 lect. ou écr. (us) Utilisation CPU
80 écritures

1.7

23 %

80 écritures + CPU Load

1.9

 
10000 écritures [1]

6.8

50 %

10000 écritures + CPU Load [1]

6.8

 
80 lectures

18.5

44 %

80 lectures + CPU Load

20.1

 
10000 lectures [2]

18.5

50 %

10000 lectures + CPU Load

20.3

 

[1] Quand on écrit plus de ~ 500 fois à la suite, la FIFO d'émission du Specs qui se remplit plus vite qu'elle ne se vide devient pleine et il faut attendre avant de pouvoir écrire dedans. Le statut d'autorisation d'écriture est lu ~4 fois avant d'avoir assez de place pour pouvoir écrire à nouveau dedans. Le fait de lire plusieurs fois ce statut consomme du temps et du CPU. Mais c'est une situation irréaliste puisque on ne lit pas les registres un grand nombre fois de suite comme cela.

[2] En lecture, [1] n'est plus vrai puisque pendant le temps de la lecture, la FIFO d'émission a le temps de se vider.

[3] Avec le PC de test Specs du LAL (730 MHz, 130 MB de RAM), le temps pour une écriture est 3.9 us et pour une lecture, 20 us.

 

Registre Slave Mezzanine:

Mezzanine avec ~2 m de cables.

Test Temps pour 1 lect. ou écr. (us) Utilisation CPU
80 écritures

1.7

25 %

80 écritures + CPU Load

2.1

 
10000 écritures [1]

6.8

50 %

10000 écritures + CPU Load [1]

6.8

 
80 lectures

19.4

44 %

80 lectures + CPU Load

21.4

 

 

I2c:

Composant I2c adressé par l'intermédiaire de la mezzanine sur une croquette.

Ecriture:

Test Temps pour 1 lect. ou écr. (us) Utilisation CPU Temps avec CPU Load (us)
écriture 1 byte

5.1

15 %

12.8

écriture 2 bytes

5.4

   
écriture 3 bytes

5.5

20 %

 
écriture 4 bytes

6

20 %

 

écriture 5 bytes

6.2

16 %

12.7

écriture 10 bytes

8.6

16 %

15.9

écriture 15 bytes

10.7

16 %

19.7

En écriture, les temps sont les mêmes quelque soit la vitesse du Specs.

Lecture:

Test

Specs vitesse 0

Specs vitesse 1

Specs vitesse 2

Specs vitesse 3

Specs vitesse 0 CPU Load

 

Temps (us)

CPU

Temps (us)

CPU

Temps (us)

CPU

Temps (us)

CPU

Temps (us)

1 byte

[2]

 

 

           
2 bytes

50.7

       18 %

82.9

      18 %

149.1

      23 %

281.1

      27 %

61.9

3 bytes

60.3

    20 %

           

72.7

4 bytes

71.3

    21 %

121.9

   16 %

223.9

24 %

427.9

29 %

82.9

5 bytes

[2]

 

 

         

 

10 bytes

135

    23 %

239.6

25 %

449.5

30 %

869.5

32 %

147.5

15 bytes

188

    21 %

           

201.1

[1] Specs vitesse 2 signifie fréquence divisée par 2^2 pour l'I2C.

[2] Il doit y avoir un effet de bord dans la logique du enable read quand on lit 1, 5, 9, 13, ... bytes par I2C (soit dans le Specs, soit dans la librairie).

[3] Approx., il y a un temps incompressible de traitement Master, Slave puis:

A Faire

 

Dernière mise à jour : 01/06/2005