LINUX.ORG.RU
ФорумTalks

Драйвер AMDGPU составляет >10% от всего кода Linux

 , ,


0

1

Привет, ЛОР!

А вот тебе интересная тема с похороникса:

https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.9-AMDGPU-Stats

Если вкратце, то сабж. В Linux 5.9 всего 20.49 миллионов строк кода, без учёта пустых строк и комментариев. Из них драйвер AMDGPU составляет 2.16 миллионов строк, опять же, без комментариев и пустых строк.

На фоне этого, возможно, идея сторонних драйверов за пределами ядра уже не выглядит так плохо. Как думаешь, ЛОР, было бы ядро лучше если бы STABLE-API-NONSENSE так и не появился?

Это благодаря автоматически сгенерированным хедерам, сам драйвер не настолько огромный.

Though as reported previously, much of the AMDGPU driver code base is so large because of auto-generated header files for GPU registers, etc. In fact, 1.79 million lines as of Linux 5.9 for AMDGPU is simply header files that are predominantly auto-generated.

2.16 - 1.79 - всего 370 тысяч строк кода.

Kron4ek ★★★★★
()
Последнее исправление: Kron4ek (всего исправлений: 2)

Там в каментах пишут, что драйвер fglrx (aka catalyst) содержал 55 млн строк кода, но это не точно.

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

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

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

А кому от этого легче?

Да всем, кто имеет дело с кодом драйвера. Есть же разница, с 2 миллионами строк кода иметь дело или с 400 тысячами. А обычным пользователям плевать, ну да есть там в ядре помоечка в виде огромного количества хедеров, ну и пусть.

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

Я не думаю, что для поддержки разных ядер нужно ТАКОЕ количество кода. Плюс, скорее всего это вместе с юзерспейсом. Но все равно это очень много, учитывая, что он умер более 5 лет назад.

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

А кому от этого легче?

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

intelfx ★★★★★
()

Как думаешь, ЛОР, было бы ядро лучше если бы STABLE-API-NONSENSE так и не появился?

Рациональное решение подобных проблем: генерация кода на этапе сборки при необходимости.

У AMD отговорка, что исходные данные содержат проприетарную информацию. Давить на AMD, чтобы создали БД только с действительно необходимой информацией, которую будет использовать генератор, скажем, в новом репозитории типа linux-driverdb. И опубликовали код нового генератора.

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

Firmware лежит в отдельном репо в бинарном виде, т.к. там проприетарный код для поддержки всякого DRM. Но вообще речь была про fglrx, и мы не знаем точно, что там у него в коде :)

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

Да, но нет. Потому что если рукописный код сломается в новой версии, его можно сравнительно легко починить. А если эта срань полетит, то непонятно что делать. Разве что ждать милости от AMD.

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

Это заголовки, которые описывают регистры GPU. Они могут сломаться только если в GPU что-то изменится. С чего бы вдруг?

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

Я не про этот конкретно случай, а вообще про сгенерированный код.

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

Кстати, а что там с лицензиями? Gpl2 требует распространять исходники, но автосгенеренный код это очевидно не исходники

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

У тебя каша в голове. GPL работает, когда исходник под GPL, и ты делаешь от него производную работу.

Даже если натянуть сову на глобус и сказать, что автосгенерённый код — это не исходник, то исходник-то не под GPL. Исходник находится в полном владении AMD, она может разрешать себе делать с ним всё что угодно — например, создавать производные работы и лицензировать их на любых условиях.

intelfx ★★★★★
()
Ответ на: комментарий от cvs-255

Заголовочные файлы это не код. Иначе нельзя было бы линковать GPL-программы с проприетарными библиотеками. Но мы видим массу GPL-программ под винду, например.

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

Ну тогда выходит что никто (в том числе Линус) не вправе распространять linux, т.к. обязан при этом предоставить исходник, а исходника то и нет, он у амд

cvs-255 ★★★★★
()
Последнее исправление: cvs-255 (всего исправлений: 3)
Ответ на: комментарий от Khnazile

Заголовочные файлы это не код.

Вообще спорно, но тут дело совсем не в этом.

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

Согласно GPL, если ты (и при этом ты не АМД) распространяешь бинарник, ты обязан предоставить и исходник либо ссылку на него. В данном случае ты не можешь предоставить ссылку на исходник, т.к. он не в публичном доступе. Значит не имеешь права распространять

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

Согласно GPL, если ты распространяешь бинарник, ты обязан предоставить и исходник либо ссылку на него.

А давай ты всё-таки прочитаешь текст GPL.

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

Я читал текст GPL. Вот у меня есть линукс. Я хочу его передать Васе. Вася имеет право потребовать у меня исходники. А я исходников предоставить не могу, т.к. у меня их нет

cvs-255 ★★★★★
()
Ответ на: комментарий от goingUp

Но заголовки же не производят код в бинарник)

Производят. Например они содержат константы, которые попадают в код

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

From: Richard Stallman (rms at gnu.org)

Date: Thu Jan 09 2003 - 02:28:47 EST

Someone recently made the claim that including a header file always
makes a derivative work.

That's not the FSF's view. Our view is that just using structure
definitions, typedefs, enumeration constants, macros with simple
bodies, etc., is NOT enough to make a derivative work. It would take
a substantial amount of code (coming from inline functions or macros
with substantial bodies) to do that.

http://lkml.iu.edu/hypermail/linux/kernel/0301.1/0362.html

https://linux.slashdot.org/story/11/03/20/1529238/rms-on-header-files-and-derivative-works

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

ну допустим. Хотя значительная часть заголовков содержит всякие макросы. А вот это уже самый настоящий код

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

