LINUX.ORG.RU

Что происходит в ядре, когда драйвер делает udelay?

 , ,


1

3

В драйвере, который я сейчас патчу, обильно разбросаны udelay, что бы попасть в тайминги железки на параллельном порту.

Когда драйвер делает udelay, то он остается на ядре и занимает его? Другие драйверы или юзерские программы не могут пользоваться этим ядром?

Или всё таки внутри ядра есть какой-нибудь шедулер, который займет это время чем-то ещё?

★★★★★

grep -R -n udelay Documentation/

:)

Harald ★★★★★
()
Ответ на: комментарий от xpahos

А драйвер априори RT задача? А аффинити для дров не бывает? А чего произойдёт по прерыванию от таймера? А что будет если на этом же ядре запущен RT поток в юзерспейсе?

pon4ik ★★★★★
()
Ответ на: комментарий от Harald

Сраные мобилы затормаживают линуксовое ядро.

anonymous
()
Ответ на: комментарий от pon4ik

А драйвер априори RT задача?

Драйвер вообще не задача.

А аффинити для дров не бывает?

Нет. Аффинити бывает только для нитей.

А чего произойдёт по прерыванию от таймера?

То, что должно.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

О! А тебя не банили случайно? Чет мне казалось я видал твой ник перечёркнутым…

За пояснения спасибки, но для полноты картины - а как тогда планируется код драйвера?

То, что должно.

Т.е. вызов планировщика, или есть варианты?

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Последние месяцы я хожу на ЛОР только тогда, когда меня кастуют. Но меня не банили.

как тогда планируется код драйвера?

Строго говоря, код драйвера не планируется никак. Никакой код вообще не планируется - планируется нить исполнения. Нити, исполняющие код драйвера, планируются на общих основаниях, если не отключили вытеснение и не впали в uninterruptible sleep.

Т.е. вызов планировщика, или есть варианты?

Т.е. вызов top half обработчика таймерного прерывания. Дальше возможны варианты - насколько я знаю, в обычном ядре top half ставит заявку на исполнение bottom half, а в PREEMPT_RT top half (если она так называется - не помню точно) разблокирует нить обработчика, и эта нить планируется на общих основаниях.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

так я чего-то не понял: в современном компьютере ядро жжет кучу тактов вхолостую просто для того, что бы удовлетворять капризному железу, которое хочет что бы в него засунули байт не раньше, чем через N микросекунд?

max_lapshin ★★★★★
() автор топика
Ответ на: комментарий от max_lapshin

в современном компьютере ядро жжет кучу тактов вхолостую просто для того, что бы удовлетворять капризному железу, которое хочет что бы в него засунули байт не раньше, чем через N микросекунд?

Если коротко и неточно, то да. У тебя есть другие предложения? При том, что железо не будет работать (незаметно так), если «сунуть в него байт» раньше, чем через N мкс.

P.S. А еще есть MMIO на PCI.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

При том, что железо не будет работать (незаметно так), если «сунуть в него байт»

это наверное поправить уже никак, потому что так проще сделать железо.

Например, можно попробовать сделать планировщик таких посылок в ядре, который постоянно будет что-то слать, расставляя такие посылки по очереди во времени.

Но полагаю, что это не очень интересно, потому что накладные расходы на его управление будут выше, чем эти микросекунды.

Т.е. мы продолжаем платить за гибкость таким перерасходом ресурсов.

max_lapshin ★★★★★
() автор топика
Ответ на: комментарий от max_lapshin

При том, что железо не будет работать (незаметно так), если «сунуть в него байт»

это наверное поправить уже никак

В общем, да. Приходится работать с тем, что есть.

накладные расходы на его управление будут выше, чем эти микросекунды.

Поэтому короткие задержки и делаются через занятое ожидание.

Т.е. мы продолжаем платить за гибкость таким перерасходом ресурсов.

Я думаю, что в среднепотолочном случае «устройству нужны паузы между записями» мы платим не за гибкость, а за дешевизну устройства или процесса разработки этого устройства. В MMIO - пожалуй да, за гибкость.

tailgunner ★★★★★
()
Ответ на: комментарий от max_lapshin

