2016-03-07 2 views
1

У меня есть ядро ​​linux реального времени, и я разрабатываю код с потоком ядра. Этот поток вызывается обработчиком прерываний Ethernet. Я заметил, что каждый вызов этой нити занимает около 100 мифов. За это время он считывает около 256 кадров Ethernet. Ethernet имеет скорость 1 Гбит/с и скорость загрузки, которую я измерил, составляет около 4 МБ/с. Я думаю, что скорость 4 МБ/с, использующая 1 Гбит/с Ethernet, слишком медленная.linux - предел памяти ядра

Я пытаюсь профилировать этот поток ядра, потому что я думаю, что 100 jiffies слишком много. Я хотел бы спросить, есть ли способ сообщить, сколько раз этот поток ядра был выгружен?

+0

Является ли ваше ядро ​​скомпилировано с Включена опция «RT_PREEMPT»? – LPs

+0

В конфигурационном файле ядра такой опции нет, но uname -a показывает: SMP PREEMPT. – user2699113

+0

Что именно означает «называть» поток? Ваша нить спала, и обработчик прерывания ее пробуждает? Как долго ваш jiffy (обычно это зависит от настройки HZ)? При типичных настройках 100 jiffies будут длительное время, и ваш NIC должен иметь возможность получать десятки тысяч кадров в этот период (Gb ethernet до 1.488 миллионов кадров в секунду). –

ответ

0

Если вы находитесь внутри нити, вы можете дать попробовать со следующим printk("preempt count is %d\n",current_thread_info()->preempt_count);

Вы можете добавить это на входе нити и проверить разницу счетчика между последовательными отпечатками