12 Ajuste de las características de E/S para necesidades especiales

Los pasos de configuración básica del sistema de archivos que se describen en los capítulos anteriores proporcionan un rendimiento óptimo y balanceado en la mayoría de las situaciones. De modo que si no está seguro acerca de cómo se comporta su aplicación, generalmente será mejor dejar los ajustes predeterminados de las configuraciones de esta sección. Sin embargo, si la aplicación realiza solicitudes de E/S extraordinariamente grandes o consistentes, se puede mejorar el rendimiento general mediante el ajuste o el cambio de la manera en la que el sistema de archivos gestiona la E/S física.

La E/S física es más eficiente cuando todas o la mayoría de las lecturas y escrituras comienzan y finalizan exactamente en límite de 512 bytes de un sector de disco. La E/S de disco solamente se puede producir en bloques de tamaño del sector. Por ello, cuando una solicitud de E/S sobrepasa un límite del sector, el sistema debe realizar operaciones adicionales para separar los datos de la aplicación de los datos no relacionados en el mismo sector. Debe asegurarse de que estos últimos no se dañen en el proceso. En el peor de los casos, cuando se realizan escrituras en los sectores, el sistema de archivos debe leer el sector, modificar los datos del sector en la memoria y, a continuación, escribir el sector nuevamente en el disco. Esta actividad mecánica adicional realiza dichas operaciones de lectura, modificación y escritura, que son sumamente costosas en términos de rendimiento.

Lamentablemente, la mayoría de las aplicaciones necesitan leer y escribir datos en tamaños variados que no están bien alineados con los límites del sector . Por este motivo, como muchos sistemas de archivos, Oracle HSM usa E/S paginada de forma predeterminada. El sistema de archivos gestiona solicitudes de E/S inmediatas desde la aplicación mediante la lectura desde una caché de datos o la escritura en ésta, en la memoria paginada de Solaris. El sistema de archivos actualiza de forma asíncrona la caché con lecturas y escrituras de tamaños más eficaces y mejor alineadas. Cada vez que lee datos de un disco, puede aprovechar al máximo la E/S física mediante la anticipación de las próximas lecturas y la carga de los datos correspondientes en la caché en la misma operación. La mayoría de las solicitudes de E/S se satisfacen, por lo tanto, mediante el uso de los datos en caché en páginas de memoria virtual, sin actividad de disco físico adicional. La E/S paginada usa memoria e impone una carga adicional en la CPU del sistema pero, en la mayoría de los casos, estos costos son más que desplazados por la mayor eficacia de E/S física.

Sin embargo, en unos pocos casos, la sobrecarga adicional asociada con la E/S paginada no es desplazada por sus ventajas. Las aplicaciones que siempre realizan E/S bien alineadas y las aplicaciones que se pueden ajustar para ello, no aprovechan nada de la caché de páginas. Las aplicaciones que realizan E/S sumamente grandes también pueden aprovechar muy poco del almacenamiento de páginas en caché, ya que únicamente el primer y el último sector están desalineados, y ya que las E/S grandes, pueden, en cualquier caso, ser demasiado grandes para ser conservadas en caché. Finalmente, las aplicaciones que transmiten datos de telemetría, videos de vigilancia u otros tipos de información en tiempo real pueden arriesgar la pérdida de datos irrecuperables si las escrituras no se confirman de inmediato para almacenamiento no volátil. En estos casos, es mejor usar E/S directa Cuando se especifica la E/S directa, el sistema de archivos transfiere datos directamente entre la memoria de la aplicación y el dispositivo de disco, y omite la caché de páginas.

Oracle HSM le otorga una latitud considerable en lo que respecta a la selección y el ajuste del comportamiento de caché de E/S. Una vez que haya comprendido las características de E/S de la aplicación y haya realizado las tareas descriptas en Ajustar los parámetros del controlador y del sistema Solaris para E/S anticipada del sistema de archivos, seleccione su enfoque de la siguiente manera:

Optimización de E/S paginada para transferencias de datos más grandes

