2016-03-07 4 views
1

J'ai un noyau Linux en temps réel et je développe du code avec le noyau. Ce thread est appelé par le gestionnaire d'interruption ethernet. J'ai remarqué que chaque appel de ce fil prend environ 100 jiffies. En ce moment, il lit environ 256 trames ethernet. L'Ethernet est 1Gbps et la vitesse de téléchargement que j'ai mesurée est d'environ 4MB/s. Je pense que la vitesse de 4 Mo/s en utilisant Ethernet 1Gbps est beaucoup trop lent.linux - préemption de thread noyau

J'essaye de profiler ce fil de noyau, parce que je pense que 100 jiffies c'est trop. Je voudrais savoir s'il existe un moyen de dire combien de fois ce thread du noyau a été préempté?

+0

Est-ce votre noyau compilé avec L'option 'RT_PREEMPT' est-elle activée? – LPs

+0

Il n'y a pas une telle option dans le fichier de configuration du noyau, mais uname -a affiche: SMP PREEMPT. – user2699113

+0

Qu'est-ce que cela signifie exactement "appeler" un thread? Votre thread est en train de dormir et le gestionnaire d'interruption l'éveille? Quelle est la durée de votre jiffy (habituellement cela dépend du réglage HZ)? Dans les configurations typiques, 100 jiffies seraient longues et votre NIC devrait être capable de recevoir des dizaines de milliers d'images dans cette période (Gb ethernet est jusqu'à 1,488 million fps). –

Répondre

0

Si vous êtes à l'intérieur du fil, vous pouvez faire un essai avec les éléments suivants printk("preempt count is %d\n",current_thread_info()->preempt_count);

Vous pouvez ajouter ceci à l'entrée du fil et vérifiez la différence de comptage entre les impressions successives