[ Español | English ]

Comparativa de sistemas operativos Unix

FreeBSD 6.1, GNU/Linux 2.6.16, NetBSD 3.0 y OpenBSD 3.9

Abstracto

Antes de comenzar con el documento y las pruebas que en él se presentan, quisiera dejar claro que todas las pruebas han sido realizadas en igualdad de condiciones y llevadas a cabo varias veces con el fin de asegurar que factores aleatorios no pudieran modificar el resultado de dichas pruebas.

Por otro lado, estas pruebas se han realizado por el mero placer de la diversión que conlleva para mí el comparar sistemas operativos BSD con sistemas GNU/Linux. Si alguien no puede contener su sentimiento (tanto herido como halagado) provocado por estas pruebas, entonces que se ponga en contacto conmigo.

Introducción

Este benchmark es algo que me apetecía hacer desde hace ya mucho tiempo. Yo siempre he estado dudando entre utilizar sistemas operativos BSD o GNU/Linux, y la verdad, nunca me he decidido del todo. Actualmente, utilizo Debian Sid, pero reconozco que siempre he estado enamorado de NetBSD.

Entre las sorpresas más alucinantes con las que me he encontrado a lo largo de este tiempo, destacan las siguientes:

Los tests llevados acabo

He separado la comparativa en cuatro partes:

En los tests subjetivos, medí manualmente los tiempos de carga de programas grandes como Gnome (2.14.1), KDE (3.5.2) y Firefox (1.5.0.3). También medí tiempo que tarda Vim en abrir archivos grandes, el uso de CPU de 1, 2 y 4 instancias del XMMS, y cuánta CPU consume el reproducir un vídeo AVI con el programa Totem, usando la libxine.

Entre los tests técnicos, se encuentra unixbench (4.1.0), y algunos benchmarks diseñados por gente de NetBSD (véase Bibliografía).

Configuración de los sistemas

El Linux, en concreto, era un GNU/Linux Gentoo 2006.0 con un kernel Linux 2.6.16 y entre las opciones que utilicé destacan: PREEMPT, ACPI, AGP y CFQ IO.

FreeBSD era un FreeBSD 6.1 RELEASE, con las opciones SCHED_44BSD, PREEMPT, ACPI, APIC, VFS_AIO, AGP y COMPAT_LINUX.

NOTA: Sé que SCHED_ULE es más nuevo y óptimo para multi-threading, pero también he leído que ofrece un rendimiento notablemente inferior si la máquina en la que corre no dispone de multiprocesador, así que opté por el clásico scheduler del 4.4BSD.

NetBSD 3.0 es otro de los candidatos. En el kernel activé: USER_LDT, QBUF_READPRIO, ACPI y AGP. Desafortunadamente, no hay soporte Bluetooth ni DRI por el momento. Pero si que hay ya gran parte del Bluetooth diseñada (quizás para la 4.0).

Por último, OpenBSD 3.9, en el cual introduje algunos cambios como DUMMY_NOPS (un hack que acelera), APERTURE (para poder usar Xorg) y la opción VM86.

El hardware

Test 1: Pruebas subjetivas

NOTA: He querido comparar también con Debian por motivos personales, dado que yo uso Debian como sistema usual en mi portátil. Todo el software de Debian está compilado con GCC 4 para i386 y, por lo tanto, no optimizado.

NOTA: Los valores indicados como '-' quieren decir que el test, en ese caso, no pudo ser realizado porque el sistema no soportaba dicha opción.

Prueba FreeBSD Gentoo Debian NetBSD OpenBSD
Arrancar Firefox 11.6s 8.0s 8.5s 12.0s 14.4s
Arrancar Gnome 19.6s 13.9s 19.9s 26.7s 29.8s
Arrancar KDE 30.2s 18.0s 22.0s 17.6s 25.7s
Abrir con VIM (470Mb) 33.5s 27.6s 23.4s 36.7s 27.3s
CPU xine (video AVI) 14.5% 15.0% 18.7% 10.6% 26.0%
CPU XMMS (1/2/4 procs) 0.0/0.0/- (1) 0.0/0.3/0.7 0.0/0.3/0.6 0.0/-/- (2) (3)

