Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

2004 г

Руководство FreeBSD
(FreeBSD Handbook)

Проект Русской Документации FreeBSD

содержание

11.16. Использование и отладка FreeBSD ACPI

Написал Nate Lawson. При помощи Peter Schultz, Tom Rhodes.

ACPI это фундаментально новый способ обнаружения устройств, управления энергопотреблением и предоставления стандартизированного доступа к различному оборудованию, ранее управлявшемуся BIOS. Был достигнут определенный прогресс в приспособлении ACPI к работе со всеми системами, но все еще встречаются ошибки в байткоде ACPI Machine Language (AML) некоторых материнских плат, незавершенные участки кода в подсистемах ядра FreeBSD и ошибки в интерпретаторе ACPI-CA.

Этот раздел предназначен для того, чтобы упростить ваше содействие разработчикам FreeBSD ACPI в определении причин наблюдаемых вами проблем, выполнении отладки и выработке решения. Спасибо за помощь и надеемся, что мы сможем помочь в решении проблем вашей системы.

11.16.1. Отправка отладочной информации

Замечание: Перед отправкой сообщения об ошибке убедитесь, что у вас последняя версия BIOS, и, если доступна, последняя версия firmware встроенного контроллера.

Те из вас, кто желает составить сообщение о проблеме прямо сейчас, могут воспользоваться адресом freebsd-acpi@FreeBSD.org, отправив на него следующую информацию:

  • Описание неправильного поведения, включая тип системы, модель и все, что приводит к появлению ошибки. Кроме того, сообщите настолько точно, насколько возможно, когда появилась ошибка, если ранее вы ее не видели.

  • Вывод dmesg после ``boot -v'', включая все сообщения, появившиеся при изучении ошибки.

  • Вывод dmesg после ``boot -v'' с выключенным ACPI, если его отключение помогает решить проблему.

  • Вывод ``sysctl hw.acpi''. Это также хороший способ получения списка возможностей системы.

  • URL где можно найти ваш ACPI Source Language (ASL). Не отправляйте ASL непосредственно в список рассылки, поскольку он может быть очень большим. Копия ASL может быть создана командой:

    # acpidump -t -d > name-system.asl
    

    (Замените вашим логином name и производителем/моделью system. Пример: njl-FooCo6000.asl)

Большинство разработчиков читают Список рассылки, посвящённый обсуждению FreeBSD-CURRENT, но для уверенности, что проблему увидят, отправьте ее в freebsd-acpi. Будьте терпеливы, все мы заняты полный рабочий день где-то еще. Если ваше сообщение не заметили сразу, мы возможно попросим вас отправить PR (сообщение о проблеме) через send-pr(1). При вводе PR, включайте ту же информацию, что запрошена выше. Это поможет нам отследить проблему и решить ее. Не отправляйте PR без предварительной отправки письма в freebsd-acpi, поскольку мы используем PR в качестве напоминаний о существующих проблемах, а не как механизм сообщений об ошибках. Вероятно, о вашей проблеме кто-то уже сообщал ранее.

11.16.2. Общие сведения

ACPI представлен во всех современных компьютерах, соответствующих архитектурам ia32 (x86), ia64 (Itanium) и amd64 (AMD). Полный стандарт включает множество возможностей, в том числе управление производительностью CPU, уровнем питания, температурой, различными системами аккумуляторов, встроенными контроллерами и опросом шины. В большинстве систем стандарт реализован не полностью. Например, настольные системы обычно реализуют только опрос шины, а портативные компьютеры кроме того могут поддерживать управление охлаждением и энергопотреблением. Они также поддерживают приостановку и последующий запуск системы различного уровня сложности.

ACPI-совместимые системы состоят из различных компонентов. Производители BIOS и чипсетов предоставляют различные жестко заданные таблицы, (например, FADT), которые определяют функции вроде карты APIC (используется для SMP), регистры настройки и простые значения параметров. Кроме того, предоставляется таблица байткода (Differentiated System Description Table, DSDT), определяющая древоподобное пространство имен устройств и методов.

