Hace 1 año | Por MDman a lwn.net
Publicado hace 1 año por MDman a lwn.net

[Copio&Pego] La publicación del código fuente para el hardware gráfico de NVIDIA ha sido quizás una sorpresa; al menos a primera vista, parece que podría conducir a un controlador con soporte oficial. Sin embargo, el proyecto nouveau ha estado trabajando durante muchos años en un controlador para el hardware de NVIDIA, por lo que una pregunta obvia es qué sucede con nouveau a la luz del anuncio de NVIDIA. El responsable de los gráficos del kernel, Dave Airlie, dio una charla en la Linux Plumbers Conference (LPC) de 2022 para ayudar a dar luz.

Comentarios

meneandro

#4 Lo más interesante de NVK es que existe un proyecto llamado ZINK, que no es más que una implementación opengl sobre vulkan (en lugar de una nativa hecha en los propios drivers), así que nouveau probablemente sea abandonado y con tener listo el soporte para vulkan maten dos pájaros de un tiro y tengan "opengl gratis" con una implementación abierta y libre por fin en hardware nvidia. La parte mala es que, evidentemente, sólo funcionará con hardware relativamente reciente que soporte vulkan (nouveau seguirá dando soporte a esos drivers más antiguos).

Para los curiosos, yo he usado zink sobre radv para ejecutar software que directamente en los drivers opengl no funcionaba correctamente y con buenos resultados. El render va sin los problemas que tenía con el driver nativo de opengl y el rendimiento no se resiente mucho (a la espera de unas optimizaciones tanto de zink como de radv que prometen mejorar mucho el rendimiento en ciertos escenarios concretos y que están incorporadas en lo que será mesa 22.3 que saldrá antes de final de año). Así que el soporte que da zink es actualmente bastante bueno.

ronko

La publicación del código fuente para el hardware gráfico de Nvidia

¿Hay relacionadas sobre el tema?, ¿oficial o por aquél hackeo que sufrieron?

meneandro

#1 Nvidia estaba en una encrucijada desde hacía bastante tiempo, el hackeo sólo agravó el problema. El soporte de sus gráficas en linux se sostenía con un driver privativo que se instalaba como módulo de kernel. Esto tenía una gran desventaja, si actualizabas el kernel, el módulo tenía que recompilarse para ese kernel nuevo para que tu gráfica siguiera funcionando con normalidad. Eso llegó a automatizarse con el tiempo y empezó a no ser un problema.

Pero seguían habiendo problemas. Al estar todo ese driver privativo hecho "a la manera de nvidia", muchas de las decisiones de diseño del mismo chocaban con la forma en que se habían diseñado las infraestructuras de linux, lo que provocaba problemas que se arreglaban con parches parte de nvidia; incluso así, el funcionamiento general solía ser bueno salvo algunas aplicaciones minoritarias que nvidia no quería o podía soportar.

Para añadir más leña al fuego, linux, que es un sistema en constante evolución de por si, encaró varias transformaciones gordas de cómo encajan ciertas partes del sistema e interaccionan entre ellas, systemd, wayland y toda la pila gráfica entre ellas. X ya es una tecnología obsoleta y funciona en gran parte sobre extensiones modernas (se puede afirmar sin temor a error, que todo lo auténticamente moderno funciona porque hay extensiones que lo permiten, el núcleo de X está muy muy desfasado, abandonado, es un problema de seguridad y funcionalidad detrás de otro, maquillado por décadas de parches y código que hacen que las costuras no canten demasiado). La pila gráfica ha cambiado pues completamente, desde motores de render y aceleración 2D y de video que ya no se usan, extensiones para permitir el uso de opengl que se han dejado de lado porque el opengl de hoy ya no tiene que ver con el pasado, etc. y ha sido sustituída por elementos modernos y más ajustados al hardware actual. Eso afecta directamente a X, que para soportar todos esos cambios ha tenido que diseñar y evolucionar extensiones para hacer interoperable el sistema con las nuevas capacidades gráficas.

Como X está desfasado, todo ese trabajo de modernización no fue tirado en balde y son las bases de lo que es y se usa por el protocolo Wayland y los compositores que lo implementan. Evidentemente, todos esos cambios también afectan a los drivers, y nvidia ha ido rezagada constantemente porque tenía unos drivers bastante sólidos hechos para X (y recordemos que nvidia realmente hace sus drivers para el mercado empresarial y científico: aplicaciones de diseño, cálculo, inferencia, etc) y sus clientes funcionan principalmente en X (su mercado no sólo es linux, sino otros unix, así que tampoco tenía necesidad de cambiar nada y sólo para soportar un sistema de los varios basados en unix que soporta). Además, se empeñaban no en adaptarse a infraestructuras comunes y a exigir que se adoptaran sus propias especificidades como estándares por los demás fabricantes de hardware (así ellos no tenían que modificar su código y forzaban a los demás a hacer esfuerzos extra para estar a su mismo nivel), por no hablar de que al copar el mercado, sus librerías y aplicaciones cerradas mantenían cautivo el mercado e impedían a la competencia hacerles sombra (léase cuda, optix, etc) y su pobre implementación de los estándares abiertos (no le interesa teniendo sus propios productos, romper su propio mercado).