GANADOR DEL TEST: Ambos Gentoo y Debian (GNU/Linux)
PERDEDOR DEL TEST: OpenBSD con clara diferencia

(1) En FreeBSD, aunque aumenté el número de canales de audio de 4 a 8, nunca conseguí reproducir más de tres archivos al mismo tiempo.

(2) NetBSD no soporta, aún, múltiples canales de audio al mismo tiempo, pero hay mucho trabajo hecho para posteriores implementaciones. Léase NetBSD: Changes on the audio framework

(3) Parece mentira que en el año 2006, en OpenBSD haya que investigar para reproducir un MP3 con XMMS. Yo no he tenido el tiempo ni las ganas como para ponerme a estudiar este asunto, así que dejo el test en blanco.

Test 2: Pruebas del VFS

NOTA: Las pruebas que atañen al sistema de ficheros, dependen, en cada caso, del sistema de ficheros por defecto en cada sistema. Estos son los sistemas de ficheros usados en cada sistema y sus opciones:

Prueba FreeBSD 6.1 Linux 2.6.16 NetBSD 3.0 OpenBSD 3.9
tar jxvf 45s 1m29s 33.9s 44.8s
tar jcvf 2m55s 2m57s 2m30s 2m32s
rm -fr dir/ 7.7s 9.7s 5.5s 8.3s
Prueba bonnie++ (FS) 4m08s 5m01s 4m57s 8m10s
memory read 544.7MB/s 544.7MB/s 914.3MB/s 533.3MB/s
memory write 393.8MB/s 387.9MB/s 581.8MB/s 400.0MB/s

GANADOR DEL TEST: NetBSD 3.0 sobre UFS2, con mucha diferencia.
PERDEDOR DEL TEST: Linux sobre EXT3.

Test 3: Pruebas de eficiencia

NOTA: Los valores sin unidad son puntos de referencia según unixbench, cuanto más alto es el valor, mejor eficiencia ofrece el sistema en cuestión.

Prueba FreeBSD 6.1 Linux 2.6.16 NetBSD 3.0 OpenBSD 3.9
Convertir JPEG->PNG 2m32s 2m20s 2m31s 2m46s
Convertir AVI->MPEG 7m59s 7m51s 9m57s 8m16s
syscall overhead 477.6 729.8 596.7 517.5
pipe throughoutput 725.5 607.6 706.1 735.5
pipe-based context switch 500.1 56.3 553.6 739.0
process creation 712.1 847.7 721.3 250.5
execl throughoutput 331.3 772.4 562.9 263.3

GANADOR DEL TEST: Linux 2.6 de mucho, aunque nótese la sorpresa de que OpenBSD 3.9 sobrepasa en eficiencia a NetBSD y FreeBSD, cosa que no ocurría hace un año.
PERDEDOR DEL TEST: Ambos FreeBSD y NetBSD de forma muy pareja.

Test 4: Pruebas de latencia

NOTA: El valor latency es un valor medio de varios test realizados. Cuanto menor es el valor, más rápida es la respuesta del sistema.

NOTA: Los datos están expresados con las siguientes abreviaturas: us (microsegundos) y ns (nanosegundos).

Prueba FreeBSD 6.1 Linux 2.6.16 NetBSD 3.0 OpenBSD 3.9
context latency 1559ns 1024ns 1289ns 733ns
exec latency 360us 342us 71us 205us
fork latency 79us 82us 35us 92us
signal latency 1385ns 752ns 774ns 580ns
syscall time 234ns (*) 21ns 184ns (*) 190ns (*)

GANADOR DEL TEST: NetBSD es el ganador, pero no por mucha diferencia, porque le siguen OpenBSD y luego Linux muy de cerca.
PERDEDOR DEL TEST: FreeBSD es el claro perdedor en estas pruebas.