Давай представим, что у тебя не линукс, а virtualdub. Ты собираешь virtualdub под виндой, используя в процессе заголовочные файлы Microsoft, а потом передаешь получившийся бинарь Васе, вместе с доступными тебе исходниками. Нарушаешь ли ты требования GPL в таком случае?

Khnazile ★★★★★
()
Ответ на: комментарий от cvs-255

Если они содержат в себе значительную часть кода, да, тогда лицензируемы.

С header-only библиотеками получается проще решить.

gag ★★★★★
()
Ответ на: комментарий от cvs-255

Например они содержат константы, которые попадают в код

Но в заголовках есть значения константы, можно считать, что константы открыты.

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

используя в процессе заголовочные файлы Microsoft

Лишь бы не с SUN Oracle.

gag ★★★★★
()
Ответ на: комментарий от cvs-255

С линуксом все тоже самое, различие только в том, что здесь заголовки для железки, а не для программной библиотеки. Суть в том, что никто не может требовать исходники у автора оригинального произведения, т.к. что является исходником в таком случае решает сам автор. В данном случае, заголовочные файлы являются оригинальным произведением, предоставленным непосредственно от обладателя исключительных прав - компании AMD. Нет разницы, сгенерировали они этот код на машине, или написали вручную. Он является оригиналом, на него не может быть распространено требования предоставить исходники. Другое дело, если бы AMD взяли какие-либо другие заголовочные файлы, созданные кем-то другим и выложенные под GPL, и добавили в них поддержку своих GPU, тогда бы это была производная работа, и можно было бы потребовать исходные коды.

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

Но вот если я распространяю линукс, то у меня требовать имеют право. А я предоставить исходники не могу, тк они у амд. Получается я (и все остальные кроме амд) не вправе распространять линукс

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

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/drivers/gpu/drm/amd/include/navi10_enum.h?h=v5.9

Не будут, т.к. они в виде стандартного свободно редактируемого Си-кода и нет пометки «automatically generated», а, значит, формально это и есть исходник. Да и они не под GPL:

/*
 * Copyright (C) 2019  Advanced Micro Devices, Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE COPYRIGHT HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
gag ★★★★★
()
Ответ на: комментарий от intelfx

GPL работает не так.

А как? Потому что судебных разбирательств было не то чтобы очень много и практика тут вообще непонятно какая. Я встречал мнение, в том числе среди разработчиков ядра, что всё что работает в линуксовом юзерспейсе должно быть под GPL, потому что оно «связано» с GPL кодом.

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

в GPU раз в пять больше транзисторов, чем в остальном комплюктере, 10% кода – недорого

Нет. В Threadripper 3990x примерно 40 миллиардов транзисторов. В nvidia 3090 – 28 миллиардов.

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

Я встречал мнение, в том числе среди разработчиков ядра, что всё что работает в линуксовом юзерспейсе должно быть под GPL, потому что оно «связано» с GPL кодом.

Да это вообще абсолютно не о том.

А как?

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

Внутренняя документация AMD (из которой сгенерированы хедеры и макросы), очевидно, принадлежит AMD целиком, а не на условиях GPL. Они могут создавать любые производные от неё и публиковать на любых условиях.

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

Ну и как этот драйвер сделает плохо моему ядру, скажем, для OpenWRT ? Оно, что, жирнее от него станет ? В обычных дистрибутивах - жирные модули ядра могут поставляться и вне основного пакета. Ну и к тому-же реального кода который может сломаться, как я понял, там намного меньше, остальное - это какие-то хедеры аппаратно-специфичные.

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

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

Чувак, тут штука в том, что именно считается производной работой. Потому что твоё мнение и мнение других на этот счёт может различаться. И то, что Столман написал, может не иметь отношения к тому, что суд решит по итогам спора.

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

Чувак, тут штука в том, что именно считается производной работой.

(устало) Да при чём тут это вообще? Никаких вопросов, всё является производной работой от всего. Хедеры являются производной работой от AMD-шной внутренней документации, ядро является производной работой от хедеров. Дальше что?

«Тут штука в том», что оригинал (внутренняя документация AMD) не под GPL.

Ты в курсе, как двойное лицензирование и open-core модель устроена? Тут то же самое. Владелец кода может взять кусок своего продукта и опубликовать под GPL. Это не даёт возможности требовать у владельца весь остальной код, несмотря на то что опубликованный под GPL код является от него производным.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)

В первом посте указали, что это по большей части автогенерация, на самом деле кода там 370 тыс строк. Так, к чему это я. Помните историю четырехлетней давности с патчем от amd? https://lists.freedesktop.org/archives/dri-devel/2016-December/126422.html
Тогда предлагалось 100 000 строк HAL-кода. https://lists.freedesktop.org/archives/dri-devel/2016-December/126516.html

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

Исполняемый HAL-код и заголовочные файлы (без больших макросов/инлайнов) - это же разные вещи.

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

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

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

А еще там 64 идентичных исполнительных блока.

Nastishka ★★★★★
()

А зачем вообще его встраивать в ядро? Чому нельзя отдельным рпмом или дебом потом скачать?

chenbr0
()
Ответ на: комментарий от cvs-255

Это не верно. Автор выдал тебе оригинальное произведение. Как автор получил этот оригинал не твоя проблема. Ты можешь абсолютно справедливо предоставить эти же заголовки, а на все вопросы отправлять к АМД как к автору оригинального кода. Если ты не делал в них изменений, конечно, тогда нужно предоставить изменения тоже.

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

Драйвер и так можно опакетить в отдельный rpm\deb. Просто его версия будет привязана к версии ядра.

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