Con este soporte cerrado, mantenido al día en cuanto a soporte de hardware y sus funcionalidades pero obsoleto respecto a interoperabilidad con el SO, aparte tampoco daba facilidades a los que a base de ingeniería inversa dieron soporte adecuado a su hardware para todos estos cambios (al estar integrado en el kernel, no hay problemas cuando se actualiza este, aprovecha todas las nuevas características y funcionalidades añadidas, tecnologías abiertas asociadas a mesa, etc), así que el soporte opensource del hardware de nvidia con el driver nouveau dejaba bastante que desear (en algún hardware no tanto en capacidad, funcionalidad o estabilidad, pero si en rendimiento, dado que no había forma de configurar los relojes internos de las tarjetas y estas funcionaban a medio gas), agravado porque a partir de ciertos modelos, las bios de las gráficas estaban cifrados (y sin clave para descifrarlos, imposible configurar cosas como el inicializado de la tarjeta y otras funcionalidades básicas).

La situación de nvidia pues era bastante mala de cara al futuro (o sea, hoy todo funciona, pero quizá mañana no o poco a poco vayan fallando cosas). Si querías usar wayland, no podías usar nvidia, y esto fue así hasta no hace demasiado y porque al final han tenido que ceder. Incluso así, el soporte que dan para wayland es bastante deficiente y porque otras compañías han puesto de su parte para facilitarlo.

El caso es que ya sea antes* o después del hackeo, llegaron a la conclusión de que les era más beneficioso seguir el modelo de los drivers híbridos de amd: la parte de kernel abierta, para integrar el soporte en el propio kernel y facilitar la interoperabilidad con el SO y que el usuario se olvide de líos de compatibilidad y problemas con las actualizaciones, la parte de usuario (opengl, vulkan, computación, etc) cerrada (amd tiene un driver cerrado siguiendo esta arquitectura, cierto, pero también tienen uno completamente libre y abierto y aparte, está el driver comunitario que funciona sobre la infraestructura de mesa). Eso les permite "ir de guays" con la comunidad presumiendo de drivers abiertos y evitando muchos problemas y a la vez, seguir manteniendo todo lo demás cerrado como les gusta a ellos. A diferencia de AMD, poca documentación ha abierto, aparte de los fuentes de, como vuelvo a recalcar, sólo una parte mínima de su driver (el resto sigue cerrado y seguirá cerrado). Tanto intel como amd siguen una política de abrir sus apis y desarrollos para que la comunidad los adopte y sus rivales puedan a su vez usarlos y todos poder beneficiarse. Es lo que hace que por ejemplo, cualquiera pueda usar FSR (el escalado de imagen) en su hardware mientras que no puedas usar DLSS salvo que tengas hardware nvidia (y no cualquiera, sólo el que disponga de ciertas características).

¿Qué beneficios nos trae a los usuarios del software libre este movimiento? (cuando esté terminado, actualmente la parte de kernel abierta de su driver dista mucho de poder ser integrada en el kernel... amd tardó bastante tiempo en poder hacerlo cuando hizo este mismo movimiento, años entre el inicio de su implementación y su plena integración y madurez en el kernel). Pues igual que como pasó com AMD, los drivers libres pueden hacer uso de esta parte de kernel abierta. Esto tiene su parte buena y su parte mala. La buena: se acaba de anunciar ayer mismo el nuevo driver vulkan abierto hecho por la comunidad para hardware nvidia, nvk (los fuentes de la parte de kernel dan suficiente información como para que, con la infraestructura que hay en pie gracias a los drivers de vulkan ya existentes ANV y RADV sea posible y asequible dar soporte al hardware de nvidia). La mala: nouveau, el driver libre y abierto con soporte para opengl de nvidia, tiene una arquitectura demasiado distinta como para poder adaptar y adoptar hoy en día esa parte de kernel abierta. Como aún nvidia va a tener que modificar y adaptar bastante su código para que se integre en el kernel, es posible que en un futuro las cosas cambien al respecto.


*En su día corrieron bastantes rumores de que un nuevo driver "gordo" estaba cocinándose para incorporarse al kernel. Todo el mundo suponía que sería nvidia, pero tiempo después se anunció un driver abierto por parte de imagination tecnologies (powervr). Sea cuestión de que ambas cosas coincidieran o no (nadie afirmó cuando llegó el driver de powervr que el gran anuncio de tiempo atrás fueran ellos), pero resulta intrigante pensar en que si que fue nvidia. Luego el hackeo precipitaría los anuncios y demás o no, algún día se aclarará el meollo.

meneandro

#2 Me olvidaba de comentar: eso de que nvidia ha abierto la parte de su driver que está en el kernel tampoco ha sido todo lo positiva que debería: han movido gran parte de sus cosas propietarias al firmware de su tarjeta (que sigue siendo cerrado... aunque aquí está a la par que amd e intel que funcionan de manera equivalente; aunque en sus drivers son muchísimo más abiertos, sus firmwares son igual de cerrado que los de nvidia).

M

#2 #3 Por comentarios como estos mola seguir mandando noticias de software libre a meneame aunque no sea como antaño.