(*) Esta gran diferencia se debe a que los BSD no implementan las llamadas sysenter/sysexist en la arquitectura i386.

Análisis definitivo

Aquí me gustaría separar el análisis y, de paso, ampliarlo con cosas que aquí no se pueden ver. Empezando desde la instalación, he de decir que el sistema más fácil de instalar fue FreeBSD, seguido por NetBSD, Debian y OpenBSD. Gentoo es demasiado difícil de instalar teniendo en cuenta que muchas distribuciones GNU/Linux ofrecen un método de instalación totalmente automatizado.

En segundo lugar, el sistema que menos tardé en aprender a manejar fue también FreeBSD. Tanto para Gentoo, como Debian, como NetBSD y OpenBSD, tuve que leer una hora (comparada con la media hora que tardé en aprender lo básico de FreeBSD). pkgsrc, en mi opinión, fue de lo mejor que prové, y reconozco que apt en Debian es también de lo mejorcito (aparte de que es más rápido que el pkgsrc de NetBSD).

Como se puede observar en las pruebas del VFS, NetBSD ha mejorado muchísimo y, de hecho, es el que mejores resultados ofrece a casi todos los niveles, sobrepasando a GNU/Linux en la mayoría de los casos. También es cierto que el pagedaemon de NetBSD se queda corto cuando hay grandes overloads y el de FreeBSD se defiende mejor en este aspecto, como se puede apreciar en el test de bonnie++. Como apunte definitivo, UFS2 sobre NetBSD demostró ser el sistema de ficheros más eficiente en casi todas las pruebas, excepto cuando el I/O está muy cargado, que el VFS se ralentiza bastante. FreeBSD también demostró su calidad en el uso de UFS2. En contra de UFS2, EXT3 es el único que soporta journaling y, por tanto, es el más rápido en recuperarse.

Por último, de acuerdo con los resultados, cabría deducir que GNU/Linux ha ganado 'en general', pero NetBSD ofrece un rendimiento casi similar e incluso a veces mejor. OpenBSD ha demostrado ser un gran sistema, al menos en cuanto a eficacia y respuesta se refiere, acercándose mucho a NetBSD y sobrepasando de lejos mis expectativas. Una vez más, FreeBSD sigue estando por debajo en la mayoría de los tests, dejando claro que las mejoras introducidas en la parte de escritorio han sacrificado el rendimiento y la eficacia del sistema.

Me gustaría que los lectores que hayan llegado hasta aquí, echaran un vistazo a unos benchmarks realizados hace ya tres años y sacaran sus propias conclusiones con respecto a la evolución en cada sistema. En dichos benchmarks, el resultado en general era el siguiente: Linux 2.6, Linux 2.4, FreeBSD 5.1, NetBSD 1.6.1, OpenBSD 3.4. A día de hoy, y según mis pruebas, el resultado es el siguiente: Linux 2.6, NetBSD 3.0, OpenBSD 3.9, FreeBSD 6.1.

Bibliografía

Scalability Benchmarks
Benchmark Comparision of NetBSD 2.0 and FreeBSD 5.3
Tuning NetBSD VM behaviour (swap usage)
FreeBSD Handbook (edición 6.1-RELEASE)
Gentoo Handbook (edición 2006.0)
NetBSD: Changes on the audio framework
Gnome 2.14.1, KDE 3.5.2, Firefox 1.5.0.3, XMMS 1.2.10 y Vim 6.4
QEMU 0.8.1 (sin aceleración), usado para tomar capturas
ImageMagick 6.2.4.5, usado para los tests JPEG/PNG
ffmpeg 0.4.9-CVS, usado para el test de conversión de vídeo
bonnie++ 1.93, usado en el test del sistema de ficheros
totem 1.4, usado para el test de reproducción de vídeo
unixbench 4.1.0, usado para los tests de eficiencia
NetBSD's gmcgarry's benchmarks