La E/S paginada se puede ajustar para satisfacer mejor las características de la aplicación y del hardware. Las lecturas y las escrituras desde la caché deben ser lo suficientemente grandes para transferir el monto promedio de datos que la aplicación transfiere o la cantidad máxima de datos que el almacenamiento físico puede transferir, el que sea más grande. Si no podemos ajustar el comportamiento en caché de páginas para ninguna de las opciones, la caché será poco utilizada, las solicitudes de E/S requerirán más E/S física y el rendimiento general del sistema sufrirá.

Por ejemplo, considere la diferencia entre un dispositivo de datos md que se implementa en un único volumen de disco y un dispositivo md implementado en un grupo de volúmenes 3+1 RAID 5. Si gestionáramos cada solicitud de escritura desde la aplicación mediante la escritura de una unidad de asignación en disco (DAU) de 64 kilobytes desde la caché hasta esta última y omitiéramos el ancho de banda adicional posible con el dispositivo de varios discos, el dispositivo RAID debería dividir la E/S en tres fragmentos más pequeños y menos eficientes, de 21 y 22 kilobytes, antes de escribir datos en los tres discos de datos del grupo de RAID. Si se completaran las solicitudes de E/S de 64 kilobytes desde la aplicación, esto requeriría mucho más trabajo con el uso de esta configuración que si se hubiera usado la caché de páginas para ensamblar las solicitudes en una única E/S de 3 DAU y 192 kilobytes. Si la aplicación pudiera realizar solicitudes de E/S (o si se pudiera ajustar para ello) en múltiplos pares del ancho de banda del dispositivo (192, 384 o 576 kilobytes), podríamos almacenar en caché incluso más datos y transferir más con cada E/S física, reducir aún más la sobrecarga y aumentar el rendimiento respectivamente.