Драйвер ACPI должен прочесть заданные таблицы, реализовать интерпретатор для байткода, модифицировать драйвера устройств и ядро для приема информации от подсистемы ACPI. Для FreeBSD, Intel предоставила интерпретатор (ACPI-CA), тот же что для Linux и NetBSD. Исходный код ACPI-CA находится в каталоге src/sys/contrib/dev/acpica. Код для приспособления ACPI-CA к работе в FreeBSD, находится в src/sys/dev/acpica/Osd. Наконец, драйвера, реализующие различные ACPI устройства, находятся в src/sys/dev/acpica.

11.16.3. Часто встречающиеся проблемы

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

11.16.3.1. Приостановка/возобновление работы

ACPI поддерживает три состояния приостановки в RAM (STR), S1-S3, и одно состояние приостановки на диск (STD), называемое S4. S5 это ``мягкое выключение'' и это нормальное состояние системы, когда она подключена к сети, но не включена. S4 может быть реализован двумя различными путями. S4BIOS это BIOS-поддерживаемая приостановка на диск. S4OS реализуется полностью операционной системой.

Начните с проверки переменных sysctl hw.acpi, относящихся к приостановке (suspend). Вот результат для моего Thinkpad:

hw.acpi.supported_sleep_state: S3 S4 S5
hw.acpi.s4bios: 0

Это означает, что я могу использовать acpiconf -s для тестирования S3, S4OS, и S5. Если s4bios был единицей (1), это означает поддержку S4BIOS вместо S4OS.

При тестировании приостановки/возобновления работы, начните с S1, если этот режим поддерживается. Это состояние скорее всего поддерживается, поскольку не требует слишком серьезной поддержки со стороны драйвера. Никто не реализовал S2, который похож на S1. Следующий режим для тестирования это S3. Это наиболее глубокое STR состояние, оно требует существенной поддержки со стороны драйвера, чтобы правильно реинициализировать оборудование. Если у вас возникли проблемы при выходе из этого состояния, отправьте письмо в рассылку freebsd-acpi, но не ждите, что проблема будет обязательно решена, поскольку существует множество драйверов/оборудования, нуждающихся в дальнейшем тестировании и разработке.

Для изоляции проблемы удалите из ядра столько драйверов, сколько возможно. Если это работает, вы можете выяснить, какой драйвер вызывает проблему путем загрузки драйверов до тех пор, пока опять не произойдет сбой. Обычно бинарные драйвера, такие как nvidia.ko, драйвера дисплея X11 и USB вызывают большинство проблем, а драйвера Ethernet интерфейсов как правило работают отлично. Если вы можете нормально загрузить/выгрузить драйвера, автоматизируйте этот процесс, поместив соответствующие команды в /etc/rc.suspend и /etc/rc.resume. Это закомментированные примеры выгрузки и загрузки драйверов. Попробуйте установить параметр hw.acpi.reset_video в нуль (0), если ваш дисплей не включается после возобновления работы. Попробуйте установить большие или меньшие значения для hw.acpi.sleep_delay, чтобы проверить, поможет ли это.

Другой способ, который можно попробовать, это запуск последнего дистрибутива Linux с поддержкой ACPI и протестировать поддержку остановки/возобновления работы на том же оборудовании. Если она работает на Linux, проблема скорее всего в драйверах FreeBSD и поиск драйвера, вызывающего проблему, поможет разрешить ситуацию. Имейте ввиду, что разработчики ACPI обычно не поддерживают другие драйверы (звук, ATA, и т.п.), так что все результаты работы по поиску проблемы возможно необходимо отправить в список рассылки freebsd-current и человеку, поддерживающему драйвер. Если вы решитесь заняться отладкой, поместите соответствующий код (printf(3)) в вызывающий проблему драйвер для обнаружения места, где прерывается функция восстановления.

Наконец, попробуйте отключить ACPI и включить APM. Если приостановка/возобновление работает с APM, вам возможно лучше подойдет APM, особенно на старом оборудовании (до 2000). Включение корректной поддержки ACPI поставщиками оборудования требует времени и вероятно в старом оборудовании поддержка ACPI в BIOS была некорректна.

11.16.3.2. Система останавливается (временно или постоянно)

Большинство систем останавливаются в результате потери прерываний или ``шторма'' прерываний. В чипсетах существует много проблем, связанных с тем, как BIOS настраивает прерывания перед загрузкой, правильностью таблицы APIC (MADT), и маршрутизации System Control Interrupt (SCI).

