2008-12-24 11 views
12

Si empiezo a copiar un gran árbol de archivos de una posición a otra o si algún otro proceso comienza a hacer mucha actividad de disco, la aplicación de primer plano (GUI) camino hacia abajo. Por ejemplo, tome un árbol de archivos de 2 gb con 100k archivos en él. Abra una consola y realice cp -r bigtree bigtree2. Luego ve a Firefox y comienza a navegar. Firefox es casi inutilizable. Incluso si configuro el buen nivel de Firefox en alta prioridad (-20), sigue siendo super lento con grandes retrasos.Cómo hacer que la GUI de Linux sea "utilizable" cuando hay mucha actividad de disco

Recuerdo que hace algunos años cuando trabajaba en una caja de Solaris, el sistema se comportaba mucho mejor en circunstancias similares.

Mi HD usa DMA, no PIO. Es SATA. No montado con la bandera atime.

Respuesta

7

Pruebe ionice -ing o bien haciendo el proceso de copiado. El problema se debe al hecho de que IO obtiene la misma prioridad que la GUI, que para una computadora de escritorio afecta la receptividad percibida.

Hay un Ubuntu brainstorm sobre esto actualmente.

+1

Lo intentaré. Pero eso no es exactamente lo que quiero. Quiero que toda la actividad del disco de fondo se ionice automáticamente o lo que sea. Quiero que el sistema sea lo suficientemente inteligente como para decir "hey, hay un humano tratando de hacer cosas. Deja de molestarlo". – user126593

+0

No estoy seguro de si hay alguna manera de configurar la clase de prioridad a nivel global. Sin embargo, puede configurar el planificador IO que se utiliza para cada dispositivo de bloque (fecha límite de eco>/sys/block//queue/scheduler). Lee http://donami.com/118 para más detalles. – codelogic

+1

No hay forma de que el sistema lo sepa de manera automática. Escribió el comando cp, por todo lo que el sistema sabe que está esperando ansiosamente que termine. –

16

Linux siempre ha tenido un problema con programas que acaparan toda la memoria caché "sucia" del sistema. Lo que está sucediendo es que el proceso de copia está llenando la caché de escritura con los datos de archivo que está copiando y lo está haciendo muy rápidamente. Entonces, cuando Firefox aparece y necesita escribir, primero debe esperar un espacio sucio en el búfer o una ranura disponible para escribir en la cola del disco. Mientras espera, compite con el proceso de copia y el subproceso pdflush del kernel, que mueve los datos de los buffers sucios a la cola de escritura del disco.

Firefox tiene otro problema en este escenario. Utiliza SQLite para almacenar sus marcadores, historial y otras cosas. SQLite es una base de datos compatible con ACID y utiliza un sistema de transacción con su disco escribe enjuagado en el disco. Por lo tanto, no solo tiene que esperar al espacio en el búfer, sino que debe esperar a que la cola del disco, que está llena de archivos copiados, se borre antes de que pueda confirmar una escritura exitosa.

Ha habido un lote de ajustes realizados en el sistema de almacenamiento en disco y búferes de disco de Linux. Hay cambios en casi todas las versiones del kernel. Pruebe uno de los lanzamientos más nuevos. También puede intentar ajustar los valores de sysctl. En cierto modo me como los siguientes:

vm.dirty_writeback_centisecs = 100 
vm.dirty_expire_centisecs = 9000 
vm.dirty_background_ratio = 4 
vm.dirty_ratio = 80 

También puede intentar ajustar el número de ranuras en la cola de disco. Este valor está en /sys/block/sda/queue/nr_requests. Debe sustituir sda con lo que sea que realmente sea su unidad. Más ranuras significa más posibilidades de combinar solicitudes de IO y el planificador de IO de CFQ puede hacer un mejor trabajo con las prioridades. Menos espacios normalmente significa una espera más corta para escribir en el disco para IO sincrónico, como las transacciones de SQLite. Menos espacios también significa una espera más corta para leer IO en la cola del disco si un proceso de escritura llena completamente la cola con escritura IO.

+0

+1 para una respuesta muy buena y detallada. Tal vez él podría usar otro navegador, también. Firefox es cojo e hinchado. –

+0

[Artículo relacionado de LWN] (https://lwn.net/Articles/572911/) y [respuesta de Unix.SE] (https://unix.stackexchange.com/a/107722/27672). – Ruslan

2

No es el primero en darse cuenta de este problema. El antiguo desarrollador de kernel [Con Kolivas] (http://en.wikipedia.org/wiki/Con_Kolivas) descubrió que muchas empresas están pagando a mejorando el rendimiento del servidor de Linux a expensas del rendimiento de escritorio. Con tuvo un impresionante set of patches for making the desktop more responsive. Lamentablemente, hubo algún tipo de guerra de código y, finalmente, Con dropped out.

Me encantaría saber cómo solicitar a los desarrolladores del kernel de Linux para un mejor rendimiento de escritorio. Mientras tanto, si está dispuesto a ejecutar kernel 2.6.22, puede ejecutar con el conjunto de parches -ck.

0

Asegúrese de que DMA esté habilitado en todas sus unidades que lo admitan. Dependiendo de su distribución, este puede no ser el predeterminado. Lea man hdparm, y busque en sus sistemas init mecanismo.

Cuestiones relacionadas