Por ello, identificamos los requisitos de E/S de su aplicación y comprendemos las propiedades de E/S de su hardware. Siga estos pasos.

  1. Inicie sesión en el host del sistema de archivos como root.

    root@solaris:~# 
    
  2. Realice una copia de seguridad del archivo /etc/vfstab del sistema operativo.

    root@solaris:~# cp /etc/vfstab /etc/vfstab.backup
    root@solaris:~# 
    
  3. Abra el archivo /etc/vfstab en un editor de texto y ubique la fila del sistema de archivos que necesita el ajuste.

    En el ejemplo, el sistema de archivos se denomina qfsma:

    root@solaris:~# vi /etc/vfstab
    #File
    #Device    Device   Mount     System  fsck  Mount    Mount
    #to Mount  to fsck  Point     Type    Pass  at Boot  Options
    #--------  -------  --------  ------  ----  -------  --------------------
    /devices   -        /devices  devfs   -     no       -
    ...
    qfsma      -        /qfsma    samfs   -     yes      ...
    
  4. En el campo Mount Options del sistema de archivos, agregue la opción de montaje writebehind=n, donde n es múltiplo de 8 kilobytes. Use una coma (sin espacios) para separar las opciones de montaje. Guarde el archivo y cierre el editor.

    La opción writebehind determina cuánto de un archivo determinado puede poner en cola en la caché de páginas antes de que la caché se vacíe en el disco. La configuración del parámetro en un valor mayor mejora el rendimiento, ya que una cola larga consolida múltiples escrituras de aplicaciones pequeñas en menor cantidad de E/S físicas más grandes y más eficaces. La configuración de un parámetro menor protege los datos, ya que los cambios se escriben más rápido en el almacenamiento no volátil.

    El valor predeterminado es 512 kilobytes (ocho DAU de 64 kilobytes), que generalmente favorece la E/S secuencial de bloques grandes. Pero en este ejemplo, el conjunto de familias contiene dos dispositivos de disco md con asignación de archivos segmentados. El ancho del segmento es una DAU de 64 kilobytes, para una escritura de 128 kilobytes en los dispositivos md. Los dispositivos md son grupos RAID 5 3+1. De modo que deseamos escribir al menos 128 kilobytes en cada uno de los tres ejes de datos, para una escritura total de, por lo menos, 768 kilobytes (96 grupos de 8 kilobytes cada uno):

    #File
    #Device    Device   Mount     System  fsck  Mount    Mount
    #to Mount  to fsck  Point     Type    Pass  at Boot  Options
    #--------  -------  --------  ------  ----  -------  --------------------
    /devices   -        /devices  devfs   -     no       -
    ...
    qfsma      -        /qfsma    samfs   -     yes      ...,writebehind=768
    :wq
    root@solaris:~# 
    
  5. Pruebe el rendimiento de E/S del sistema de archivos y ajuste la configuración de writebehind según sea necesario.

  6. Vuelva a abrir el archivo /etc/vfstab en un editor de texto. En el campo Mount Options del sistema de archivos, agregue la opción de montaje readahead=n, donde n es múltiplo de 8 kilobytes. Use una coma (sin espacios) para separar las opciones de montaje. Guarde el archivo y cierre el editor.

    La opción readahead determina la cantidad de datos que se leen en la caché durante una única lectura física. Si parece que una aplicación está realizando una lectura secuencia, el sistema de archivos almacena en caché los próximos bloques de los datos de archivo de cada lectura física. A continuación, se pueden gestionar una serie de solicitudes de lectura de aplicaciones desde la memoria caché, y se pueden consolidar de este modo varias solicitudes de lectura de aplicaciones en un una única solicitud de E/S física.

    El valor predeterminado es 1024 kilobytes (dieciséis DAU de 64 kilobytes), que generalmente favorece la E/S secuencial de bloques grandes. Si una base de datos o una aplicación similar realiza su propio readahead, configure Oracle HSM readahead en 0 para evitar conflictos. De lo contrario, generalmente se deberá configurar readahead para que almacene en caché los datos máximos que una única E/S física puede transferir. Si la configuración de readahead es menor que la cantidad de datos que las aplicaciones generalmente solicitan y que los dispositivos pueden suministrar, completar una solicitud de E/S de aplicación requiere más E/S físico del necesario. Sin embargo, si readahead se configura con un valor excesivamente alto, es posible que consuma suficiente memoria como para degradar el rendimiento general del sistema. En el ejemplo, configuramos readahead en 736 kilobytes (treinta y seis DAU de 64 kilobytes).

    #File
    #Device    Device   Mount     System  fsck  Mount    Mount
    #to Mount  to fsck  Point     Type    Pass  at Boot  Options
    #--------  -------  --------  ------  ----  -------  --------------------
    /devices   -        /devices  devfs   -     no       -
    /proc      -        /proc     proc    -     no       -
    ...
    qfsma      -        /qfsma    samfs   -     yes      ...,readahead=736
    :wq
    root@solaris:~# 
    
  7. Pruebe el rendimiento de E/S del sistema de archivos y ajuste la configuración de readahead según sea necesario.

    El aumento del tamaño del parámetro readahead aumenta el rendimiento de las transferencias de archivos grandes, pero únicamente hasta cierto punto. Para probar el rendimiento del sistema después de restablecer el tamaño de readahead. A continuación, ajuste el tamaño de readahead hacia arriba hasta que vea que ya no se puedan mejorar las velocidades de transferencia.

Activación de conmutación entre E/S directa y paginada

