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.
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
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
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. –