``Шторм'' прерываний может быть обнаружен по потерянным прерываниям путем проверки вывода строки с acpi0 команды vmstat -i. Если счетчик увеличивается более, чем несколько раз в секунду, это ``шторм'' прерываний. Если система останавливается, попробуйте войти в DDB (CTRL+ALT+ESC на консоли) и ввести show interrupts.

Наиболее надежный способ избавиться от проблемы с прерываниями, это отключение поддержки APIC с помощью параметра loader.conf hint.apic.0.disabled="1".

11.16.3.3. Паника

Паника, связанная с ACPI, случается довольно редко и имеет наибольший приоритет исправления. Первый шаг это изоляция действий, приводящих к панике (если это возможно) и получение отладки. Следуйте инструкции по включению options DDB и настройке последовательной консоли (смотрите Разд. 20.6.5.3) или настройке раздела dump(8). Вы можете получить отладочную информацию DDB с помощью tr. Если вы записываете отладку вручную, убедитесь, что переписали как минимум пять (5) строк снизу и пять (5) строк сверху.

Затем попробуйте изолировать проблему, загрузившись с выключенным ACPI. Если это работает, вы можете изолировать подсистему ACPI, используя различные параметры debug.acpi.disable. Обратитесь к странице справочника acpi(4) за примерами.

11.16.3.4. Система включается после приостановки или завершения работы

Во-первых, попробуйте установить в loader.conf(5) параметр hw.acpi.disable_on_poweroff=``0''. Это предотвращает отключение различных событий в ACPI во время завершения работы. В некоторых системах этот параметр необходимо установить в ``1'' (по умолчанию) по тем же причинам. Обычно это решает проблему, если система неожиданно включается после приостановки или отключения питания.

11.16.3.5. Другие проблемы

Если вы наблюдаете другие проблемы с ACPI (работа с внешним оборудованием, проблемы с обнаружением устройств, и т.д.), отправьте описание проблемы в список рассылки; однако, некоторые из этих проблем могут относиться к незавершенным частям подсистемы ACPI, поэтому может потребоваться время на их реализацию. Будьте терпеливы, и подготовьтесь к тестированию исправлений, которые мы можем вам выслать.

11.16.4. ASL, acpidump, и IASL

Наиболее часто встречается проблема, связанная с предоставлением поставщиками BIOS некорректного (или полностью ошибочного!) байткода. Это обычно проявляется появлением консольных сообщений ядра, подобных этому:

ACPI-1287: *** Error: Method execution failed
  [\\_SB_.PCI0.LPC0.FIGD._STA] (Node 0xc3f6d160), AE_NOT_FOUND

Зачастую вы можете разрешить эти проблемы путем обновления BIOS до последней ревизии. Большинство консольных сообщений безвредны, но если существуют другие проблемы, такие как не работающий статус батареи, возможно существуют проблемы в AML. Байткод, известный как AML, компилируется из исходного текста на языке ASL. AML находится в таблице, известной как DSDT. Для получения копии ASL, используйте acpidump(8). Вы можете использовать оба параметра -t (показывать содержимое постоянных таблиц) и -d (дизассемблировать AML в ASL). Обратитесь к разделу Отправка отладочной информации за примером синтаксиса.

Простейшая первая проверка, которую вы можете провести, это перекомпиляция ASL для поиска ошибок. Предупреждения обычно могут быть проигнорированы, но ошибки обычно не позволяют ACPI работать правильно. Для перекомпиляции ASL, выполните следующую команду:

# iasl your.asl

11.16.5. Исправление ASL

В дальней перспективе, наша задача состоит в том, чтобы обеспечить поддержку ACPI практически для каждой системы без вмешательства пользователя. Однако, на данный момент мы все еще разрабатываем обходные пути для ошибок, которые часто делают поставщики BIOS. Интерпретатор Microsoft (acpi.sys и acpiec.sys) не занимается проверкой четкости соблюдения стандартов, поэтому многие поставщики BIOS, проверяющие ACPI только под Windows, никогда не исправляют ASL. Мы надеемся продолжать обнаружение и документацию нестандартных поведений, позволяемых интерпретатором Microsoft, и воспроизводить их, чтобы FreeBSD могла работать без необходимости исправления ASL пользователями. В качестве обходного пути для обнаружения неправильного поведения, вы можете исправить ASL вручную. Если исправления будут работать, пожалуйста отправьте diff(1) между старым и новым ASL, чтобы мы могли реализовать обходной путь для неправильного поведения ACPI-CA, чтобы исправление вручную больше не требовалось.