Puede configurar los sistemas de archivos de Oracle HSM para que conmuten entre E/S directa y paginada; esto se adapta mejor al comportamiento de E/S de su aplicación. Deberá especificar las características de alineación del sector y de tamaño mínimo de las lecturas y escrituras que se pueden beneficiar de la E/S directa y, a continuación, configurar el número de lecturas y escrituras cualificadas que deberán activar el conmutador. Siga estos pasos:

  1. Inicie sesión en el host del sistema de archivos como root.

    root@solaris:~# 
    
  2. Realice una copia de seguridad del archivo /etc/vfstab del sistema operativo.

    root@solaris:~# cp /etc/vfstab /etc/vfstab.backup
    root@solaris:~# 
    
  3. Abra el archivo /etc/vfstab en un editor de texto y ubique la fila del sistema de archivos que desea configurar.

    En el ejemplo, el sistema de archivos se denomina qfsma:

    root@solaris:~# vi /etc/vfstab
    #File     Device                      Mount
    #Device   to     Mount    System fsck at    Mount
    #to Mount fsck   Point    Type   Pass Boot  Options
    #-------- ------ -------- ------ ---- ----- -----------------------------
    /devices  -      /devices devfs  -    no    -
    /proc     -      /proc    proc   -    no    -
    ...
    qfsma     -      /qfsma   samfs  -    yes   stripe=1
    
  4. Para configurar un tamaño de umbral para iniciar la E/S directa para las solicitudes de lectura que se alinean bien con límites de sector de 512 bytes, agregue la opción de montaje dio_rd_form_min=n al campo Mount Options para el sistema de archivos, donde n es un número de kilobytes. Use una coma (sin espacios) para separar las opciones de montaje.

    De forma predeterminada, el valor es dio_rd_form_min=256 kilobytes. En el ejemplo, sabemos que la aplicación no produce lecturas bien alineadas de forma consistente hasta que solicita una lectura de al menos 512 kilobytes. Por lo tanto, cambiamos el tamaño del umbral para lecturas directas bien alineadas a 512:

    #File     Device                      Mount
    #Device   to     Mount    System fsck at    Mount
    #to Mount fsck   Point    Type   Pass Boot  Options
    #-------- ------ -------- ------ ---- ----- -----------------------------
    /devices  -      /devices devfs  -    no    -
    /proc     -      /proc    proc   -    no    -
    ...
    qfsma     -      /qfsma   samfs  -    yes   stripe=1,dio_rd_form_min=512
    
  5. Para configurar un tamaño de umbral para iniciar la E/S directa para las solicitudes de escritura que se alinean bien con límites de sector de 512 bytes, agregue la opción de montaje dio_wr_form_min=n al campo Mount Options para el sistema de archivos, donde n es un número de kilobytes. Use una coma (sin espacios) para separar las opciones de montaje.

    De forma predeterminada, el valor es dio_wr_form_min=256 kilobytes. En el ejemplo, sabemos que la aplicación no produce escrituras bien alineadas de forma consistente hasta que solicita una escritura de al menos un megabyte. De modo que cambiamos el tamaño del umbral para escrituras directas bien alineadas a 1024 kilobytes:

    #File     Device                      Moun
    #Device   to     Mount    System fsck at    Mount
    #to Mount fsck   Point    Type   Pass Boot  Options
    #-------- ------ -------- ------ ---- ----- -----------------------------
    /devices  -      /devices devfs  -    no    -
    /proc     -      /proc    proc   -    no    -
    ...
    qfsma     -      /qfsma   samfs  -    yes   ...,dio_wr_form_min=1024
    
  6. Para configurar un tamaño de umbral para iniciar la E/S directa para las solicitudes de lectura que no se alinean bien con límites de sector de 512 bytes, agregue la opción de montaje dio_rd_ill_min=n al campo Mount Options para el sistema de archivos, donde n es un número de kilobytes. Use una coma (sin espacios) para separar las opciones de montaje.

    De forma predeterminada, el valor es dio_rd_ill_min=0 kilobytes, de modo que la E/S directa no se usa para lecturas desalineadas. En el ejemplo, conocemos que nuestra aplicación generalmente realiza solicitudes de lectura desalineadas para pequeños fragmentos de datos. Muchos de estos datos se vuelven a leer posteriormente. De modo que el almacenamiento en caché de páginas sea probablemente beneficioso para estas lecturas. La conmutación a E/S directa podría causar una E/S física adicional innecesaria un rendimiento reducido. De modo que aceptamos los valores predeterminados y no realizamos cambios en el archivo vfstab:

    #File     Device                      Mount
    #Device   to     Mount    System fsck at    Mount
    #to Mount fsck   Point    Type   Pass Boot  Options
    #-------- ------ -------- ------ ---- ----- -----------------------------
    /devices  -      /devices devfs  -    no    -
    /proc     -      /proc    proc   -    no    -
    ...
    qfsma     -      /qfsma   samfs  -    yes   ...,dio_wr_form_min=1024
    
  7. Para configurar un tamaño de umbral para iniciar la E/S directa para las solicitudes de escritura que no se alinean bien con límites de sector de 512 bytes, agregue la opción de montaje dio_wr_ill_min=n al campo Mount Options para el sistema de archivos, donde n es un número de kilobytes. Use una coma (sin espacios) para separar las opciones de montaje.

    De forma predeterminada, el valor es dio_wr_ill_min=0 kilobytes, de modo que la E/S directa no se usa para escrituras desalineadas. Las escrituras desalineadas pueden ser muy costosas en términos de rendimiento, porque el sistema debe leer, modificar y escribir sectores. Sin embargo, en el ejemplo, conocemos que la aplicación ocasionalmente realiza solicitudes de escrituras grandes y únicas que no están dentro de los límites del sector . Dado que las operaciones de lectura, escritura y modificación están limitadas al inicio y al final de un gran bloque de sectores secuenciales, los beneficios de la E/S directa compensan los de la E/S paginada. De modo que configuramos dio_wr_ill_min=2048 kilobytes:

    En este ejemplo, cambiamos el valor del umbral predeterminado mediante el uso de E/S directa durante las escrituras con datos desalineados en 2048 kilobytes:

    #File     Device                      Mount
    #Device   to     Mount    System fsck at    Mount
    #to Mount fsck   Point    Type   Pass Boot  Options
    #-------- ------ -------- ------ ---- ----- -----------------------------
    /devices  -      /devices devfs  -    no    -
    /proc     -      /proc    proc   -    no    -
    ...
    qfsma     -      /qfsma   samfs  -    yes   ...,dio_wr_ill_min=2048
    
  8. Para activar la E/S directa para lecturas, agregue la opción de montaje dio_rd_consec=n al campo Mount Options, donde n es el número de transferencias de E/S consecutivas que deben satisfacer los requisitos de tamaño y alineación especificados arriba, con el fin de activar el conmutador para E/S directa. Seleccione un valor para las operaciones de la aplicación que se benefician de la E/S directa. Use una coma (sin espacios) para separar las opciones de montaje.

    De forma predeterminada, el valor es dio_rd_consec=0, de modo que la conmutación de E/S está desactivada. En el ejemplo, conocemos que, una vez que la aplicación solicita tres lecturas sucesivas bien alineadas de, al menos, el tamaño mínimo especificado por dio_rd_form_min, 512 kilobytes, continuará haciéndolo por mucho tiempo para que la E/S directa valga la pena. El tamaño mínimo especificado por dio_rd_form_min es el valor predeterminado, 0, de modo que la activación de la E/S directa no afectará las solicitudes de lectura desalineadas. Configuramos entonces dio_rd_consec=3:

    #File     Device                      Mount 
    #Device   to     Mount    System fsck at    Mount
    #to Mount fsck   Point    Type   Pass Boot  Options
    #-------- ------ -------- ------ ---- ----- -----------------------------
    /devices  -      /devices devfs  -    no    -
    /proc     -      /proc    proc   -    no    -
    ...
    qfsma     -      /qfsma   samfs  -    yes   ...,dio_rd_consec=3
    
  9. Para activar la E/S directa para escrituras, agregue la opción de montaje dio_wr_consec=n al campo Mount Options, donde n es el número de transferencias de E/S consecutivas que deben satisfacer los requisitos de tamaño y alineación especificados arriba, con el fin de activar el conmutador para E/S directa. Seleccione un valor para las operaciones de la aplicación que se benefician de la E/S directa. Use una coma (sin espacios) para separar las opciones de montaje.

    De forma predeterminada, el valor es dio_wr_consec=0, de modo que la conmutación de E/S está desactivada. En el ejemplo, conocemos que, una vez que la aplicación solicita dos escrituras sucesivas bien alineadas de, al menos, el tamaño mínimo especificado por dio_wr_form_min, 1024 kilobytes, continuará haciéndolo durante un largo tiempo para que la E/S directa valga la pena. También conocemos que dos escrituras sucesivas desalineadas mayores que dio_wr_form_min, 2048 kilobytes, serán lo suficientemente grandes y la desalineación no tendrá mayor importancia. Configuramos entonces dio_wr_consec=2:

    #File     Device                      Mount 
    #Device   to     Mount    System fsck at    Mount
    #to Mount fsck   Point    Type   Pass Boot  Options
    #-------- ------ -------- ------ ---- ----- -----------------------------
    /devices  -      /devices devfs  -    no    -
    /proc     -      /proc    proc   -    no    -
    ...
    qfsma     -      /qfsma   samfs  -    yes   ...,dio_wr_consec=2
    
  10. Guarde el archivo vfstab y cierre el editor.

    #File     Device                      Mount 
    #Device   to     Mount    System fsck at    Mount
    #to Mount fsck   Point    Type   Pass Boot  Options
    #-------- ------ -------- -----  ---- ----- -----------------------------
    /devices  -      /devices devfs  -    no    -
    /proc     -      /proc    proc   -    no    -
    ...
    qfsma     -      /qfsma   samfs  -    yes   ...,dio_wr_consec=2
    :wq
    root@solaris:~# 
    
  11. Monte el sistema de archivos modificado:

    root@solaris:~# mount /qfsms
    root@solaris:~# 
    

