2011-08-12 11 views
6

Estoy realizando algunos experimentos con aplicaciones de E/S intensivas y trato de comprender los efectos de variar el tamaño del búfer de E/S del kernel, diferentes algoritmos de ascensores, y más.Cómo cambiar el tamaño del búfer de E/S kernel

¿Cómo puedo saber el tamaño actual del búfer de E/S en el kernel? ¿El kernel usa más de un buffer cuando surge la necesidad? ¿Cómo puedo cambiar el tamaño de este buffer? ¿Hay algún archivo de configuración en algún lugar que almacene esta información?

(Para ser claros, no estoy hablando de cachés de procesador o disco, estoy hablando del buffer utilizado internamente por el kernel que almacena/lee buffers antes de expulsarlos al disco de vez en cuando).

Gracias de antemano.

Respuesta

9

El kernel no almacena en búfer las lecturas y las escrituras de la manera en que usted piensa ... Mantiene una "memoria caché de páginas" que contiene páginas del disco. No puedes manipular su tamaño (bueno, no directamente, de todos modos); el núcleo siempre usará todos memoria libre disponible para la memoria caché de página.

Necesita explicar lo que realmente está tratando de hacer. Si desea controlar la cantidad de datos que el núcleo extrae previamente del disco, intente buscar "linux readahead". (Sugerencia: blockdev --setra XXX)

Si desea controlar el tiempo que el kernel almacenará las páginas sucias antes de enjuagarlas en el disco, intente buscar "linux dirty_ratio".

Una aplicación específica también se puede pasar por alto el caché de páginas por completo mediante el uso de O_DIRECT, y puede ejercer cierto control sobre él, usando fsync, sync_file_range, posix_fadvise y posix_madvise. (O_DIRECT y sync_file_range son específicos de Linux, el resto es POSIX.)

Podrá formular una pregunta mejor si primero se informa sobre el subsistema VM de Linux, especialmente la memoria caché de página.

3

Creo que te refieres a las colas IO del disco. Por ejemplo:

$ cat /sys/block/sda/queue/nr_requests 
128 

El uso de esta cola depende del planificador IO que esté en uso.

$ cat /sys/block/sda/queue/scheduler 
noop anticipatory deadline [cfq] 

cfq es la opción más común, aunque en sistemas con controladores de disco avanzadas y en los sistemas invitados virtuales noop es también una muy buena opción.

No tengo ningún archivo de configuración que conozca. En los sistemas en los que necesito cambiar la configuración de la cola, pongo los cambios en /etc/rc.local aunque puede usar un guión de inicio completo en su lugar y colocarlo en un RPM o DEB para la distribución masiva a muchos sistemas.

+0

Eso no es exactamente lo que estaba buscando, pero eso ayudó también. – jitihsk

Cuestiones relacionadas