Вот список наиболее часто встречающихся проблем, их причин и способы исправления:

11.16.5.1. OS зависимости

Некоторые AML предполагают, что мир состоит из различных версий Windows. Вы можете настроить FreeBSD, чтобы она сообщала любое другое имя OS и посмотреть, исправит ли это имеющуюся проблему. Простой способ указания другого имени системы это установка переменной /boot/loader.conf hw.acpi.osname=``Windows 2001'' или в другое подобное значение, имеющееся в ASL.

11.16.5.2. Отсутствие возврата значения

Некоторые методы не возвращают значение явно, как того требует стандарт. Хотя ACPI-CA не обрабатывает эту ситуацию, в FreeBSD существует обходной путь, позволяющей ей явно возвращать значение. Вы можете также добавить явные операторы Return (возврат) там, где требуется, если знаете, что значение должно быть возвращено. Для принудительного компилирования ASL командой iasl, используйте флаг -f.

11.16.5.3. Перезапись AML по умолчанию

После настройки your.asl для компиляции запустите:

# iasl your.asl

Вы можете добавить флаг -f для создания AML даже при наличии ошибок компиляции. Помните, что некоторые ошибки (например, отсутствующие операторы Return), автоматически обходятся интерпретатором.

Файл DSDT.aml используется iasl по умолчанию. Вы можете загрузить его вместо ошибочной копии BIOS (которая остается в постоянной памяти) путем редактирования /boot/loader.conf:

acpi_dsdt_load="YES"
acpi_dsdt_name="/boot/DSDT.aml"

Убедитесь, что скопировали DSDT.aml в каталог /boot.

11.16.6. Получение отладочной информации ACPI

Возможности отладки драйвера ACPI очень гибкие. Они позволяют вам указывать набор подсистем, а также уровень отладки. Подсистемы, которые вы хотите отлаживать, указываются как ``слои'', и подразделяются на компоненты ACPI-CA (ACPI_ALL_COMPONENTS) и поддержку оборудования ACPI (ACPI_ALL_DRIVERS). Уровень отладки варьируется от ACPI_LV_ERROR (только сообщать об ошибках) до ACPI_LV_VERBOSE (все сообщения). Уровень отладки представляет собой битовую маску, поэтому возможна одновременная установка нескольких параметров, разделенных пробелами. На практике, при использовании для получения отладочной информации последовательной консоли, слишком большое количество информации может переполнить буфер консоли. Полный список отдельных слоев и уровней можно найти на странице справочника acpi(4).

Вывод отладочной информации по умолчанию не включен. Для его включения добавьте параметр options ACPI_DEBUG к файлу настройки ядра, если ACPI встроен в ядро. Вы можете добавить параметр ACPI_DEBUG=1 в файл /etc/make.conf для глобального включения этого параметра. Если вы используете модуль acpi.ko , его можно пересобрать индивидуально:

# cd /sys/modules/acpi/acpi
&& make clean && make
ACPI_DEBUG=1

Установите acpi.ko в /boot/kernel и добавьте предпочитаемый уровень и слой к loader.conf. Этот пример включает отладочные сообщения для всех компонентов ACPI-CA и всех драйверов оборудования ACPI (CPU, LID и т.д.). Будут выводиться только сообщения об ошибках, наименьший уровень отладки.

debug.acpi.layer="ACPI_ALL_COMPONENTS ACPI_ALL_DRIVERS"
debug.acpi.level="ACPI_LV_ERROR"

Если требуемая информация получается в результате определенного события (скажем, приостановка и восстановление), вы можете не изменять loader.conf и использовать для указания слоя и уровня sysctl после загрузки и подготовки системы к определенному событию. Имена переменных sysctl те же, что и имена параметров настройки в loader.conf.

11.16.7. Ссылки

Дальнейшую информацию о ACPI можно найти по следующим ссылкам:

VPS в 21 локации

От 104 рублей в месяц

Безлимитный трафик. Защита от ДДоС.

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...