Я тебе больше скажу - отдельные личности и в юзерспейсе в софт риалтайме таким балуются, например в угоду лучшего и более честного распределения ресурса между равноправными сущностями, или что бы подгадать под определённое событие. У busy wait точность выше чем у nanosleep, даже если всё ядро в твоём распоряжении, притом может до смешного доходить - в случае busy wait спишь с точностью до стоимости вызова gmtime(примерно 100ns на десктопном железе вроде) или rdtsc + немного арфиметики(что почти то же самое на самом деле), а с системным вызовом и ядром в наличии промахиваться на 5-10us.

Ещё, люблю приводить примеры типа SO_BUSY_POLL, прям запала мне в душу эта опция.

pon4ik ★★★★★
()
Ответ на: комментарий от max_lapshin

так я чего-то не понял: в современном компьютере ядро жжет кучу тактов вхолостую просто для того, что бы удовлетворять капризному железу, которое хочет что бы в него засунули байт не раньше, чем через N микросекунд?

в общем - нет, а в частности есть ситуации когда по-другому нельзя т.н. atomic context когда недопустимо перепланирование - это обработчики аппаратных прерваний (top half), контекст softirq, тасклеты

https://www.kernel.org/doc/Documentation/timers/timers-howto.txt

для остальных случаев есть семейство sleep

anonymous
()
Ответ на: комментарий от anonymous

есть ситуации когда по-другому нельзя т.н. atomic context когда недопустимо перепланирование

Заданный вопрос не об этом.

https://www.kernel.org/doc/Documentation/timers/timers-howto.txt

NON-ATOMIC CONTEXT:

	SLEEPING FOR «A FEW» USECS ( < ~10us? ):
		* Use udelay

Да и накладные расходы usleep_range выглядят запретительными на десятках микросекунд.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Заданный вопрос не об этом

начальный - да, но я отвечал не на него

Да и накладные расходы usleep_range выглядят запретительными на десятках микросекунд

зависит от процессора

On slower systems, (embedded, OR perhaps a speed-stepped PC!) the overhead of setting up the hrtimers for usleep *may* not be worth it

японцы умудрялись выполнять задачи с периодичночстью 10 мкс на пентиум 2 на модифицированном ядре

http://art-linux.sourceforge.net/

anonymous
()
Ответ на: комментарий от anonymous

Да и накладные расходы usleep_range выглядят запретительными на десятках микросекунд

зависит от процессора

Конечно. Думаю, на некоторых и сотни микросекунд будут невыгодны.

японцы умудрялись выполнять задачи с периодичночстью 10 мкс на пентиум 2 на модифицированном ядре

http://art-linux.sourceforge.net/

Эти «задачи» не были полноценными задачами Linux. Такие задачи да, можно и помногу раз за микросекунду.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от anonymous

450 MHz это же 1/450 мкс

Да, Капитан. А 100МГц - это 1/100мкс. Но время переключения контекстов на 100МГц Pentium - десятки мкс.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

Но время переключения контекстов на 100МГц Pentium - десятки мкс.

на современных процессорах - 1..2 мкс

И даже чуть больше, как отмечает и сам Эли. Что делает реализацию коротких задержек через планировщик непрактичной, как и было сказано выше (вопрос вымывания кэша даже не рассматриваем)..

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Что делает реализацию коротких задержек через планировщик непрактичной

да это понятно, мне вообще непонятно - нафига нужны короткие задержки, Linux не микроконтроллерная ОС.

anonymous
()
Ответ на: комментарий от anonymous

мне вообще непонятно - нафига нужны короткие задержки

Выше сказано - некоторые устройства их требуют.

Linux не микроконтроллерная ОС

Да где его только нет... Сделали же ucLinux.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Выше сказано - некоторые устройства их требуют

ну раз васян сказал - так оно и есть :)

Сделали же ucLinux

гадость какая-то. Кто-то сэкономил и сделал CPU без MMU с богатой периферией, вопрос - нахер это чудо нужно если за те же деньги можно взять нормальный с MMU ?

anonymous
()
Ответ на: комментарий от anonymous

Выше сказано - некоторые устройства их требуют

ну раз васян сказал - так оно и есть :)

Это да. Куда тебе спорить с васянами.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.