Page 48
GNUFDL PID_00174426
48
obtendremos como resultado la línea de flags (si existe el flag vmx, si no, nin-
gún resultado). También podemos obtener varias líneas en CPU multicore y/o
Intel con hyperthreading, dondeobtenemosuna línea de flags por cada elemen-
to de cómputo (CPU con HT o múltiples núcleos con/sin HT).
Una vez determinado el correcto soporte de virtualización, procedemos a ins-
talar los paquetes asociados a KVM; estos ya dependerán de la distribución,
pero en general, el mismo “kvm” ya obtendrá la mayoría de paquetesrequeri-
doscomo dependencias. En general, lospaquetesrecomendadosa instalar (vía
apt o yum) son kvm, qemu-kvm, libvirt. Dependiendo de la distribución
pueden cambiar algunos nombres de paquetes, y en especial con el nombre
virt existen variospaquetesde utilidadesde generación y monitorización de
máquinas virtuales tanto de KVM como de Xen.
Si se permite a los usuarios del sistema el uso de máquinas virtuales, hay que
añadir los nombres de usuario a grupos específicos (vía comandos adduser
o usermod), normalmente a los grupos kvm o libvirt (dependiendo de la
distribución, Fedora o Debian, y versión de KVM).
El siguiente paso (opcional) es facilitar el uso de red a las máquinas virtuales.
Por defecto KVM utiliza NAT, dando direccionesIP privadasde tipo 10.0.2.x, y
accediendo mediante la red de la máquina host. En otro caso, si queremosuna
configuración diferente (por ejemplo que permita acceso externo a lasmáqui-
nasvirtuales) tendremosquepermitir hacer de bridge a la red actual; en esteca-
so es necesario instalar el paquetebridge-utils y configurar un dispositivo
especial dered denominadobr0, en Debian en la configuración dered presen-
teen/etc/network/interface y en Fedora puedecrearseun fichero asocia-
do al dispositivo como /etc/sysconfig/network-scripts/ifcfg-br0.
Por ejemplo, en Debian podría colocarse un ejemplo de configuración como:
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
address 192.168.0.100
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
__rendered_path__1
El núcleo Linux
__rendered_path__45
Enlace de int er és
__rendered_path__46__rendered_path__47
La gestión de red es uno de
__rendered_path__46
los temas complejos en
__rendered_path__45
virtualización, en el caso de
__rendered_path__49
KVM se recomienda
__rendered_path__50__rendered_path__51
examinar:
__rendered_path__50
http://www.linux-
__rendered_path__49
kvm.org/page/Networking.

Page 49
__rendered_path__1
GNUFDL PID_00174426
49
El núcleo Linux
Esta configuración permite que se cree un dispositivo br0 para reemplazar
a eth0. Así las tarjetas de red virtuales redirigirán el tráfico asignadas a este
dispositivo.bridge_ports especifica cuál será el dispositivo físico real que se
utilizará.
Como comentamos, esta parte de configuración de red es opcional, y solo
tiene sentido si queremos acceder desde el exterior a nuestras máquinas vir-
tuales. Por el contrario, en un entorno de virtualización de escritorio puede
ser suficiente con el modo NAT por defecto, ya que las máquinas dispondrán
de salida de red a través de la red del host.
A partir de estasconfiguraciones, ya estaremoscapacitadospara crear lasimá-
genes de las máquinas virtuales. Hay diferentes conjuntos de comandos para
realizarlo, bien usando kvm directamente (comando kvm), utilidades asocia-
dasa qemu para creación de estasimágenes(qemu-img) o utilidadesasociadas
a libvirt (virt-install). El proceso pasa por crear la imagen de disco (o es-
pacio de disco) asociado a la máquina guest como un fichero y despuésrealizar
la instalación del sistema operativo en ese fichero (imagen de disco), bien des-
de el CD/DVD de instalación del sistema operativo o bien también desde una
imagen*.iso del CD/DVD.
Por ejemplo, supongamosuna instalación de un guest determinado (por ejem-
plo disponemos de unos CD/DVD de la distribución Debian).
Creamos el espacio de disco para la máquina virtual (en este caso 8 GB):
# dd if=/dev/zero of=~/debianVM.img bs=1M count=8192
Mediante el comando dd creamos así un fichero de salida de 8192 bloques
de 1 MB, es decir, 8 GB, que nos formará la unidad de disco para nuestra
máquina virtual (también existe un comando alternativo para crear imágenes,
qemu-img, véase página man).
Lo siguiente es obtener el medio de instalación del sistema operativo a insta-
lar, bien proporcionado como CD/DVD y, por tanto, accesible en el dispositi-
vo /dev/cdrom (o equivalente si tenemos más unidades de CD/DVD) o, por
contra, a partir de una imageniso del soporte. En cualquier caso, este último
siempre lo podemos obtener a partir de los discos con:
dd if=/dev/cdrom of=debian-install.iso
que nos genera así la imagen del CD/DVD.
Ahora que disponemos de la imagen binaria y el medio de instalación del
sistema operativo, podemos proceder a instalar, con diferentes utilidades. En

