Novedades SmartOS de 20181011 a 20190829
SmartOS es un hipervisor derivado de Illumos, la evolución de código abierto de OpenSolaris. He estado usando Solaris desde principios de los 90 y aún creo que es un sistema operativo más "serio" y profesional que Linux.
La mayoría de las distribuciones basadas en Illumos son sistemas operativos completos. SmartOS es diferente. Un despliegue SmartOS típico consiste en un hipervisor ligero que ejecuta contenedores Solaris. Algo similar a Docker, pero más capaz y mucho más seguro.
Como hipervisor, SmartOS arranca desde un dispositivo como una memoria USB, un DVD o por PXE [1]. La imagen es bastante pequeña, menos de 300 Megabytes. El dispositivo de arranque no contiene ninguna personalización. El sistema arranca y lee la configuración desde el disco duro local. Se trata de un enfoque interesante: actualizar el hipervisor es trivial y a prueba de errores porque siempre puedes arrancar con la versión anterior y no puedes dañar el sistema con una actualización problemática. Al medir menos de 300 Megabytes puedes conservar varias versiones de SmartOS por ahí, por si las moscas.
[1] | He documentado cómo instalar SmartOS en el disco duro local en Installing/booting SmartOS in/from a harddisk without physical access. Se trata de una configuración no soportada, pero muy útil cuando queremos usar SmartOS en una máquina sobre la que no tenemos acceso físico. |
Acabo de actualizar mis máquinas SmartOS de la versión 20181011 a la versión 20190829, siguiendo el procedimiento que describí en Upgrading SmartOS when installed in your harddisk. El proyecto está muy activo y la lista de mejoras en estos casi once meses es importante. Puedes ver los cambios con detalle en inglés, pero aquí os doy una versión masticada y resumida en español (la lista no es exhaustiva, hay mucho más):
-
Mejor gestión de errores en la parada y reinicio de zonas: OS-5176: vmadm stop and reboot may propagate improper error.
-
Mitigación de Spectre: OS-7598: Kernel needs to be built with retpolines y OS-7621: Kernel needs to generally use RSB stuffing.
-
Podemos cambiar el tamaño de los discos de las máquinas virtuales con facilidad: OS-7352: VM.update should allow disk resize with update_disks.
-
Permite ajustar más configuraciones en dispositivos lofi en zonas no globales: Bug #10567: lofi should support basic EFI ioctl()s.
-
Correcciones en lofiadm: Bug #10215: lofiadm -la fails after lofiadm -a / lofiadm -d.
-
Más correcciones en dispositivos lofi: OS-7483: excessive page destruction caused by 6602.
-
Correcciones en la librería libumem: Bug #10548: libumem doesn't free memory allocated by valloc or memalign.
-
Información PCI Express: OS-7715: Update PCIe capability headers for PCIe 4.x, OS-7716: Record PCIe gen 4 caps, OS-7719: PCIe speeds and feeds should be exposed to userland.
-
Mejor comportamiento con zonas a medio provisionar: OS-7350: vmadm delete cannot clean up a zone in "configured" state.
-
Arranque sin SMT: OS-7662: need a way to disable SMT.
-
- Loader no es capaz de arrancar si algún dataset del zpool está cifrado: Bug #11277: Loader cannot boot from root pool with encryption enabled.
- Loader debe poder arrancar, aunque se esté evacuando un disco duro: Feature #10166: loader: support com.delphix:removing.
- Loader debería poder arrancar SmartOS: OS-7260: SmartOS should support booting with loader.
- Soporte de versiones recientes de ZFS: Feature #10173: loader: support newer ZFS versions.
- Extensiones SmartOS: OS-7595: Triton-specific extensions to Loader.
-
- Agotamiento de memoria: Bug #7366: vioif happily creates rx descriptors until it consumes all memory.
- Mejoras en VirtIO: Feature #11329: improved Virtio framework.
- Docker:
-
lx brand:
- Soporte para sendmmsg() y recvmmsg(): OS-7755: add sendmmsg() and recvmmsg() to lx.
- Compatibilidad con TCP_CONGESTION y diversos ficheros de control en /proc/sys/net/ipv4/: OS-7427: Support Linux congestion control interfaces in LX zones.
- Compatibilidad openat(2): OS-7433: lxbrand openat(2) should behave same as Linux's when O_PATH and O_NOFOLLOW are specified.
-
bhyve:
- Puesta al día con la versión oficial de bhyve: OS-7819: bhyve upstream sync 2019 June.
- Soporte AMD: OS-7170: bhyve should support AMD.
- Flexibilidad en el espacio asignado a una zona bhyve: RFD 154 Flexible disk space for bhyve VMs, OS-7338: vmadm support for flexible disk space.
-
Red:
-
Mejoras en snoop para soportar SVP [2], el protocolo VxLAN de SmartDC: OS-7503: snoop(1m) should learn about SVP.
[2] No he encontrado información sobre este protocolo. Tema pendiente.
-
Las tarjetas de red virtuales de las zonas deben soportar LSO: OS-2340: vnics should support LSO.
-
No hace falta calcular sumas de control en los datagramas de tráfico local: OS-6778: MAC loopback traffic should avoid cksum work.
-
Notificaciones de cambio de estado del enlace de red: Feature #11364: Want system event for datalink state changes.
-
Podemos cambiar el estado de un etherstub: Feature #11365: Want ability to toggle etherstub link state.
-
Algoritmos de congestión TCP sustituibles: OS-7329: Want pluggable TCP congestion control algorithms, Bug #11553: Want pluggable TCP congestion control algorithms.
-
Comando connstat: OS-7944: Want support for printing RTT variance with connstat(1M), Bug #11547: Want connstat(1M) command to display per-connection TCP statistics, OS-7327: Want connstat(1M) command to display per-connection TCP statistics.
-
Mide los tiempos de propagación en nanosegundos: Bug #11546: Track TCP round-trip time in nanoseconds, OS-7334: Track TCP round-trip time in nanoseconds.
-
Avances en la implementación de RFD 163 Cloud Firewall Logging: OS-7667: IPFilter needs to keep and report state for cloud firewall logging.
-
Bajo ciertas circunstancias, el reenvío de tráfico de red puede no funcionar: OS-7520: OS-6778 broke IPv4 forwarding.
-
Podemos mover enlaces de red de una zona no global a la zona global: OS-7806: cannot move link from NGZ to GZ.
-
Con el cortafuegos activo, las opciones de TCP de alto rendimiento pueden no funcionar correctamente: OS-7586: ipf sometimes freezes RFC 1323 transfers, Bug #10409: ipf sometimes freezes RFC 1323 transfers.
-
Regresión con IPv6 bajo ciertas circunstancias: OS-7556: IPv6 packets dropped after crossing MAC-loopback.
-
Mejora de rendimiento en dladm show-ether: Bug #10052: "dladm show-ether" should pick one kstat snapshot and stick with it.
-
-
Ampliación de soporte de CPUs:
- Sensores de temperatura: Feature #11184: Want CPU Temperature Sensors.
- Regresión con algunas CPUs: Bug #11332: Regression: 11184 causes kernel hang during boot on CPUs without ARAT.
-
Intel:
- Soporte para nuevas instrucciones: Feature #10893: Need support for new Cascade Lake Instructions.
- Sensores de temperatura: OS-7769: Want Intel PCH temperature sensor.
- Más contadores de rendimiento: Feature #10895: Update cpcgen tools and data for Cascade Lake.
-
AMD:
- Optimización en AMD Zen: Feature #10278: Prefer use of mwait on AMD Zen.
- Mejor detección SMT en AMD: Feature #10277: Properly detect SMT on AMD.
- Más contadores de rendimiento: Feature #10896: Want support for AMD Zen CPC events.
-
ZFS:
- Los requisitos sobre los dispositivos de log eran innecesariamente exigentes: Bug #11541: allocation_classes feature must be enabled to add log device.
- Diversas mejoras en zfs send y zfs recv: Bug #11282: port ZoL send/recv fixes.
- Soporte de cuotas de proyecto: Bug #11479: zfs project support.
- Mejoras en la gestión de bloques deduplicados: Bug #9751: Allocation throttling misplacing ditto blocks.
- Estadísticas metaslab: Bug #11260: mdb zfs metaslab statistics are unavailable.
- Implementación de dnodes grandes: Feature #8423: Implement large_dnode pool feature, Feature #7432: Large dnode pool feature, Bug #10452: ZoL: merge in large dnode feature fixes.
- El nuevo comando zpool sync nos asegura que el zpool esté al día y el ZIL vacío: Bug #10554: Implemented zpool sync command.
- Mejora de rendimiento: Bug #9691: fat zap should prefetch when iterating, Bug #9485: Optimize possible split block search space.
- Detecta mejor que un disco duro de recambio está fallando: OS-6602: ZFS not detecting faulty spares in a timely manner, OS-7499: ZFS retire agent cannot fault inactive spares.
- Gestión incorrecta de escrituras en las que parte de la memoria no está mapeada: Bug #10230: zfs mishandles partial writes.
- Bajo ciertas ciscunstancias, hay trashing de metaslabs: OS-7151: ZFS loading and unloading metaslabs at audible frequency.
- Regresión: zfs diff tiene problemas con ficheros borrados recientemente: Bug #9559: zfs diff handles files on delete queue in fromsnap poorly.
- Correcciones diversas: Bug #10330: merge recent ZoL vdev and metaslab changes, Bug #10592: misc. metaslab and vdev related ZoL bug fixes, Bug #10601: Pool allocation classes, Bug #10757: Add -gLp to zpool subcommands for alt vdev names.
-
ARC:
- Regresión en las estadísticas ARC: Bug #9433: Fix ARC hit rate.
-
RAIDZ:
- Más flexibilidad en la configuración raidz: OS-7627: allow wider raidz stripe width in disklayout.
-
ZIL:
- Latencia elevada cuando tenemos el ZIL en un dispositivo rápido, pero el zpool en sí está muy lleno: OS-7917: excessive zil_commit latency.
- Mejor comportamiento al mezclar escrituras grandes con llamadas a fsync: Bug #9962: zil_commit should omit cache thrash, Feature #9963: Seperate tunable for disabling ZIL vdev flush.
- Mejoras de rendimiento: Bug #9993: zil writes can get delayed in zio pipeline.
- Cifrado:
- Cifrado ZFS: Feature #8727: Native data and metadata encryption for zfs.
- zfs recv no funciona bien: OS-7879: zfs recv is broken.
- Un dataset cifrado puede tener datasets hijos sin cifrar: Bug #11276: Allow unencrypted children of encrypted datasets.
- Actualización de sysinfo: OS-7633: sysinfo should report the encryption status of a system.
- Varias mejoras en el scrubbing y el resilvering:
- El scrubbing y el resilvering es mucho más rápido: Feature #10405: Implement ZFS sorted scans.
- Mejoras en el scrubbing y el resilvering: Bug #10952: defer new resilvers and misc. resilver-related fixes.
- Más precisión en la estimación del tiempo para terminar: Bug #10900: Fix estimated scrub completion time.
- La reconstrucción puede fallar en ciertos casos: Bug #10566: Multiple DVA Scrubbing Fix.
-
NFS:
- Gestiona apropiadamente algunas redirecciones NFSv4: Bug #7782: nfs: READDIR for referrals should conform to RFC 7530.
-
SMB:
Hay un buen montón de mejoras en el soporte del protocolo de almacenamiento remoto SMB, tanto como cliente como servidor. Algunos ejemplos, entre otros:
- Bajo ciertas condiciones, los usuarios normales no pueden montar el almacenaje en red: Bug #7530: Non-admin users unable to mount SMB shares.
- Bloqueos de procesos: Bug #10958: CIFS hang with threads stuck in door calls to idmapd.
- Mejor comportamiento ante ataques: Bug #10969: SMB server listener stops after a SYN-ACK flood.
- Responde correctamente cuando la verificación de la firma falla: Bug #10970: SMB v1 response incorrect when signature verification fails.
- Estadísticas correctas: Bug #10971: SMB2 kstats don't correctly count compound requests.
- Extensiones Apple: Feature #10975: Want SMB2 Apple extensions.
- Activar SMB3 por defecto: Feature #11019: Enable SMB3 server by default.
- Cifrado SMB3: Feature #11018: SMB3 Encryption.
- Comparte muchos datasets por SMB mucho más rápido: Feature #11032: Time spent sharing SMB filesystems could be reduced by optimizing smb_getdataset for default mount points.
- Regresión: Permite usuario@servidor: Bug #9872: SMB server does not accept username@hostname.
-
USB:
- Mejor soporte de teclados USB para el modo de depuración: Feature #11281: XHCI polled mode support for USB keyboards.
- Proporciona la topología USB: Feature #10242: Project Tiresias: USB topology, RFD 89 Project Tiresias, RFD 147 Project Tiresias: USB Topology, OS-7146: Project Tiresias: USB topology.
- Mantenemos más información sobre los dispositivos USB: OS-7704: USB topology could know about supported, minimum speeds.
- Mejora en el soporte de USB 3.1: OS-7561: xhci USB 3.1 minor version encoded differently across vendors.
-
Algunos cambios no son públicos. Por ejemplo: OS-7885, OS-7618, OS-7747, entre otros muchos.
-
Por supuesto, infinidad de correcciones varias.
Actualización 20221013: Publico Novedades SmartOS de 20190829 a 20200520.