Configuración del sistema de archivos para usar la E/S directa de forma exclusiva

Cuando las características de E/S de las aplicaciones realizan un uso exclusivo deseable de la E/S directa, puede montar el sistema de archivos completo mediante el uso de la opción de montaje forcedirectio (para obtener información sobre cómo especificar la E/S directa para archivos o directorios individuales, consulte la página del comando man setfa de Oracle HSM).

Para montar un sistema de archivos para que use exclusivamente la E/S directa, realice lo siguiente:

  1. Inicie sesión en el host del sistema de archivos como root.

    root@solaris:~# 
    
  2. Realice una copia de seguridad del archivo /etc/vfstab del sistema operativo.

    root@solaris:~# cp /etc/vfstab /etc/vfstab.backup
    root@solaris:~# 
    
  3. Abra el archivo /etc/vfstab en un editor de texto y ubique la fila para el sistema de archivos donde desea usar la E/S directa.

    En el ejemplo, el sistema de archivos se denomina qfsma:

    root@solaris:~# vi /etc/vfstab
    #File
    #Device    Device   Mount     System  fsck  Mount    Mount
    #to Mount  to fsck  Point     Type    Pass  at Boot  Options
    #--------  -------  --------  ------  ----  -------  --------------------
    /devices   -        /devices  devfs   -     no       -
    /proc      -        /proc     proc    -     no       -
    ...
    qfsma      -        /qfsma    samfs   -     yes      stripe=1
    
  4. En el campo Mount Options del sistema de archivos, agregue la opción de montaje forcedirectio. Use una coma (sin espacios) para separar las opciones de montaje. Guarde el archivo y cierre el editor.

    #File
    #Device    Device   Mount     System  fsck  Mount    Mount
    #to Mount  to fsck  Point     Type    Pass  at Boot  Options
    #--------  -------  --------  ------  ----  -------  --------------------
    /devices   -        /devices  devfs   -     no       -
    /proc      -        /proc     proc    -     no       -
    ...
    qfsma      -        /qfsma    samfs   -     yes      stripe=1,forcedirectio
    :wq
    root@solaris:~# 
    
  5. Monte el sistema de archivos modificado:

    root@solaris:~# mount /qfsms 
    root@solaris:~# 
    

Aumento del tamaño de la caché de consulta de nombres de directorio (DNLC)

El tamaño predeterminado de la caché de consulta de nombres de directorio (DNLC) de Oracle Solaris en el servidor de metadatos puede resultar inadecuado si los clientes de un sistema de archivos compartido abren muchos archivos al mismo tiempo. El servidor de metadatos busca nombre de archivos en nombre de los clientes, de modo que el rendimiento del sistema puede verse afectado en estas condiciones.

Si anticipa este tipo de carga de trabajo, cambie el valor del parámetro de tamaño de caché de consulta de nombres de directorio, ncsize al doble o el triple del tamaño predeterminado. Para obtener instrucciones, consulte el Manual de referencia de parámetros ajustables de Oracle Solaris, disponible en la Biblioteca de información de Oracle Solaris (consulte la sección Documentación disponible del prefacio).