Page 50
Enlace de int er és
La lista de compatibilidad
de KVM puede encontrarse
http://www.linux-
/Guest_Support_Status
GNUFDL PID_00174426
50
general suele utilizarsevirt-install como comando para crear la VM, pero
también existe la posibilidad de usar el mencionado qemu-kvm directamente
como opción mássimple, que suele aparecer (dependiendo de la distribución)
como comando denominado qemu-kvm, qemu-system-x86_64 o simple-
mente comokvm:
kvm -m 512 -cdrom debian-install.iso -boot d -hda debianVM.img
En este caso crearía una máquina virtual básica de 512 MB de memoria prin-
cipal usando nuestro disco de 8 GB creado previamente y arrancando la má-
quina a partir de nuestra imagen iso del medio de instalación del sistema
operativo. Se puede sustituir el fichero iso por /dev/cdrom si usamos los
discos de instalación.
La otra posible alternativa de creación se realiza mediante la utilidad de línea
de comandosvirt-install, mucho máscompleta, pero con la dificultad de
tener que especificar muchosmásparámetros. Por ejemplo, podríamosindicar
la creación de la máquina anterior mediante:
virt-install --connect qemu:///system -n debian5 -r 512 \
--vcpus=2 -f debianVM.img -s 8 -c debianinstall.iso --vnc \
--noautoconsole --os-type linux --os-variant debianLenny
que entre otros parámetros, coloca el método de conexión a la máquina vir-
tual, el nombre de la VMdebian5, define 512 MB de memoria, hace disponi-
bles2 núcleosde la máquina física, utiliza el disco virtualdebianVM, de 8 GB
(-s permite que si no existe, lo cree previamente con ese tamaño de GB), uti-
liza la iso como medio de instalación y permitirá conexiones gráficas con
vnc con la máquina virtual. Además definimos que el sistema que va a ins-
talarse es Linux, en especial una versión de Debian. Los parámetros de ti-
po y variante del sistema operativo son altamente dependientes de la ver-
sión devirt-install, de manera que vale la pena consultar su página man
(man virt-install) y la lista de sistemasoperativoscompatiblescon la ver-
sión KVM del núcleo y el conjunto de utilidadesqemu ylibvirt.
En este punto solo hemos creado la máquina, pero no estamos conectados
a ella, y hemos realizado una configuración muy básica de sus parámetros.
Con otras utilidades, por ejemplo las basadas en libvirt, como la interfaz
gráficavirt-manager, podemospersonalizar másla VM creada, por ejemplo
añadiendo o quitando hardware virtual al sistema.
Podemos conectar después con la máquina recién creada mediante:
virt-viewer -c qemu:///system nombreVM
en:
kvm.org/page
__rendered_path__1__rendered_path__68__rendered_path__69__rendered_path__70__rendered_path__69__rendered_path__68__rendered_path__72__rendered_path__73__rendered_path__74__rendered_path__73__rendered_path__72
El núcleo Linux

Page 51
__rendered_path__1
GNUFDL PID_00174426
51
El núcleo Linux
si está en el mismo sistema, o si estamos en una máquina remota con:
virt-viewer -c qemu+ssh://ip/system nombreVM
o usando directamente la interfazvirt-manager (figura 5).
Figura 5.Virt-manager conectado a la máquina virtual durante el proceso de instalación,
observando losrecursosusadospor la máquina virtual
Image_399_0
Esto nos permite conectar gráficamente con la máquina virtual creada y, por
ejemplo, continuar con la instalación del sistema operativo (se habrá iniciado
con el arranque anterior con virt-install o kvm). Una vez instalado el
sistema, ya podemosusar cualquier sistema, ya sea gráfico (virt-manager) o
de línea de comandos (virtsh) para gestionar las máquinas guest virtuales y
poder arrancar y pararlas.
Por ejemplo, convirtsh:
virtsh --connect qemu:///system
conectamos con el shell de comandos, comandos comolist nos dan las má-
quinas activas, list -all, todas las máquinas disponibles, y otros como
start, shutdown, destroy, suspend o resume nos dan diferentes posibi-
lidades de gestión de cada máquina virtual.

