<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Linux AV &#187; amd</title>
	<atom:link href="http://www.linuxav.net/index.php/tag/amd/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.linuxav.net</link>
	<description>Una experiencia multimedia con GNU/Linux</description>
	<lastBuildDate>Wed, 14 Apr 2010 14:17:19 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Ext4 explicado para todos</title>
		<link>http://www.linuxav.net/index.php/2009/03/ext4-explicado-para-todos/</link>
		<comments>http://www.linuxav.net/index.php/2009/03/ext4-explicado-para-todos/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 08:56:01 +0000</pubDate>
		<dc:creator>ismael</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[amd]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[ext3]]></category>
		<category><![CDATA[ext4]]></category>
		<category><![CDATA[extent]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[jfs]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[reiserfs]]></category>
		<category><![CDATA[xfs]]></category>

		<guid isPermaLink="false">http://www.linuxav.net/?p=382</guid>
		<description><![CDATA[Rami Taibah es editor de Royal Linuxing, un blog en el que se permite presumir de degradar, ridiculizar y sodomizar el software propietario hasta el fin de los tiempos. En este articulo presenta una explicación no excesivamente técnica del nuevo sistema de ficheros oficial para Linux, el Ext4. Traducido por Ismael Valladolid, editor de Linux [...]]]></description>
			<content:encoded><![CDATA[<p><b>Rami Taibah</b> es editor de <a href="http://hehe2.net/" class="en">Royal Linuxing</a>, un <i>blog</i> en el que se permite presumir de degradar, ridiculizar y sodomizar el <i>software</i> propietario hasta el fin de los tiempos. En este articulo presenta una explicación no excesivamente técnica del nuevo sistema de ficheros <i>oficial</i> para Linux, el Ext4. Traducido por <b>Ismael Valladolid</b>, editor de Linux AV.</p>
<p><b>Rami Taibah</b></p>
<p>La versión 2.6.28 del <i>kernel</i> Linux fue liberada mientras estábamos celebrando la Nochevieja, y declaró el tan esperado sistema de ficheros Ext4 como estable. Se habló tanto sobre cómo de rápido y de fiable es Ext4 que la comunidad Ubuntu se permitió celebrar la noticia de que la próxima versión 9.04 de la distribución incluirá Ext4. Ext4 incorpora multitud de mejoras, pero para alguien sin perfil técnico como yo la explicación puede aparecer confusa, con multitud de términos técnicos que no parecen tener mucho sentido. Así que pensé en informarme y en hacer todo lo posible por entender Ext4 y cómo mejorará nuestra experiencia informática diaria.</p>
<p>Para que un sistema escriba un fichero en un disco duro se necesita una metodología, e instrucciones específicas para alojar el espacio necesario. El viejo Ext3 utiliza un esquema de mapeado de bloques. Un fichero de 100 MB será mapeado en 25.600 bloques de 4 KB cada uno. Cuanto más grande sea el fichero, más bloques serán mapeados, algo que hará el manejo cada vez más lento.</p>
<p>Con la explosión de los accesos a Internet de alta velocidad y los contenidos multimedia este método aparece como claramente ineficiente. Ext4 introduce el concepto de <i>Extent</i>. Un extent es básicamente un conjunto de bloques. En nuestro ejemplo para un fichero de 100 MB, se dirá básicamente &laquo;escribe los datos en los próximos n bloques&raquo;. En lugar de mapear cada bloque individual por separado, Ext4 soportará extents de hasta 128 MB, de forma que para un fichero de 1.000 MB ó 1 GB, se mapearán 10 extents en lugar de 256.000 bloques. Esto mejora el rendimiento y reduce la fragmentación.</p>
<p><a href="http://www.linuxav.net/wp-content/uploads/extents.png"><img src="http://www.linuxav.net/wp-content/uploads/extents.png" alt="ext4 extents" title="extents" width="150" height="354" class="alignnone size-medium wp-image-381" /></a></p>
<p>¿Confuso? Permíteme explicarlo: En nuestro ejemplo de 100 MB, Ext3 utiliza un alojador de bloques que decide qué bloques libres van a ser utilizados para escribir los datos. Pero el alojador puede trabajar sólo de bloque en bloque, lo que significa que nuestro fichero de 100 MB necesitará 25.600 llamadas al alojador. Ineficiente, ¿no? Resulta aún peor darse cuenta de que el alojador no puede optimizar sus políticas porque en realidad no sabe cuántas veces va a ser llamado. No sabe el tamaño del fichero para el que se le está pidiendo que aloje bloques.</p>
<p>Ext4 va a soportar alojar multi-bloques, en una sola llamada, en lugar de una llamada por bloque, evitando sobrecargas de proceso.</p>
<p>Si quieres las ventajas de Ext4, tu sistema Ext3 existente puede ser fácilmente actualizado a Ext4 sin necesidad de formatear. Esto significa que tus datos permanecerán intactos después de actualizar &mdash;lo que no quiere decir que no debas hacer un <i>backup</i> antes&mdash;.</p>
<p>Lo explicado ya reduce en gran medida la cantidad de fragmentación en tu disco duro, aunque ésta acabará sucediendo de una forma u otra. Ext4 incorporará una herramienta que permitirá desfragmentar ficheros individuales o sistemas de ficheros completos &mdash;no disponible aún en 2.6.28 pero sí en futuras versiones&mdash;.</p>
<p>Otras características:</p>
<ul>
<li>Comprobación más rápida del sistema de ficheros; los bloques sin alojar son simplemente ignorados
<li>Marcas temporales mejoradas, lo que retrasa el problema con el año 2038
<li>Subdirectorios ilimitados; donde Ext3 tenía un límite de 32.000
<li>Ficheros más grandes; Ext4 soporta volúmenes de hasta 1 EB y tamaños de fichero de hasta 16 TB.
    </ul>
<p>El popular <i>blog</i> sobre <i>hardware</i> y Linux Phoronix ha ejecutado unas pruebas extensivas sobre el rendimiento de Ext4 contra otros sistemas de ficheros populares como Ext3, XFS, JFS o ReiserFS. El resultado más impresionante se produjo durante la escritura de un fichero de 4 GB, donde Ext4 literalmente borró al resto de sistemas del mapa.</p>
<p><a href="http://www.linuxav.net/wp-content/uploads/ext4-write-performance.png"><img src="http://www.linuxav.net/wp-content/uploads/ext4-write-performance-400x206.png" alt="ext4 prueba rendimiento escritura" title="ext4-write-performance" width="400" height="206" class="alignnone size-medium wp-image-380" /></a></p>
<p>Softpedia ha ejecutado otra prueba distinta en un sistema Ubuntu y descubierto que el uso de Ext4 ahorra hasta 8,7 segundos durante el arranque del sistema.</p>
<ul>
<li>Ubuntu 8.10 con sistema de ficheros Ext3 arranca en 31,8 segundos (en un sistema AMD Sempron)
<li>Ubuntu 9.04 Alpha (Build 20090112.1) con sistema de ficheros Ext3 arranca en 28,3 segundos (en un sistema AMD Sempron)
<li>Ubuntu 9.04 Alpha (Build 20090112.1) con sistema de ficheros Ext4 arranca en 23,1 segundos (en un sistema AMD Sempron)
<li>Ubuntu 8.10 con sistema de ficheros Ext3 arranca en 26,8 segundos (en un sistema Intel Core 2 Duo;
<li>Ubuntu 9.04 Alpha (Build 20090112.1) con sistema de ficheros Ext3 arranca en 24,5 segundos (en un sistema Intel Core 2 Duo)
<li>Ubuntu 9.04 Alpha (Build 20090112.1) con sistema de ficheros Ext4 arranca en 21,4 segundos (en un sistema Intel Core 2 Duo)
    </ul>
<p>Visto en <a href="http://hehe2.net/linux-general/ext4-filesystem-explained-in-plain-english/" class="en">Ext4 Filesystem Explained in Plain English</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxav.net/index.php/2009/03/ext4-explicado-para-todos/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Firefox para Windows sobre WINE, más rápido que el Firefox nativo para Linux</title>
		<link>http://www.linuxav.net/index.php/2009/02/firefox-para-windows-sobre-wine-mas-rapido-que-el-firefox-nativo-para-linux/</link>
		<comments>http://www.linuxav.net/index.php/2009/02/firefox-para-windows-sobre-wine-mas-rapido-que-el-firefox-nativo-para-linux/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 09:22:36 +0000</pubDate>
		<dc:creator>ismael</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[amd]]></category>
		<category><![CDATA[ati]]></category>
		<category><![CDATA[benchmark]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[intel]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[nvidia]]></category>
		<category><![CDATA[opera]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[wine]]></category>

		<guid isPermaLink="false">http://www.linuxav.net/?p=358</guid>
		<description><![CDATA[Ya hemos hablado de que el rendimiento de JavaScript en Firefox es distinto en Windows y en Linux, a pesar de ser exactamente la misma versión del software.
Algunos nos dicen que deberíamos haber utilizado una versión descargada desde Mozilla y compilada por nosotros. No estamos de acuerdo, dado que la mayor parte de los usuarios [...]]]></description>
			<content:encoded><![CDATA[<p>Ya hemos hablado de que el rendimiento de JavaScript en Firefox es distinto en Windows y en Linux, a pesar de ser exactamente la misma versión del <i>software</i>.</p>
<p>Algunos nos dicen que deberíamos haber utilizado una versión descargada desde Mozilla y compilada por nosotros. No estamos de acuerdo, dado que la mayor parte de los usuarios de Linux utilizan <i>software</i> de su gestor de paquetes, y no se bajan otro tipo de cosas de la red. Otros nos han dicho que hubieramos debido probar también Opera. Por último hay quien nos cita que los <i>drivers</i> nVidia, AMD o Intel son los que ralentizan Linux.</p>
<p>De cualquier forma, pensamos en realizar un par de pruebas <i>benchmark</i> rápidas adicionales para ver si podíamos eliminar alguna de esas variantes. No tenemos tiempo para una <i>suite</i> completa desde cero, así que hemos realizado sólo unas pocas pruebas rápidas para ver qué encontramos.</p>
<p>Lo que necesitas saber es:</p>
<ul>
<li>Estas pruebas fueron ejecutadas en el mismo ordenador utilizado para las anteriores, con su misma instalación de Fedora 10
<li>Hemos probado con Mozilla Firefox para Linux tal cual es posible descargarlo desde Mozilla
<li>Hemos probado también Mozilla Firefox para Windows tal cual es posible descargarlo desde Mozilla, pero corriendo sobre WINE en Fedora.
<li>Hemos instalado y probado Opera 9.63 para Fedora 10, tal cual es posible descargarlo desde Opera.com. Nota: Sólo hemos encontrado binarios para i386 en el sitio de Opera, y esto no es óptimo, así que si alguien nos dice dónde descargar binarios para i686 de Opera para Fedora 10, actualizaremos con gusto el artículo.
<li>Hemos ejecutado el <i>benchmark</i> Google V8, como otras veces.
    </ul>
<p>Para ser muy claros: Hemos tomado el Firefox de Windows y lo hemos corrido en Fedora Linux utilizando el WINE 1.1.12 de su gestor de paquetes. Con esta información, así es como quedan los resultados.</p>
<p><a href="http://www.linuxav.net/wp-content/uploads/firefox-winlin-v8-2.png"><img src="http://www.linuxav.net/wp-content/uploads/firefox-winlin-v8-2-400x362.png" alt="" title="firefox-winlin-v8-2" width="400" height="362" class="alignnone size-medium wp-image-360" /></a></p>
<p>Como conclusión: Firefox de Mozilla o de Fedora tienen diferencias de velocidad insignificantes, pero Firefox para Windows corriendo en WINE es más rápido que el Firefox nativo. Opera queda por detrás, pero nos inclinamos a pensar que sus números serían mejores con un binario más optimizado.</p>
<p>¿Cuál es la moraleja? Esperamos comentaristas afirmando que el motivo es claramente un fallo de los <i>drivers</i> de nVidia, ATI o cualquier otro. Vamos, chicas, probadlo por vosotras mismas. Si usas Linux, instala WINE, prueba el Firefox de Windows y saca tus propias conclusiones.</p>
<p>Visto en <a href="http://www.tuxradar.com/content/browser-benchmarks-2-even-wine-beats-linux-firefox" class="en" target="_blank" rel="nofollow">Browser benchmarks 2: even Wine beats Linux Firefox</a> publicado en <a href="http://www.tuxradar.com/" class="en" target="_blank" rel="nofollow">TuxRadar</a> vía <a href="http://tech.slashdot.org/article.pl?sid=09/02/13/0058251&amp;\1from=rss" class="en" target="_blank" rel="nofollow">Slashdot</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxav.net/index.php/2009/02/firefox-para-windows-sobre-wine-mas-rapido-que-el-firefox-nativo-para-linux/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Configura y optimiza Linux para audio y MIDI</title>
		<link>http://www.linuxav.net/index.php/2009/01/configura-y-optimiza-linux-para-audio-y-midi/</link>
		<comments>http://www.linuxav.net/index.php/2009/01/configura-y-optimiza-linux-para-audio-y-midi/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 07:09:12 +0000</pubDate>
		<dc:creator>ismael</dc:creator>
				<category><![CDATA[Audio]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[alsa]]></category>
		<category><![CDATA[amd]]></category>
		<category><![CDATA[chrt]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[irq]]></category>
		<category><![CDATA[jack]]></category>
		<category><![CDATA[kernel]]></category>
		<category><![CDATA[midi]]></category>
		<category><![CDATA[muse]]></category>
		<category><![CDATA[realtime]]></category>
		<category><![CDATA[rosegarden]]></category>
		<category><![CDATA[rtlimits]]></category>
		<category><![CDATA[seq24]]></category>

		<guid isPermaLink="false">http://www.linuxav.net/?p=326</guid>
		<description><![CDATA[¿Qué tres cosas te llevarías a una isla desierta? Mi recomendación es; un ordenador con Linux, un teclado MIDI y este artículo.
Florian Paul Schmidt
Pensé en documentar la información que tengo sobre cómo utilizar un sistema Linux con un kernel apropiativo &#8212;N. del T.; Preemptive en el original&#8212; a tiempo real como sistema de trabajo con [...]]]></description>
			<content:encoded><![CDATA[<p>¿Qué tres cosas te llevarías a una isla desierta? Mi recomendación es; un ordenador con Linux, un teclado MIDI y este artículo.</p>
<p><b>Florian Paul Schmidt</b></p>
<p>Pensé en documentar la información que tengo sobre cómo utilizar un sistema Linux con un <i>kernel</i> apropiativo &mdash;N. del T.; Preemptive en el original&mdash; a tiempo real como sistema de trabajo con audio y MIDI. Así puedo referirme a esta documentación en lugar de repetirla una y otra vez en discusiones. <img src="http://usuarios.lycos.es/ivalladt/files/happy0062.gif" border="0" alt=":)"></p>
<p>Todo lo que sigue se aplica a los <i>kernels</i> -rt con el modelo apropiativo completo &mdash;N. del T.; <i>complete preemption</i> en el original&mdash;. En mi opinión es la mejor forma de operar con un <i>kernel</i> -rt si se quiere en control más estricto sobre prioridades y latencias. Procede un aviso y es que los <i>drivers</i> binarios y los módulos para nVidia podrían ser incompatibles con este tipo de <i>kernel</i>. Utilícese el <i>driver</i> nv de las X11 en su lugar. Aún si el módulo binario fuese compatible, no habría garantías de que encaje en el modelo particular de este <i>kernel</i> y podría destruir las bajas latencias que el resto del código del <i>kernel</i> nos garantiza.</p>
<p><b>El sistema de audio y MIDI</b></p>
<p>En un sistema de audio y MIDI típico basado en Linux encontramos varios componentes clave:</p>
<ul>
<li>JACK, el <i>kit</i> de conexiones de audio. Facilita servicios de audio y por supuesto utiliza la tarjeta de sonido. La IRQ de la tarjeta de sonido requiere un tratamiemto especial &mdash;es decir, una alta prioridad&mdash; para no ser interrumpida por otras cargas del sistema &mdash;el disco duro o la red&mdash;. JACK es la opción favorita para este trabajo dado que permite conectar las aplicaciones de audio las unas con las otras. Además está diseñado para el trabajo a tiempo real desde el primer día. Con un sistema correctamente configurado pueden lograrse latencias ridículamente bajas, p.ej. tamaños de <i>buffer</i> de 8 ó 16 muestras a 48 KHz.
<li>ALSA, facilitando servicios de audio a JACK y el acceso al MIDI vía alsa-seq.
<li>Algún secuenciador MIDI como rosegarden, muse o seq24 que utilice JACK y alsa-seq.
<li>Algunos sintetizadores software &mdash;al final, clientes JACK&mdash; manejados por el secuenciador MIDI
<li>Más <i>hardware</i> que precisa de una IRQ para funcionar &mdash;red, disco duro, etc.&mdash;
<li>El resto del software, como el gestor de ventanas, el escritorio y otras utilidades.
    </ul>
<p>Cualquier <i>kernel</i> -rt en combinación con <i>realtime lsm</i> o <i>rt_limits</i> facilita al usuario herramientas que le permiten un trabajo cómodo que asegura:</p>
<ul>
<li>Operación de audio sin problemas, y con &laquo;sin problemas&raquo; me refiero a sin problemas. Por ejemplo, puedo fácilmente compilar un <i>kernel</i> mientras trabajo con audio a 32 muestras por <i>buffer</i>.
<li>Sincronización MIDI exacta.
    </ul>
<p>Claro está que habrá que ajustar el sistema para obtener el mejor resultado. Podría ser necesario llegar a modificar algunas aplicaciones.</p>
<p><b>Configuración de audio</b></p>
<p>Podemos simplificar y decir que cuanto más alta sea la prioridad de una tarea más posible es que se ejecute sin molestias. Con un <i>kernel</i> -rt se tiene la posibilidad de que ciertos manejadores de IRQ tengan menos prioridad que aplicaciones que corren en el espacio de usuario. Es posible, por ejemplo, correr jackd con una prioridad mayor que la de cualquier manejador de IRQ que podría interrumpir el trabajo con audio, como el disco duro o la red. Es necesario el parámetro -P de jackd para esto.</p>
<p>En un <i>kernel</i> -rt, por defecto todos los manejadores de IRQ tienen prioridades entre 40 y 60, así que hacer que jackd se ejecute con una prioridad de 70 parece una buena elección.</p>
<pre>
  jackd -R -P 70 -d alsa ...
  </pre>
<p>Sólo que si queremos que el manejador de la IRQ de la tarjeta de sonido tenga una prioridad más alta que jackd, dado que la IRQ de la tarjeta de sonido es al final la que gobierna el funcionamiento de JACK. Utilizamos así la utilidad chrt para cambiar esto. En mi sistema la tarjeta de sonido tiene la IRQ 4, comprueba /proc/interrupts en tu máquina para averiguar la tuya.</p>
<pre>
  chrt -f -p 82 `pidof "IRQ-4"`
  </pre>
<p>&mdash;N. del T.; Comprueba las distintas prioridades asignadas así:&mdash;</p>
<pre>
  top -b -H -n 1 | grep -i irq | sort -n -k3
  </pre>
<p>Una prioridad de 82 está bien por encima de la concedida a jackd. Dado que jackd ejecuta hilos además de su bucle principal, es necesario vigilar esto. Por ejemplo, implementa un <i>watchdog</i> que se ejecuta a una prioridad 10 superior a la del bucle principal. Es decir, a 80 en nuestro caso. Los hilos de proceso de cliente, en cambio, corren con una prioridad 1 inferior a la del bucle principal, 69 en nuestro caso.</p>
<p>La parte audio de nuestro sistema queda cubierta. Con esta configuración consigo operar con tamaños de <i>buffer</i> ridículamente bajos con JACK y mi M-Audio Delta 66 &mdash;hasta 8 muestras por periodo, reconociendo algún problema con el cambio de contextos forzando tanto mi sistema&mdash; Y ahora, ¿qué pasa con MIDI? ¿Cómo lo hacemos funcionar aquí?</p>
<p><b>Configuración MIDI</b></p>
<p>Tenemos que saber una cosa o dos sobre cómo la planificación a tiempo real funciona para afinar esta parte. La clase de planificación utilizada por la mayor parte de aplicaciones de audio es SCHED_FIFO. Se trata de una clase especial con niveles de prioridad estáticos de 1 a 99 y que garantiza que las tareas que la utilizan pueden conservar la CPU tanto tiempo como requieran, siempre que otra tarea SCHED_FIFO de mayor prioridad no la reclame. Por supuesto esto significa que un programa lo suficientemente puñetero puede bloquear el sistema simplemente acaparando toda la CPU siempre que no haya otra tarea con una prioridad mayor que pase por encima. Así que las tareas que tienen más prioridad ahora en nuestro sistema son los hilos de jackd y el manejador de la IRQ de la tarjeta de sonido.</p>
<p>El procesado de audio se realiza por lotes y para ilustrarlo permítaseme asumir que utilizamos un tamaño de <i>buffer</i> muy grande, digamos de 1 segundo &mdash;no sé si alguna tarjeta de sonido permite un <i>buffer</i> de este tamaño, pero para ilustrar el argumento supongamos que sí&mdash;. Se trata de 48.000 muestras a 48 KHz. Asúmase también que los clientes JACK están cargando realmente el sistema. Por ejemplo que el indicador DSP de jackd muestra un 50%. Esto significa que cada segundo el sistema completo se detiene para que jackd y sus clientes se tomen ese medio segundo para realizar sus procesos. Es fácil adivinar que el efecto en la sincronización MIDI va a ser terrible.</p>
<p>En realidad MIDI necesita más &laquo;tiempo real&raquo; que el audio. El audio se procesa en lotes de tamaño respetable &mdash;entre 1 y 50 ms dependiendo del tamaño de <i>buffer</i> utilizado&mdash;. Pero cuando un secuenciador MIDI necesita enviar un evento a un puerto, debe hacerlo con garantías de que llegará a tiempo a su destino &mdash;hay una excepción derivada de la implementación del secuenciador MIDI en ALSA, el cual permite aplazar eventos hasta un tiempo posterior, y de la que se derivan los problemas de ALSA con el MIDI&mdash;. El procesado MIDI, en cambio, es ligero comparado con el de audio. El bucle principal de un secuenciador MIDI necesita ejecutarse muchas veces por segundo para ser capaz de procesar eventos MIDI con una resolución lo suficientemente detallada. Así que la parte MIDI de un secuenciador debería correr con una prioridad mayor que jackd. La interfaz alsa-seq permite que los eventos MIDI sean aplazados para ser entregados en un momento preciso, lo que aligera el requisito de &laquo;debo enviarlo ahora mismo&raquo;. Pero se trata de una funcionalidad compleja de gestionar y no demasiados programadores la utilizan. Así que tiene mucho más sencillo configurar el sistema para que los datos MIDI tengan una entrega inmediata.</p>
<p>Hay distintas fuentes de sincronización utilizadas por los secuenciadores MIDI en un sistema Linux. Las más comunes son:</p>
<p><b>RTC</b></p>
<p>El reloj en tiempo real que todo PC tiene. Corre a una frecuencia programable, p.ej. de 1.024 Hz y permite a una aplicación ser ejecutada muy a menudo y muy regularmente. Para que la sincronización basada en RTC funcione bien, el manejador de la IRQ del RTC &mdash;la IRQ 8 en un sistema XT-PIC, consúltese /proc/interrupts&mdash; necesita una prioridad superior a la de jackd y a la del resto de aplicaciones del sistema. 98 es un buen valor.</p>
<pre>
  chrt -f -p 98 `pidof "IRQ-8"`
  </pre>
<p>Aún si no se utiliza el RTC, esta configuración no hará ningún daño. Si se quiere que los usuarios ordinarios puedan hacer uso del RTC a una frecuencia razonablemente alta, hay que asegurarse de que:</p>
<pre>
  /proc/sys/dev/rtc/max-user-freq
  </pre>
<p>Está configurado a 8192. Puede hacerse ejecutando como root:</p>
<pre>
  echo 8192 > /proc/sys/dev/rtc/max-user-freq
  </pre>
<p>&mdash;N. del T.; Es posible llevar esta configuración a /etc/sysctl.conf, consúltese la ayuda.&mdash;</p>
<p>Es posible por supuesto visualizar el valor actual:</p>
<pre>
  cat /proc/sys/dev/rtc/max-user-freq
  </pre>
<p><b>Temporizador basado en sleep()</b></p>
<p>En este caso la aplicación corre repetidamente poniéndose a sí misma a <i>dormir</i> por cortos intervalos. Luego mide cuánto tiempo durmió para ser capaz de sincronizar correctamente. No sé exactamente como sleep() o sus derivadas como nanosleep() o usleep() están exactamente implementadas en Linux, así que me permito una adivinanza.</p>
<p>Cuando una tarea echa a dormir en realidad le dice al planificador que libera la CPU y que no quiere volver a ser ejecutada hasta que el tiempo de <i>sueño</i> haya vencido. El temporizador del sistema es una interrupción especial de temporización en todo sistema PC que corre a una frecuencia de 250 Hz en la configuración por defecto de un <i>kernel</i> Linux. Este temporizador del sistema ejecuta el bucle principal de ejecución de un <i>kernel</i> Linux, a saber, el planificador. Así que cuando sólo hay un temporizador disponible en el sistema, el tiempo más breve que una aplicación puede dormir son 4 ms &mdash;1/250 seg&mdash;. La granularidad es grande, así que cabe aconsejar cambiar la frecuencia por defecto del temporizador del sistema de 250 Hz a 1.000 Hz, lo que facilita una resolución de milisegundo a sleep(). Presúmase que se trata de una configuración correcta, que sólo costará un mínimo de carga adicional en el sistema.</p>
<p>Dado que este temporizador del sistema siempre corre a la máxima prioridad SCHED_FIFO en los <i>kernel</i> -rt actuales, no es necesaria ninguna configuración extra.</p>
<p>¡BZZZZT ERROR! Podrías tener que dar a algunos hilos de temporización también una alta prioridad para que sleep() funcione correctamente. El más importante aquí es softirq-timer/0, así que dale también un 99.</p>
<p>¡BZZZZZZZT ERROR OTRA VEZ! Esto se aplicaría sólo para un <i>kernel</i> habiendo sido compilado sin el soporte al temporizador de alta resolución. Espero aclarar este punto en algún momento en más detalle preguntando directamente a <b>Ingo Molnar</b>. Si en tu configuración el temporizador de alta resolución ha sido activado, no debería ser necesario darle a softirq-timer/0 una prioridad tan alta.</p>
<p>En realidad, actualmente parece que establecer esa alta prioridad a softirq-timer/0 daña el rendimiento del sistema. Así que de momento recomiendo configurar el temporizador de alta resolución en el <i>kernel</i> y dejar en paz a softirq-timer/0.</p>
<p><b>Otras fuentes de sincronización</b></p>
<p>¿Los temporizadores POSIX de alta resolución?</p>
<p><b>Hilos MIDI en aplicaciones MIDI</b></p>
<p>Nuestras fuentes de sincronización ya han sido establecidas. ¿Qué pasa ahora con las aplicaciones que las utilizan? Establecer una alta prioridad para la interrupción del reloj no es todo lo que se necesita. Las aplicaciones corriendo en el espacio de usuario deben utilizar dichas interrupciones directa o indirectamente, y también necesitan correr con altas prioridades. Idealmente por encima de la de jackd y el resto de material de audio.</p>
<p><b>Sintetizadores software</b></p>
<p>Habitualmente tienen un hilo de ejecución que recibe eventos MIDI, les añade una marca temporal &mdash;p.ej. mediante jack_frametime()&mdash; y los mete en una cola &mdash;idealmente un <i>ringbuffer</i> sin <i>lock</i>&mdash; donde las llamadas a audio_process() los van consumiendo. La llamada a process() puede determinar exactamente dónde dentro del periodo deben generarse los datos de audio correspondientes utilizando el método jack_last_frametime() de JACK &mdash;un método sencillo; añádase un periodo a la marca temporal de los eventos MIDI y después réstese el jack_last_frametime de la cuenta. La diferencia resultante es el desplazamiento dentro de el periodo que se está procesando. El hilo de recepción y marca temporal MIDI necesita correr a una prioridad más alta que jackd y que todos los procesos de audio. 90 es por ejemplo una elección razonable.</p>
<p>He escrito un pequeño sintetizador software que evalúa numéricamente la ecuación de onda que utiliza este esquema, y que funciona realmente bien.</p>
<p><a href="http://affenbande.org/~tapas/ughsynth-0.0.3.tgz" class="xx">ughsynth-0.0.5.tgz</a></p>
<p>Téngase cuidado sin embargo con la cantidad de CPU que utiliza &mdash;hasta un 50% en mi Athlon a 1,2 GHz&mdash;.</p>
<p><b>Secuenciadores MIDI</b></p>
<p>Generalmente tienen al menos un hilo de ejecución para manejar su sincronización MIDI. Algunos usan el RTC, otros se basan en sleep(). El único que conozco que permite establecer su prioridad en tiempo real es seq24 pero, hasta donde sé, esta prioridad está a pelo en el código fuente. Así que para ajustarla tendrás que remangarte. <img src="http://usuarios.lycos.es/ivalladt/files/happy0062.gif" border="0" alt=":)"></p>
<p>No sé demasiado sobre el resto de secuenciadores MIDI ni de cómo manejan esta cuestión. Rosegarden por ejemplo facilita dos opciones diferentes para su fuente de sincronización &mdash;RTC y reloj del sistema basado en sleep()&mdash; pero no he encontrado la forma de obtener más detalles. Debería ser posible acceder a esta configuración utilizando la interfaz de usuario, lo que sería lo ideal.</p>
<p><b>Probándolo todo</b></p>
<p>He escrito un pequeño conjunto de aplicaciones:</p>
<p><a href="http://affenbande.org/~tapas/midi_timer-1.tgz" class="xx">midi_timer-1.tgz</a></p>
<p>Incluye dos que intentan producir un flujo de mensajes MIDI <i>note-on</i>. Una está basada en el RTC ejecutándose a una frecuencia de 2.048 Hz, lo que debería ser suficiente. La otra está basada en sleep(). Las dos se ejecutan a una prioridad de 95, por encima de la de jackd, y deberían servir como casos de prueba.</p>
<p><b>Resumen de configuración de prioridades</b></p>
<pre>
  99 System timer IRQ
  98 RTC IRQ

  95
  .
  . Midi threads of softsynths/midi sequencers
  .
  85 -

  82 Soundcard IRQ

  80 Jackd watchdog thread
  70 Jackd main loop
  69 Jackd client (softsynths/midi sequencers) audio process callbacks

  60
  .
  . Other IRQ handlers (disk, network, USB, GFX)
  .
  40
  </pre>
<p><b>Permitiendo a usuarios normales ejecutar procesos en tiempo real</b></p>
<p>Consúltense las páginas de ayuda de realtime-lsm y/o rtlimits.</p>
<p>Visto en <a href="http://tapas.affenbande.org/wordpress/?page_id=40" class="en">Linux Audio/MIDI System Setup</a> publicado en <a href="http://tapas.affenbande.org/wordpress/" class="en">Ugh! &#8211; Software, Music and more&#8230;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linuxav.net/index.php/2009/01/configura-y-optimiza-linux-para-audio-y-midi/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
