RAW Devices in Fedora Core 3

Contenido/contents:
Intro
Donde estan?/Where are they?
No me importa, yo los quiero!/I don't care I want them!
Pagina principal/Home page

Intro
EN los viejos tiempos del kernel 2.4 se podian usar los archivos /dev/raw/raw* asociados a un dispoitivo de bloque (/dev/hd?? o /dev/sd??) para mejorar el tiempo de respuesta de los gestores de bases de datos. In the old days of kernel 2.4 you can use the /dev/raw/raw* devices associ
Incluso se recomendaba por varios fabricantes de bases de datos asignar esos dispositivos crudos como espacio para la base de datos (Informix, Oracle, DB2, etc.).
Con el comando /usr/bin/raw se podia monitorear la asignacion de los dispositivos e incluso RedHat/Fedora generan un servicio que inicia automaticamente la asignacion cada vez que se iniciaba el servidor (service rawdevices start).
A partir de Fedora Core 3 ya esta obsoleta (deprecated) la opcion de RAW devices, en el paquete util-linux ya esta desactivada la opcion de generar el comando /usr/bin/raw. Tambien en el kernel estan deshabilitadas la opciones de soportar los archivis /dev/raw/.
No es suficiente con generar los archivos /dev/raw, es necesario que el kernel sepa que hacer con ellos.
cd /dev
./MAKEDEV raw
Donde estan?/Where are they?
La razon por la cual se desactivo el uso de los archivos /dev/raw en el kernel y del comando raw en util-linux es ... PORQUE YA NO HACEN FALTA!
En el manual de la funcion open mecionan la bandera O_DIRECT, y mencionan que es semanticamente similiar a lo que hacia el comando raw.
Entonces que hay que hacer? Sencillo, modificar el codigo fuente de tus programas para agregarle esa bandera y el tiempo de respuesta disco va a ser similiar a los que se tenia antes pero sin necesidad de tener que asignar los archivos especiales.
Que no puedes modificar el codigo C fuente? pidele al responsable que lo modifique! ya sea grupo de usuarios o proveedor de paquetes.
Minimo en el caso de IBM Informix IDS version 10.0, el programa ya esta listo para hacer uso de la bandera O_DIRECT el unico requisito es que tambien este instalado el paquete libaio.
A continuacion transcribo un correo que mando uno de los desarrolladores de IBM Informix en Munich Alemania:
Asunto: Re: raw devices in linux (O_DIRECT)
Fecha: Fri, 4 Mar 2005 10:43:31 +0100
De: Sandor Szabo
A: Fernando Ortiz
CC: Informix-Discussion E-List (E-mail)

Hola Fernando,

Tengo informacion con respecto a la bandera O_DIRECT.

IDS V10 detecta automaticamente que se esta ejecutando en Linux Kernel 2.6 y si esta habilitado KAIO entonces IDS activa la bdander O_DIRECT!

Para habilitar KAIO:

Se requiere la libreria libaio.so, no importa la distribucion o nivel de kernel. En este momento, IBM Informix Dynamic Seervr V10.0 requiere minimo la version de libaio 0.3.96-3.

Por favor tambien lee las notas de version para mas informacion!
adios
Sandor

IBM Informix Development Munich
Information Management
Hollerithstraße 1
81829 Munich Germany
Asunto: Re: raw devices in linux (O_DIRECT)
Fecha: Fri, 4 Mar 2005 10:43:31 +0100
De: Sandor Szabo
A: Fernando Ortiz
CC: Informix-Discussion E-List (E-mail)

Hi Fernando,

I have some information regarding the O_DIRECT flag.

IDS V10 detects automatically that it runs on Linux Kernel 2.6 and if KAIO is enabled then it turns on the O_DIRECT flag!

To enable KAIO:

The libaio.so library is required, regardless of the distribution or kernel level. At the time of writing, IBM Informix Dynamic Server V10.0 requires a minimum of libaio 0.3.96-3.

Please also read the release notes for more information!
bye
Sandor