Page 52
__rendered_path__1
GNUFDL PID_00174426
52
El núcleo Linux
Image_407_0
Figura 6.Virt-manager conectado a la máquina virtual recién instalada

Page 53
GNUFDL PID_00174426
53
7. Fut ur o del núcleo y alt er nat ivas
.
Los avances en el núcleo de Linux en determinados momentos fueron muy
rápidos, pero actualmente, ya con una situación bastante estable con los nú-
cleos de la rama 2.6.x, cada vez pasa más tiempo entre las versiones que van
apareciendo. En cierta manera esto esbastante positivo: permite tener tiempo
para corregir errores cometidos, ver aquellas ideas que no funcionaron bien y
probar nuevas ideas, que, si resultan, se incluyen.
Comentaremos en este apartado algunas de las ideas de los últimos núcleos
y algunas que están previstas, para dar indicaciones de lo que será el futuro
próximo en el desarrollo del núcleo.
En la antigua rama 2.4.x del núcleo [Ces06] se realizaron algunas aportacio-
nes en:
Cumplimiento de los estándares IEEE POSIX, lo que permite que muchos
de los programas existentes de UNIX pueden recompilarse y ejecutarse en
Linux.
Mejor soporte de dispositivos: PnP, USB, puerto paralelo, SCSI, etc.
Soporte para nuevos sistemas de ficheros, como UDF (CD-ROM reescribi-
bles como un disco). Otros sistemas con journal, como los Reiser de IBM o
el ext3, que permiten tener un registro (journal) de las modificaciones de
los sistemas de ficheros, y así poder recuperarse de errores o tratamientos
incorrectos de los ficheros.
Soporte de memoria hasta 4 GB. En su día surgieron algunos problemas
(con núcleos 1.2.x) que no soportaban más de 128 MB de memoria (una
cantidad que en aquel tiempo era mucha memoria).
Se mejoró la interfaz /proc. Se trata de un pseudosistema de ficheros (el
directorio /proc) que no existe realmente en disco, sino que es simple-
mente una forma de acceder a datos del núcleo y del hardware de una
manera organizada.
Soporte del sonido en el núcleo: se añadieron parcialmente los controla-
dores Alsa que antes se configuraban por separado.
Se incluyó soporte preliminar para el RAID software y el gestor de volúme-
nes dinámicos LVM1.
__rendered_path__1
El núcleo Linux
__rendered_path__17
El núcleo, en evolución
__rendered_path__18__rendered_path__19
El núcleo continúa
__rendered_path__18
evolucionando, incorporando
__rendered_path__17
lasúltimasnovedadesen
__rendered_path__21
soporte de hardware y
__rendered_path__22__rendered_path__22__rendered_path__21
mejorasen lasprestaciones.

