EvilShadow Posted June 9, 2006 Posted June 9, 2006 Возможно, вопрос несколько в другую ветку форума, но поскольку целиком я перерыл только эту, задам здесь же и вопрос. Итак - что такое device polling. Принцип работы, преимущества над прерываниями, и если можно - цифры. Заранее благодарен. Вставить ник Quote
GluckMaker Posted June 9, 2006 Posted June 9, 2006 По прерыванию проц должен, кроме самого обмена данными, выполнить ещё хмурую тучу всяких действий: как минимум, сохранить текущее состояние основной программы, чтобы потом можно было корректно в неё вернуться. Если это делать по каждому чиху, времени на полезную работу может и не хватить. Поэтому, если не требуется срочно реагировать на готовность устройства, можно с некоторой периодичностью (в моменты, удобные процессору) его опрашивать, и, если оно готово, производить обмен. Если поллинг (опрос) не используется, сетёвка генерирует 1 прерывание на каждый пришедший (а иногда и отправленный) пакет. Соответственно, pps ограничивается количеством прерываний, которые может прожевать комп. Вставить ник Quote
st@s Posted June 9, 2006 Posted June 9, 2006 А что, при поллинге, эффективнее работать будет? Или только в случае наличия достаточно большого буфера у сетевухи? Вставить ник Quote
EvilShadow Posted June 9, 2006 Author Posted June 9, 2006 По прерыванию проц должен, кроме самого обмена данными, выполнить ещё хмурую тучу всяких действий: как минимум, сохранить текущее состояние основной программы, чтобы потом можно было корректно в неё вернуться. Если это делать по каждому чиху, времени на полезную работу может и не хватить. То есть время с момента прерывания до момента возвращения в выполнявшийся код состоит из 1. Собственно время обработки пакета 2. Время сохранения контекста задачи, перехода на обработчик, восстановления контекста и возвращения в исходную задачу. Поллинг позволяет сократить время 2. Получается, что время 1 полностью зависит от архитектуры сетевой карты? Поэтому, если не требуется срочно реагировать на готовность устройства, можно с некоторой периодичностью (в моменты, удобные процессору) его опрашивать, и, если оно готово, производить обмен. Разве нет опасности потерять пакеты при переполнении буферы сетевухи? Если поллинг (опрос) не используется, сетёвка генерирует 1 прерывание на каждый пришедший (а иногда и отправленный) пакет. Соответственно, pps ограничивается количеством прерываний, которые может прожевать комп. Верны ли такие расчеты: Для 100Мбит/с == 12.5 мб/с при размере пакета в 500 байт кол-во пакетов будет составлять 50 000. Получается, что в секунду сетевуха генерит 50 000 прерываний? И еще вопрос, оффтоповый, но все же... что произойдет с пакетом, если очередное прерывание застанет процессор в обработчике прерывания сетевухи же? Вставить ник Quote
Barsick Posted June 10, 2006 Posted June 10, 2006 что произойдет с пакетом, если очередное прерывание застанет процессор в обработчике прерывания сетевухи же? Не застигнет, прерывание встанет в очередь, и возникнет после обработки первого Еще вариант - после обработки первого прерывания, но до выхода из него, посмотреть на флаги прерываний, и, при необходимости, обработать эти прерывания, не тратя время на входы - выходы. Имхо это и есть механизм поллинга Вставить ник Quote
Roman Ivanov Posted June 10, 2006 Posted June 10, 2006 Реальные цифры таковы. До 5kpps на polling/napi - пофиг. Начиная с 10kpps - уже НАДО. Релаьные! цифры. 13-15 kpps, marvell/nvidia, no polling - 15-30% cpu. 13-15 kpps, intel e1000, NAPI - 4-7% cpu Вставить ник Quote
ESHKEREEEEEE Posted January 17, 2024 Posted January 17, 2024 Мужики, спасибо. Экзамен по этому сдал на 70 баллов! Вставить ник Quote
Тимур Батрудинов Posted January 17, 2024 Posted January 17, 2024 Хоть экзамен я сдал на 0 баллов, хочу выразить вам благодарность за такую полезную информацию! Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.