Como seguramente sabes, todas las computadoras modernas son multi-núcleo (multicore).

¿Por qué eso?

Porque la velocidad máxima de un núcleo (core) es de 4 gigahertz. Por lo tanto, si se desea obtener mayor velocidad la única alternativa es empaquetar dos o más núcleos (core) en el mismo procesador.

Cuando una computadora tiene un solo núcleo las tareas no se realizan en simultáneo, aunque al usuario así le parezca. Lo que hace el Sistema Operativo es asignarle unos cuantos milisegundos al proceso uno, luego unos cuantos milisegundos al proceso dos, luego unos cuantos milisegundos al proceso tres, etc. De esa manera todos los procesos utilizan al procesador secuencialmente y como lo hacen tan rápidamente al usuario le parece que lo hacen en simultáneo pero no es así.

En cambio si el procesador es multi-núcleo entonces sí se pueden estar realizando varios procesos al mismo tiempo. Mientras el núcleo 1 está ejecutando un proceso el núcleo 2 puede estar realizando otro proceso, el núcleo 3 otro proceso, y así sucesivamente.

En este momento no tiene sentido comprar una computadora de un solo núcleo porque la diferencia de precio con la computadora de múltiples núcleos es muy pequeña y además las de un solo núcleo ya no se fabrican.

Entonces, la pregunta es:

¿Puede Firebird tomar ventaja de los múltiples núcleos de una computadora?

Y la respuesta es sí.

Sin embargo, hay varios posibles escenarios y debemos tomarlos en cuenta.

Firebird viene en tres arquitecturas:

  • Classic
  • SuperClassic
  • SuperServer

Y el uso de los núcleos depende de la arquitectura que estemos usando.

 Si se usa Classic o SuperClassic entonces se pueden tener múltiples conexiones a una misma Base de Datos y se usarán diferentes núcleos.

Si se usa SuperServer un núcleo puede ser usado por una sola Base de Datos.

¿Qué significa lo anterior?

  • Que si usamos SuperServer y tenemos una sola Base de Datos entonces solamente se usará un núcleo de la computadora. No importa cuantos núcleos tenga la computadora, solamente se usará uno de ellos, el primero.
  • Que si usamos SuperServer y tenemos varias bases de datos entonces cada Base de Datos podrá usar un núcleo. Es decir, que si tenemos dos bases de datos la primera Base de Datos usará exclusivamente al núcleo 1 y la segunda Base de Datos usará exclusivamente al núcleo 2. Pero eso no lo realiza el Firebird automáticamente, hay que configurarlo, en la entrada CpuAffinityMask del archivo FIREBIRD.CONF hay que decirle cuales núcleos queremos usar. Si no lo hacemos entonces todas las bases de datos usarán solamente al núcleo 1, sin importar cuantos núcleos tenga la computadora, todas las bases de datos usarán solamente al núcleo 1.
  • Que si usamos Classic o SuperClassic entonces una sola Base de Datos puede usar varios núcleos. Y por supuesto que si tenemos varias bases de datos también se usarán varios núcleos. Esto no es necesario configurar ya que Classic y SuperClassic siempre utilizan todos los núcleos que tiene la computadora, sin importar la cantidad de bases de datos a las cuales los usuarios se conectan.

¿Cómo se configura SuperServer para usar varios núcleos?

En Windows, por defecto SuperServer usa solamente al primer núcleo. Si queremos que use más de un núcleo entonces debemos configurarlo. Para ello:

  1. Abrimos el archivo FIREBIRD.CONF que se encuentra en la carpeta donde instalaste al Firebird (por ejemplo, en C:\Archivos de Programa\Firebird\Firebird_2_5\)
  2. Buscamos la entrada CpuAffinityMask
  3. Borramos el símbolo de numeral que se encuentra a la izquierda (el símbolo # indica que lo que viene a continuación es un comentario)
  4. Establecemos el valor de CpuAffinityMask recordando que se trata de un bitmap (o sea, en binario), en donde:

1 = usará el núcleo 1

3 = usará los 2 primeros núcleos

15 = usará los 4 primeros núcleos

255 = usará los 8 primeros núcleos

Si quieres que un núcleo no se utilice entonces no debes indicarlo en el bitmap, por ejemplo para usar el núcleo 2 y el núcleo 3 pero no el núcleo 1 el valor debería ser 6.

Si conoces números binarios entonces es muy fácil saber cual debe ser el valor de CpuAffinityMask para indicarle cuales núcleos se deben usar.

Conclusión:

Firebird puede usar todos los núcleos que tiene una computadora, pero los núcleos que serán usados depende de la arquitectura utilizada. Classic y SuperClassic siempre usan todos los núcleos disponibles en cambio SuperServer por defecto usa solamente el primer núcleo y para que utilice otros núcleos hay que configurarlo mediante la entrada CpuAffinityMask del archivo FIREBIRD.CONF, recordando que con SuperServer una Base de Datos solamente puede usar un núcleo, jamás usará más de un núcleo, en cambio con Classic o con SuperClassic una Base de Datos usará todos los núcleos.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21