Page 54
GNUFDL
En la serie actual, la rama del núcleo 2.6.x [Ces06, Pra03], se dispuso de im-
portantes avances respecto a la anterior (con las diferentes revisiones .x de la
rama 2.6):
__rendered_path__1
PID_00174426
54
El núcleo Linux
Mejores prestaciones en SMP, importante para sistemas multiprocesadores
muy utilizados en entornos empresariales y científicos.
Mejoras en el planificador de CPU (scheduler). En particular, se introducen
avances para mejorar el uso de tareas interactivas de usuario, imprescindi-
bles para mejorar el uso de Linux en un ambiente de escritorio.
Mejoras en el soporte multithread para las aplicaciones de usuario. Se in-
corporan nuevos modelos de hilos NGPT (IBM) y NPTL (Red Hat) (con el
tiempo se consolidó finalmente la NPTL).
Soporte para USB 2.0 y, posteriormente, para USB 3.0.
Controladores Alsa de sonido incorporados en el núcleo.
NuevasarquitecturasdeCPU de64 bits, sesoportan AMD x86_64 (también
conocida como amd64) y PowerPC 64 y IA64 (arquitectura de los Intel
Itanium).
Sistemas de ficheros con journal: JFS, JFS2 (IBM) y XFS(Silicon Graphics).
Mejoras con journal en los sistemas de ficheros propios, ext3 y ext4, con
mejoras del tamaño máximo de los archivos y de rendimiento general.
Mejoras de prestaciones en E/S y nuevos modelos de controladores unifi-
cados.
Mejoras en implementación de TCP/IP y el sistema NFSv4 (compartición
de sistema de ficheros por red con otros sistemas).
Mejoras significativas para núcleo apropiativo: permite que internamen-
te el núcleo gestione varias tareas que se pueden interrumpir entre ellas,
imprescindible para implementar eficazmente sistemas de tiempo real y
también para aumentar el rendimiento de tareas interactivas.
Suspensión del sistema y restauración después de reiniciar (por núcleo).
UML, User Mode Linux, una especie de máquina virtual de Linux sobre
Linux que permite ver un Linux (en modo usuario) ejecutándose sobre una
máquina virtual. Esto es ideal para la propia depuración, ya que se puede
desarrollar y probar una versión de Linux sobre otro sistema, y esútil tanto
para el propio desarrollo del núcleo como para un análisisde seguridad del
mismo. En versionesposterioreseste concepto evolucionó hacia el módulo
KVM.

Page 55
__rendered_path__1
GNUFDL PID_00174426
55
El núcleo Linux
__rendered_path__62
Técnicas de virtualización incluidas en el núcleo: en las distribuciones se
__rendered_path__63__rendered_path__64
han ido incorporando diferentes técnicas de virtualización, que necesitan
__rendered_path__63
extensionesen el núcleo. Cabe destacar, por ejemplo, núcleosmodificados
__rendered_path__62
para Xen, Virtual Server (Vserver), OpenVZ o el propio módulo KVM.
__rendered_path__66
Nueva versión del soporte de volúmenes LVM2.
__rendered_path__68
Nuevo pseudosistema de ficheros/sys, destinado a incluir la información
del sistema, y dispositivosqueseirán migrando desdeel sistema/proc, de-
jando este último con información relacionada con losprocesosy su desa-
rrollo en ejecución, así como la información dinámica del propio núcleo.
__rendered_path__67
Módulo FUSE para implementar sistemasde ficherosen espacio de usuario
__rendered_path__67
(en especial usado para el caso de NTFS).
__rendered_path__66
Para conocer loscambiosde lasversionesmásrecientesde Linux, pueden exa-
minarse los ficherosChangeLog que acompañan a cada versión del núcleo, o
consultar un registro histórico que se mantiene en Kernelnewbies.org, en espe-
cial http://kernelnewbies.org/LinuxChanges, que mantiene los cambios de la
última versión y pueden consultarse los del resto de versiones (misma direc-
ción con/Linux26Changes).
En el futuro se tiene pensado mejorar los aspectos siguientes:
Incremento de la tecnología de virtualización en el núcleo, para soportar
diferentes configuraciones de sistemas operativos y diferentes tecnologías
de virtualización, así como un mejor soporte del hardware para virtualiza-
ción incluido en los procesadores que surjan en las nuevas arquitecturas.
Están bastante soportadasx86 y x86_64, con KVM, por ejemplo, pero otras
no lo están o solamente parcialmente.
El soporte de SMP (máquinas multiprocesador), de CPU de 64 bits (Xeon,
nuevosmulticore de Intel y Opteron de AMD), el soporte de CPU multicore
y la escalabilidad de aplicaciones multihilo en estas CPU.
La mejora de sistemas de ficheros para clusterización y grandes sistemas
distribuidos.
Por el contrario, la mejora en núcleos más optimizados para dispositivos
móviles (PDA, smartphones, tablets, etc.).
Mejora en el cumplimiento de los estándar POSIX.
Enlace de int er és
Mejora de la planificación de la CPU. Aunque en la serie inicial de la ra-
Para saber más sobre POSIX
ma 2.6.x se hicieron muchos avances en este aspecto, todavía hay un bajo
podéis visitar la siguiente
web:
rendimiento en algunas situaciones. En particular en el uso de aplicacio-
http://www.unix.org/