Алекс Дойчер (Alex Deucher), разработчик из компании AMD, опубликовал (http://www.botchco.com/agd5f/?p=57) заметку о том, как работает новый код (http://www.opennet.me/opennews/art.shtml?num=37288) динамического управления питанием для видеокарт семейства Radeon.
Отмечается, что в целом управление питанием на картах Radeon сводится к тому, что в vbios зашиты таблицы состояний управления питанием (power states). Каждое состояние управления питанием состоит из нескольких различных уровней производительности (performance levels). Уровень производительности в конечном итоге сводится к установке некоторой комбинации частот и напряжений питания. Когда выбрано некоторое состояние питания, аппаратное обеспечение автоматически переключает различые уровни производительности на основании уровня нагрузки на GPU.
Состояния управления питанием характеризуют некий относительно высокоуровневый сценарий использования, актуальный в текущей ситуации. Например "работа от батареи" ("battery") или "ориентация на максимальную производительность" ("performance"). Существуют также дополнительные внутренние состояния для UVD и событий, касающихся перегрева GPU. Кроме состояний питания, драйвер также управляет отключением тактовых сигналов (clock gating), а для некоторых чипов обеспечивает и полное отключение блоков (power gating). Разработчик также приводит пример состояний для мобильного APU.URL: http://www.botchco.com/agd5f/
Новость: http://www.opennet.me/opennews/art.shtml?num=37426
Новое управление питание очень четко работает для серии 6xxx. Я был весьма удивлен. Надеюсь для апушек допилили.
Его до мержинга в -rc1 даже пару раз фиксили по мелочи.
Также имею честь подтвердить для HD5xxx - работает изумительно. GPU валит на повышенную частоту при малейшей нагрузке, однако без нагрузки сидит на минимуме. И никаких вам мерцаний при изменениии частот. Красота!
интересно а в чем конкретно была засада раньше, когда пытались реверс-инженерить это дело.
Такие параметры экспериментальным путем выясняют. BLOB тяжко реверсить.
Какие "такие"? Значения напряжений и частот в каждом из состояний? Да пожалуйста, берите тулзу RBE и смотрите/правьте.
> берите тулзу RBE и смотрите/правьте.Проблема только в том что каждый производитель сие прописывает в меру своей дури. При том иногда дурь имеет вполне техническое подкрепление (радиатор побольше - максимальные частоты повыше, сэкономили на радиаторе - урезали частоты, etc).
Отрихтовать таблицы самому - это уже для тех кто понимает что он делает. И понимает что вписывание туда абы чего может видяху попросту угробить.
> интересно а в чем конкретно была засада раньше, когда пытались реверс-инженерить это дело.Засада в том что
1) Достаточно навороченные наборы состояний.
2) Каждый производитель GPU пишет таблицы в меру своей дурости и они у всех разные.
3) Не все производители заполняют все состояния.
4) У старых GPU сие вроде как несколько отличается.В результате амдшникам пришлось существенное перепилить все это дело с учетом фактических реалий.
А тем временем с момента последнего релиза каталиста прошло 84 дня.
А по-моему это ваше amd давно дало понять, что новый открытый драйвер для них приоритетнее. А не открыли старый из-за того, что его проще переписать, чем поддерживать.
> А по-моему это ваше amd давно дало понять, что новый открытый драйвер
> для них приоритетнее.Клиентура не желает возиться с блобами, по большому счету. Особенно те кому надо вычисления и прочая. А поскольку у амд вычисления на GPU с учетом архитектуры задумана как сильная сторона - довольно странно было бы пичкать клиентуру кактусами против их желания.
Тем более что китайцы помнится показали нвидии смачный фак на полмиллиарда баксов т.к. их блоб оказывается под MIPS вообще не собирается. А вот у амд с этим думается никаких особых проблем: atom bios изначально задуман платформенно-нейтральным, драйверу тоже не сильно большая разница где и что.
Какая внезапность. Двоичный драйвер для х86 не работает на МИПС. Кто бы мог подумать.
> Какая внезапность.Ну а вот у китайцев - миллионы машин на основе MIPS в сфере образования и прочая. Кто бы мог подумать?
>> Какая внезапность.
> Ну а вот у китайцев - миллионы машин на основе MIPS в
> сфере образования и прочая. Кто бы мог подумать?И чо? Это голубая пичаль китайцев так-то.
> И чо? Это голубая пичаль китайцев так-то.Китайцы готовы платить звонкой монетой. Поэтому большой вопрос у кого в результате будет печаль. Плох тот капиталист который кладет х... на миллионую клиентуру.
> А по-моему это ваше amd давно дало понять, что новый открытый драйвер
> для них приоритетнее. А не открыли старый из-за того, что его
> проще переписать, чем поддерживать.Все гораздо проще, в свете не очень хорошего финансового состояния AMD, им проще разрабатывать драйвера за счет сообщества.
Если и приоритетнее, то только по одной причине: можно слать патчи раз в полгода и некому будет ныть "а пачиму вы драйвер не выпускаете???".
47 с момента беты.
Оговорка по Тихоокеанскому рубежу ? =) Сегодня мы остановим проприетарщину, сегодня опенсорс начнет последнюю битву !
Никаких оговорок. AMD не разрабатывает проприетарный драйвер и изредка высылает патчи в открытый. Действительно, образец поддержки своих клиентов.
> открытый. Действительно, образец поддержки своих клиентов.В данном случае они сделали ровно то что от них хотели. Алилуйя, теперь у радеонов отличное управление питанием.
Кто нибудь ещё тестил?
у меня на ноуте карта серии 4xxx.
большой разницы не заметил.
> Кто нибудь ещё тестил?Я тестил. На десктопном HD5xxx работает изумительно. Температура GPU сама понижается на 10 градусов относительно загрузки "все по дефолту". А при малейшей нагрузке GPU лезет по частотам вверх - скорость 3D операций не пострадала.
> у меня на ноуте карта серии 4xxx.
> большой разницы не заметил.Вы ядру скомандовали radeon.dpm=1 в командлайне? Если да - покажите dmesg, в месте где идет вывод такого добра:
[ 4.112767] == power state 0 ==
[ 4.112769] ui class: none
[ 4.112771] internal class: boot
[ 4.112773] caps: video
.... (для всех режимов)Там же написано и какой power state был при загрузке и на какой драйвер изволил переключиться опосля.
Понаблюдать за щелканием частотами можно как-то так:
while (true) do cat /sys/kernel/debug/dri/0/radeon_pm_info; sleep 2; done;Температуру GPU можно посмотреть в файлике типа
/sys/class/drm/card0/device/hwmon/hwmon3/temp1_inputЕсли кажется что текущий power state вам не по вкусу, переключиться на другой можно наэхав нужный в файлик типа /sys/class/drm/card0/device/power_dpm_state
Если карточка не первая в системе то /0/ и /card0/ придется заменить на фактические значения. А hwmon3 - это в моей системе. В других может отличаться. А еще при активном композитинге и прочая - GPU может лезть вверх и от активного вывода на терминал - потому и задержка в 2 сек присобачена.
В целом наблюдения за работой фичи произвели весьма и весьма позитивное впечатление пока-что.
прошу прощения, промахнулся, мой ответ ниже.
> прошу прощения, промахнулся, мой ответ ниже.и ещё
cat /sys/kernel/debug/dri/0/radeon_pm_info
Debugfs support not implemented for this asicчтобы это значило? гугл молчит
> Debugfs support not implemented for this asic
> чтобы это значило? гугл молчитТо что для данного чипа статистика в драйвере не реализована :(. По логике вещей это баг. Хоть простому смертному и не нужны эти цифры, но все-таки...
http://cgit.freedesktop.org/~agd5f/linux/commit/?h=drm-fixes...добавили
Спасибо что откликнулись.
каталог /sys/class/drm/card0/device/hwmon у меня отсутствует
всё делал как описано в статье.
температуру меряю по показателям процессора, он у меня на одной медной шине с видеокартой.
при включении echo "battery" > /sys/class/drm/card0/device/power_dpm_state
температура падает на 1 градус.[ 2.301263] == power state 0 ==
[ 2.301266] ui class: none
[ 2.301268] internal class: boot
[ 2.301271] caps: video
[ 2.301274] uvd vclk: 0 dclk: 0
[ 2.301276] power level 0 sclk: 50000 vddc_index: 2
[ 2.301278] power level 1 sclk: 50000 vddc_index: 2
[ 2.301279] status: c r b
[ 2.301282] == power state 1 ==
[ 2.301284] ui class: performance
[ 2.301285] internal class: none
[ 2.301287] caps: video
[ 2.301290] uvd vclk: 0 dclk: 0
[ 2.301291] power level 0 sclk: 50000 vddc_index: 2
[ 2.301293] power level 1 sclk: 50000 vddc_index: 2
[ 2.301295] status:
[ 2.301296] == power state 2 ==
[ 2.301298] ui class: battery
[ 2.301299] internal class: none
[ 2.301301] caps: video
[ 2.301304] uvd vclk: 0 dclk: 0
[ 2.301305] power level 0 sclk: 20000 vddc_index: 1
[ 2.301307] power level 1 sclk: 20000 vddc_index: 1
[ 2.301309] status:
[ 2.301310] == power state 3 ==
[ 2.301312] ui class: none
[ 2.301313] internal class: uvd
[ 2.301315] caps: video
[ 2.301318] uvd vclk: 53300 dclk: 40000
[ 2.301320] power level 0 sclk: 50000 vddc_index: 2
[ 2.301321] power level 1 sclk: 50000 vddc_index: 2
[ 2.301323] status:
[ 2.301817] switching from power state:
[ 2.301820] ui class: none
[ 2.301822] internal class: boot
[ 2.301825] caps: video
[ 2.301827] uvd vclk: 0 dclk: 0
[ 2.301829] power level 0 sclk: 50000 vddc_index: 2
[ 2.301831] power level 1 sclk: 50000 vddc_index: 2
[ 2.301832] status: c b
[ 2.301835] switching to power state:
[ 2.301837] ui class: performance
[ 2.301838] internal class: none
[ 2.301840] caps: video
[ 2.301843] uvd vclk: 0 dclk: 0
[ 2.301845] power level 0 sclk: 50000 vddc_index: 2
[ 2.301847] power level 1 sclk: 50000 vddc_index: 2
[ 2.301848] status: r
[ 2.306939] [drm] radeon: dpm initialized
> Спасибо что откликнулись.Ну меня амдшная активность проперла и я более-менее изучил вопрос.
> каталог /sys/class/drm/card0/device/hwmon у меня отсутствует
> всё делал как описано в статье.Это датчик температуры всего лишь. Что-то припоминаю что в 4000 оно может отличаться и/или вообще опциональное, чтоли.
> температуру меряю по показателям процессора, он у меня на одной медной шине с видеокартой.
Достаточно слабая корреляция, думается. Т.е. меряется все-таки в основном температура проца.
> при включении echo "battery" > /sys/class/drm/card0/device/power_dpm_state
> температура падает на 1 градус.Логично - в battery есть 1 уровень производительности: 200МГц. А в performance - тоже 1, но 500МГц. Логично что на 200МГц видеокарточка кушает меньше. Т.к. до проца как до жирафа - это мало заметно. Но думается батарейку экономит ощутимо (снижается частота в 2.5 раза и понижается напряжение питания).
В целом же сие есть эталонный пример убогого заполнения таблиц состояний питания производителем. Я прямо стесняюсь спросить: а в каталисте то оно чего делает с такими таблицами? Каталист же тоже не волшебник и не имеет права за пределы указанные производителем соваться.
Подозреваю что это изначально задумано производителем довольно деревянно и работает (как минимум в оффтопике) как-то так: пока к ноуту прицеплен адаптер питания, оно жарит на максимуме 500МГц ("pefrormance"). А отцепили адаптер - на 200МГц валит ("battery"). Динамическое масштабирование частоты по нагрузке в такой таблице отсутствует как класс... oO.
Я бы показал эту табличку Дейчеру (на мыло или на форониксе где-нить), думаю грохот кирпичей был бы слышен долго :). Пусть почешет репу что делать с подобным "счастьем" - когда производитель пудак и вообще динамическое масштабирование не заюзал. Реально идиoтское заполнение таблицы. Хотя мало ли, может у этого GPU или конфиги какие-то проблемы если на лету часто переключать частоты, так что производитель был вынужден перейти к такому деревянному сценарию руления питанием. С моей колокольни я могу констатировать крайне печальный набор состояний зашитый в vbios.
>Достаточно слабая корреляция, думается. Т.е. меряется все-таки в основном температура проца.согласен, но моя цель охладить процессор.
уже через год использования ноута температура процессора под нагрузкой начала подниматься до 100 градусов, так что любое понижение температуры для меня очень актуально.
ноут HP tx2550er
пока помогала периодическая чистка радиатора, но всё равно ноут горячий.спасибо за консультацию! буду разбираться дальше
> согласен, но моя цель охладить процессор.Тогда загнать в состояние "battery", как вы и сделали. Скорость графики разумеется просядет, но если это не волнует...
> уже через год использования ноута температура процессора под нагрузкой начала
> подниматься до 100 градусов, так что любое понижение температуры для меня очень актуально.Баллончик со сжатым воздухом для продувки радиаторов от пыли вам в руки :).
> пока помогала периодическая чистка радиатора, но всё равно ноут горячий.
Ну так это стандартные грабли ноутов - радиатор пылью забивается. Там в целом системы охлаждения хиленькие. Потому что большие системы охлаждения размещать негде, а сильно гнать воздух - соседство с турбиной истребителя пользователям не нравится. Ну вот и получается весьма компромиссное решение: или совсем дохлый процессор, или греется. Чудес не бывает. А т.к. юзается где попало + в мощном ноуте воздух продувать надо все-таки сильно, чтобы не перегревался - оно превращается в мини-пылесос. Ну и забивается кулер пылью в результате.
Если хочется любой ценой температуру скостить - тогда логично проц даунклокнуть, средствами биоса или просто порулить планировщиком в пингвине, например зарезав максимальную частоту (со всеми вытекающими, как то более тормозная работа). Думается начальный radeon кушает шибко меньше чем мощный процессор, особенно на максимуме. Но еще логичнее почистить систему охлаждения, т.к. с номинальными режимами она должна бы все-таки справляться.
Да всё так и есть.
Полностью разбираю, вынимаю материнку, снимаю радиатор, чищу, собираю обратно.
проц на 500Mhz, работает firefox без флеша - температура 59-65.
сегодня ещё хард заменил на WD5000LPVT,старый st9160827as грелся сильно, этот тоже греется но ощутимо меньше.