LINUX.ORG.RU

[embedded] читать регистр кажду секунду

 


0

0

На девайсе к процессору подключен 24-портовый свитч, управление свитчом сделано через gpio посредством шины аналогичной MDC/MDIO (написан драйвер, который предоставляет функции чтения/записи ноги через ioctl).

Нужно отслеживать в snmp-агенте статус портов (up/down).

Мне видятся два варианта:

(1) читать из агента, например каждую секунду, портовые регистры свитча и получать оттуда текущий статус линка. Это IMHO будет очень накладно из-за постоянного преключения контекста

(2) Свитч поддерживает специально выделенную ногу для сообщения прерываний процу об определенных событиях (маска задается регистром свитча), в том числе и статус линка. Завести эту ногу на gpio процессора, написать драйвер чтения ноги и какой-нибудь интерфейс в юзер-спейс (например /proc или ioctl) - т.е. линк сменился, получили прерывание, в агенте получили статус через I/O, далее все-равно нужно читать регистр, чтобы узнать какой порт сменил статус.

Получается, что у второго варианта нет большого преимущества или может быть я что-то упускаю?

★★

Последнее исправление: cruz7 (всего исправлений: 1)

ИМХО, если задачи читать значения с миллисекундной точностью не стоит, то надо читать из агента - проще и надёжнее.

RVictor
()

Это IMHO будет очень накладно из-за постоянного преключения контекста

а ты померяй сначала

true_admin ★★★★★
()

> (1) читать из агента, например каждую секунду, портовые регистры свитча и получать оттуда текущий статус линка. Это IMHO будет очень накладно из-за постоянного преключения контекста

Бгг. На загруженной системе каждую секунду происходят сотни переключений контекста. Одним больше или меньше - никто и не заметит.

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

> ИМХО, если задачи читать значения с миллисекундной точностью не стоит, то надо читать из агента - проще и надёжнее.

С такой точностью читать не нужно, по крайней мере пока в ТЗ этого нет :-)

PS. А почему Вы упомянули точность именно в миллисекундах? Это как-то связано с ограничениями не-RT ядра?

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

> Бгг. На загруженной системе каждую секунду происходят сотни переключений контекста. Одним больше или меньше - никто и не заметит.

Процессор 200Mhz, там много достаточно тяжелых задач, поэтому меня и беспокоят лишние переключения.

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

> PS. А почему Вы упомянули точность именно в миллисекундах? Это как-то связано с ограничениями не-RT ядра?

Это я образно выразился - как правило, переключения задач в не РТ-системах производится с квантованием времени, превышающем миллисекунду, и измерения «с точностью до миллисекунды» требуют дополнительных ухищрений.

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

> Процессор 200Mhz, там много достаточно тяжелых задач, поэтому меня и беспокоят лишние переключения.

Если задач _уже_ много, одно переключение контекста в секунду утонет в шуме.

И кстати, сообщение драйвера пользовательской программе - это тоже переключение контекста.

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