IBM Informix Development Munich
Information Management
Hollerithstraße 1
81829 Munich Germany
Habilitando RAW/Enabling RAW
De acuerdo, ya sabes que no es obligatorio habilitar raw, ya sabes como modificar tus programas C para que hagan uso de la bandera O_DIRECT, ya sabes que las principales bases de datos ya hacen uso de la nueva bandera, pero de todos maneras quieres habilitar la opcion vieja en el kernel?
A continuacion explico como generar un paquete RPM del kernel y de util-linux que incluyen las opciones y comandos de RAW.
Por supuesto que tambien se puede generar el kernel con los comandos 'usuales': make menuconfig, make dep; make bzimage =, etc. pero de esta manera es mas sencillo para los no expertos y ademas me genera el paquete para ser usado en las demas maquinas que lo necesiten.
Por ejemplo aqui les dejo los paquetes ya listos:
kernel-2.6.10-1.770_FC3RAW.root.i686.rpm
kernel-smp-2.6.10-1.770_FC3RAW.root.i686.rpm
util-linux-2.12a-16.i386.rpm
Kernel
Obten el paquete de fuentes del kernel, verifica la ultima version o la que quieras. Get the src package, check the last version available or the want you need.
wget http://download.fedora.redhat.com/pub/fedora/linux/core/updates/3/SRPMS/kernel-2.6.10-1.770_FC3.src.rpm
Instala los fuentes Install the sources
rpm -ivh kernel-2.6.10-1.770_FC3.src.rpm
Modificar los archivos de configuracion para habilitar las opciones de RAW Modify the config file and enable the RAW options
[root@tina ~]# cd /usr/src/redhat/SOURCES/
[root@tina SOURCES]# ll *.config
-rw-rw-r--  1 root root 53868 Feb 24 12:55 kernel-2.6.10-i586-smp.config
-rw-rw-r--  1 root root 53944 Feb 24 12:55 kernel-2.6.10-i586.config
-rw-rw-r--  1 root root 54088 Mar  3 10:23 kernel-2.6.10-i686-smp.config
-rw-rw-r--  1 root root 53920 Mar  3 14:07 kernel-2.6.10-i686.config
-rw-rw-r--  1 root root 51135 Feb 24 12:55 kernel-2.6.10-ia64.config
-rw-rw-r--  1 root root 52718 Feb 24 12:55 kernel-2.6.10-ppc.config
-rw-rw-r--  1 root root 51873 Feb 24 12:55 kernel-2.6.10-ppc64.config
-rw-rw-r--  1 root root 52188 Feb 24 12:55 kernel-2.6.10-ppc64iseries.config
-rw-rw-r--  1 root root 51460 Feb 24 12:55 kernel-2.6.10-s390.config
-rw-rw-r--  1 root root 51427 Feb 24 12:55 kernel-2.6.10-s390x.config
-rw-rw-r--  1 root root 51429 Feb 24 12:55 kernel-2.6.10-x86_64-smp.config
-rw-rw-r--  1 root root 51464 Feb 24 12:55 kernel-2.6.10-x86_64.config
En mi caso yo modifque los archivos de configuracion para i696, hay que buscar las lineas comentadas que contengan RAW y activarlas In my case I modify the i686 configs, search all the comented lines with the text RAW and activate the option
change
# CONFIG_RAW_DRIVER is not set
to
CONFIG_RAW_DRIVER=y
Opcionalmente, se puede etiqueta el kernel con nombre. Edita la linea 31 del archivo SPEC para agregarle un texto que identifique este kernel (RAW en este caso). Optionally, you can a mark name to the kernel. Edit line 31 of the SPEC file to add a 'tag' to identificate this custom kernel (RAW in mi case)
[root@tina SPECS]# cd /usr/src/redhat/SPECS
[root@tina SPECS]# vi kernel-2.6.spec
....
%if %{FC3}
%define release %(R="$Revision: 1.770 $"; RR="${R##: }"; echo ${RR%%?})_FC3RAW%{rhbsys}
%endif
...
Creamos (o construimos) el nuevo paquete RPM del kernel. Create (build) the new RPM.
[root@tina SPECS]# cd /usr/src/redhat/SPECS
[root@tina SPECS]# rpmbuild -bb --target=i686 kernel-2.6.spec
...
. Wait a few hours
....
Al terminar tendras disponibles unos paquetes del kernel parchada. After that you have the patched lernel package available
[root@tina SPECS]# cd /usr/src/redhat/RPMS/i686
[root@tina i686]# ls
kernel-2.6.10-1.770_FC3RAW.root.i686.rpm
kernel-debuginfo-2.6.10-1.770_FC3RAW.root.i686.rpm
kernel-smp-2.6.10-1.770_FC3RAW.root.i686.rpm
Instale y usa el nuevo kernel como siempre. Install and use it as always.
rpm -ivh kernel-smp-2.6.10-1.770_FC3RAW.root.i686.rpm
util-linux
Obtenemos el paquete de fuentes del repositorio, verifica que no exista una version mas nueva.
wget http://download.fedora.redhat.com/pub/fedora/linux/core/3/SRPMS/util-linux-2.12a-16.src.rpm
Instala los fuentes en base al RPM.
rpm -ivh util-linux-2.12a-16.src.rpm
Verificamos el archivo de especificacones del paquete.
[root@tina ~]# cd /usr/src/redhat/SPECS/
[root@tina SPECS]# ll util*
-rw-rw-r-- 1 root root 47363 Mar 3 09:41 util-linux.spec
Se modifica para habilitar la opcion de agregar el soporte al comando 'raw'.
vi util-linux.spec

# 'raw' support is deprecated, only ship it if we need compatibility stuff.
%define include_raw 1
Se genera de nuevo el paquete en base a la especificacion corregida.
rpmbuild -bb util-linux-spec
Verificamos los paquetes generados.
[root@tina SPECS]# cd /usr/src/redhat/RPMS/i386/
[root@tina i386]# ll
total 2264
-rw-rw-rw- 1 root root 1527064 Mar 3 09:47 util-linux-2.12a-16.i386.rpm
Tenemos que instalar esta version parchada encima de la anterior, por eso hay que 'forzar' la instalacion.
rpm -ivh --replacepkgs util-linux-2.12a-16.i386.rpm