Ядро Linux — кладезь как применяемых алгоритмов, так и некоторых хакерских или полухакерских трюков, призванных убыстрить и / или уменьшить размер в памяти (memory footprint). Об одном из таких полухахерских трюков я хочу рассказать далее.
Читать полностью »
Рубрика «linux kernel» - 10
Об одном трюке для возврата кода ошибки из функции
2015-03-08 в 20:25, admin, рубрики: C, linux kernel, linux kernel development, open sourceСделаем код чище: Специальные расширения vsnprintf() в ядре Linux
2015-03-08 в 0:00, admin, рубрики: C, linux kernel, linux kernel development, open source, printfСмотря на кучу исходного кода, который засылают программисты в списки рассылки подсистем ядра Linux иногда хочется плакать. С одной стороны бывает ужасный и непотребный код, с другой — люди, возможно, впервые пытаются что-то сделать для ядра, поэтому не знают всех его особенностей.
Книга Linux Device Drivers устарела, а новая версия выйдет нескоро. Поэтому мне хочется заполнить пробелы в знаниях тех программистов, которые пишут код в ядро.
Читать полностью »
Что плохого в изменении *_defconfig при работе с исходниками ядра Linux
2015-03-06 в 17:08, admin, рубрики: Git, linux kernel, open sourceПо следам моей первой публикации хочу сделать небольшую заметку об изменении файлов i386_defconfig или x86_64_defconfig, входящих в поставку исходников ядра Linux.
Запускаем стоковое ядро на Intel Galileo
2015-03-05 в 20:05, admin, рубрики: arduino, galileo, intel quark, IoT, linux kernel, Разработка для интернета вещейНе сомневаюсь, что большинство пользователей Intel Galileo задаётся вопросом, когда же наконец можно будет обновить ядро?
Обработка логов с учётом предыдущих сообщений в logstash-elasticsearch
2015-02-25 в 10:24, admin, рубрики: elasticsearch, linux kernel, logstash, lucene, Блог компании Webzilla, ит-инфраструктура, Серверное администрирование, системное администрированиеПро отлов ядерных MCE (machine check error) и прочей гадости с помощью netconsole я писал недавно. Крайне полезная вещь. Одна проблема: throttling на CPU из-за локального перегрева (длительной нагрузки) фиксируется как MCE. Случается бэкап — и админам приходит страшное сообщение об MCE, которое на практике означает «чуть-чуть перегрелось» и точно не требует внимания к себе в 3 часа ночи.
Смехотворность проблемы ещё тем, что Linux фиксирует MCE после того, как throttling закончился. То есть режим 'normal', но вместо этого оно превращается MCE. Выглядит это так:
CPU0: Core temperature above threshold, cpu clock throttled (total events = 40997) CPU4: Core temperature above threshold, cpu clock throttled (total events = 40997) CPU4: Core temperature/speed normal CPU0: Core temperature/speed normal mce: [Hardware Error]: Machine check events logged
При этом мы точно хотим реагировать на нормальные MCE. Что делать?
В рамках logstash обработка сообщений предполагается stateless. Видишь сообщение — реагируешь. Внедрять же ради одного типа сообщений более сложную систему — оверкилл.
Казалось бы, есть фильтр (не путать с output) elasticsearch, который позволяет делать запросы. К сожалению, он не умеет делать 'if'ы, то есть remove_tag и add_tag будут отрабатывать вне зависимости от того, удался поиск или нет.
Грустно.
Читать полностью »
Обработка сообщений ядра
2015-01-27 в 10:48, admin, рубрики: linux kernel, logstash, monitoring, nagios, shinken, Блог компании Webzilla, Настройка Linux, Серверное администрирование, системное администрированиеПредисловие
Страшная сказочка:
EDAC MC0: 1 CE read ECC error on CPU#0Channel#1_DIMM#0 (channel:1 slot:0)
EXT4-fs error: ext4_wait_block_bitmap:445: Cannot read block bitmap
Out of memory: Kill process 95 (sshd) score 31 or sacrifice child
CMCI storm detected: switching to poll mode
page allocation failure: order:1, mode:0x4020
invalid opcode: 0000 [#1] SMP
Неприятно выглядит, правда? Список может быть очень длинным очень длинный. В этой статье я расскажу как с этим жить и что мы с ним сделали.
Часть из этих сообщений в приерах выше заставит вас погрузиться в бездны современной архитектуры процессоров («CMCI storm», удачи в поиске дороги назад, из дебрей интернетов)… Cтранные вещи в ядре могут нарушать ожидания о том, как работают компьютеры, делая последующую отладку очень затруднённой. Отсутствие знания о том, что случилось может даже оставить с грустным ответом «какая-то неведомая фигня, ребутнули, вроде, прошло».Читать полностью »
PVS-Studio покопался во внутренностях Linux (3.18.1)
2015-01-03 в 12:27, admin, рубрики: code, linux, linux kernel, open source, pvs-studio, static code analysis, Блог компании PVS-Studio, информационная безопасность, Программирование, Си, системное программирование, статический анализ кода
Соавтор: Святослав Размыслов SvyatoslavMC.
В рекламных целях мы решили попробовать проверить ядро Linux с помощью нашего статического анализатора кода. Эта задача интересна своей сложностью. Исходные коды Linux чем только не проверялись и проверяются. Поэтому найти хоть что-то новое, весьма сложная задача. Но если получится, то это будет хорошая рекламная заметка о возможностях анализатора PVS-Studio.
Читать полностью »
Встраивание в ядро Linux: перехват системных вызовов
2014-12-22 в 13:15, admin, рубрики: hooking, linux kernel, Блог компании Код Безопасности, системное программированиеПод термином «системный вызов» в программировании и вычислительной технике понимается обращение прикладной программы к ядру операционной системы (ОС) для выполнения какой-либо операции. Ввиду того что такое взаимодействие является основным, перехват системных вызовов представляется важнейшим этапом встраивания, т.к. позволяет осуществлять контроль ключевого компонента ядра ОС — интерфейса системных вызовов, что, в свою очередь, даёт возможность инспектировать запросы прикладного ПО к сервисам ядра.
Данная статья является продолжением анонсированного ранее цикла, посвящённого частным вопросам реализации наложенных средств защиты, и, в частности, встраиванию в программные системы.
Многозадачность в ядре Linux: workqueue
2014-11-25 в 14:38, admin, рубрики: kernel, linux kernel, multithreading, workqueue, системное программирование Продолжаем тему многопоточности в ядре Linux. В прошлый раз я рассказывала про прерывания, их обработку и tasklet’ы, и так как изначально предполагалось, что это будет одна статья, в своем рассказе о workqueue я буду ссылаться на tasklet’ы, считая, что читатель уже с ними знаком.
Как и в прошлый раз, я постараюсь сделать мой рассказ максимально подробным и детальным.
Статьи цикла:
- Многозадачность в ядре Linux: прерывания и tasklet’ы
- Многозадачность в ядре Linux: workqueue
- Protothread и кооперативная многозадачность
Многозадачность в ядре Linux: прерывания и tasklet’ы
2014-11-24 в 17:59, admin, рубрики: interrupts, irq, kernel, linux kernel, multithreading, tasklet, системное программированиеВ предыдущей своей статье я затронула тему многопоточности. В ней речь шла о базовых понятиях: о типах многозадачности, планировщике, стратегиях планирования, машине состояний потока и прочем.
На этот раз я хочу подойти к вопросу планирования с другой стороны. А именно, теперь я постараюсь рассказать про планирование не потоков, а их “младших братьев”. Так как статья получилась довольно объемной, в последний момент я решила разбить ее на несколько частей:
- Многозадачность в ядре Linux: прерывания и tasklet’ы
- Многозадачность в ядре Linux: workqueue
- Protothread и кооперативная многозадачность
В третьей части я также попробую сравнить все эти, на первый взгляд, разные сущности и извлечь какие-нибудь полезные идеи. А через некоторое время я расскажу про то, как нам удалось применить эти идеи на практике в проекте Embox, и про то, как мы запускали на маленькой платке нашу ОС с почти полноценной многозадачностью.
Рассказывать я постараюсь подробно, описывая основное API и иногда углубляясь в особенности реализации, особо заостряя внимание на задаче планирования.
Читать полностью »