En la mayoría de las estaciones de trabajo y PC gaming, lo que decide cómo se siente un SSD NVMe no es la cifra secuencial máxima de la caja, sino la latencia de lectura aleatoria 4K con poca profundidad de cola, la velocidad de escritura cuando se llena la caché SLC, la presencia de DRAM o de un HMB bien diseñado y la refrigeración. PCIe 5.0 solo compensa cuando la carga mueve archivos grandes de forma continua y la unidad está en un slot x4 conectado al procesador. Un servidor añade dos requisitos: resistencia expresada en DWPD y protección ante cortes de energía. Las secciones siguientes muestran cómo comprobar cada punto con fio, smartctl y nvme-cli.
Rendimiento secuencial frente a 4K aleatorio con poca profundidad de cola
Las cifras secuenciales se miden con bloques grandes y colas profundas. Describen copiar un vídeo, restaurar una imagen de disco o cargar los pesos de un modelo. Compilar código, abrir aplicaciones y consultar una base de datos que no cabe en la RAM generan, en cambio, lecturas pequeñas, y cada hilo suele esperar a que termine una lectura antes de lanzar la siguiente. La unidad ve entonces una cola de una a pocas órdenes.
Con profundidad de cola 1, las IOPS equivalen a un segundo dividido entre la latencia media. Si una lectura de 4 KiB tarda 80 microsegundos, un hilo obtiene 12 500 IOPS, unos 51 MB/s. Reducir la latencia a la mitad duplica esa cifra, mientras que duplicar el ancho de banda PCIe no cambia nada. Por eso unidades con cifras secuenciales muy distintas pueden sentirse iguales en un equipo de escritorio.
Busque resultados de lectura y escritura aleatorias 4K a QD1 y latencias p99 o p99.9 bajo carga mixta, y mida lo que los fabricantes omiten con las pruebas de fio de más abajo. Un servidor también necesita IOPS con colas profundas, porque muchos clientes generan paralelismo real. Un índice HNSW que no cabe en memoria, como en la guía de búsqueda híbrida con pgvector, convierte cada consulta en una cadena de lecturas aleatorias dependientes, donde la latencia de cola importa más que los GB/s.
Generación PCIe, número de líneas y cableado de los slots M.2
PCIe 3.0, 4.0 y 5.0 funcionan a 8, 16 y 32 GT/s por línea con codificación 128b/130b. El techo en cada sentido es GT/s × 128/130 ÷ 8 GB/s por línea, así que un enlace x4 alcanza unos 3,9, 7,9 y 15,8 GB/s antes de la sobrecarga del protocolo. La unidad y el slot negocian la generación y el ancho más altos que ambos admiten: un SSD PCIe 5.0 funciona a velocidad 4.0 en un slot PCIe 4.0, y una unidad x4 en un slot x2 recibe la mitad de las líneas.
En las placas de escritorio, algunos slots M.2 usan líneas del procesador y otros cuelgan del chipset. El chipset tiene un único enlace con el procesador, compartido por USB, SATA, la red y todos los demás slots del chipset. Las placas también comparten líneas: ocupar un slot M.2 concreto puede desactivar puertos SATA o dejar el slot gráfico en x8. El diagrama de bloques o la tabla de slots del manual de la placa base muestra el cableado. Léalo antes de comprar.
Ponga el disco del sistema y el proyecto o la base de datos más activos en un slot conectado al procesador, y use los slots del chipset para juegos y archivos. PCIe 5.0 merece la pena para vídeo de alta tasa de bits, copias de conjuntos de datos y la carga de archivos de modelos grandes que describe la guía de hardware para LLM locales. Para jugar y para el desarrollo habitual, un buen SSD PCIe 4.0 con baja latencia a QD1 suele ser la mejor opción.
Compruebe el enlace negociado
Compare el enlace actual con el máximo en sysfs:
cd /sys/class/nvme/nvme0/device
cat current_link_speed current_link_width max_link_speed max_link_width
Un SSD PCIe 4.0 x4 en un slot adecuado muestra 16.0 GT/s PCIe y un ancho de 4. Un valor inferior apunta al cableado del slot, a una generación forzada en la configuración del firmware, a un riser o a líneas compartidas.
Controladora, caché DRAM y HMB
La controladora asigna direcciones lógicas a páginas NAND mediante la capa de traducción flash (FTL). Una tabla plana con una entrada de 4 bytes por cada página de 4 KiB ocupa 1/1024 de la capacidad, de ahí la proporción habitual de alrededor de 1 GB de DRAM por cada TB de NAND. Una unidad con DRAM mantiene buena parte de esa tabla junto a la controladora, por lo que las lecturas aleatorias sobre un rango amplio siguen siendo rápidas.
Las unidades sin DRAM usan el Host Memory Buffer (HMB) y toman prestada RAM del sistema para una parte de la tabla. La unidad solicita un tamaño en el campo hmpre de Identify Controller, en unidades de 4 KiB, y Linux lo limita con nvme.max_host_mem_size_mb, 128 MiB por controladora de forma predeterminada. El HMB encaja con los patrones de escritorio que tocan una parte limitada de la unidad. Ayuda menos cuando la E/S aleatoria abarca cientos de gigabytes, como en bases de datos e imágenes de máquinas virtuales.
nvme id-ctrl /dev/nvme0 | grep -E '^(mn|fr|hmpre|hmmin|vwc|wctemp|cctemp) '
cat /sys/module/nvme/parameters/max_host_mem_size_mb
Un hmpre distinto de cero en una unidad sin DRAM confirma que admite HMB. El búfer es pequeño, pero si la memoria del sistema ya va justa, la guía de memoria DDR5 ayuda a dimensionarla.
TLC, QLC y caché SLC
La TLC guarda tres bits por celda y la QLC cuatro. Más bits por celda significan más capacidad por chip, pero una programación más lenta y menos ciclos de escritura y borrado. Las unidades de consumo ocultan esa lentitud con una caché SLC: los datos entrantes se escriben a un bit por celda y después se trasladan a TLC o QLC.
La caché es finita y a menudo dinámica, así que se reduce a medida que la unidad se llena. Cuando una escritura larga la agota, la velocidad cae al nivel posterior a la caché, que tiende a ser más bajo en QLC. Las recomendaciones de hardware de Ceph llaman a esto «cliffing» y advierten que el rendimiento sostenido puede bajar considerablemente cuando se llena una caché limitada.
Busque en análisis o fichas técnicas el tamaño de la caché con un nivel de ocupación dado y la velocidad de escritura tras la caché. Si escribe a menudo decenas de gigabytes de una vez, por ejemplo al importar vídeo, copiar imágenes de VM o hacer copias de seguridad, elija TLC y deje espacio libre. La QLC es adecuada para bibliotecas que sobre todo se leen: juegos, contenido multimedia y archivos de modelos.
Resistencia: TBW, DWPD y garantía
El TBW es el índice de resistencia definido por JEDEC JESD218: los terabytes decimales que el host puede escribir con la carga de la clase de la unidad mientras esta conserva su capacidad y cumple los requisitos de tasa de errores, tasa de fallos y retención sin alimentación. El DWPD expresa el mismo presupuesto como escrituras completas por día de garantía:
DWPD = TBW / (capacity_TB × 365 × warranty_years)
TBW = DWPD × capacity_TB × 365 × warranty_years
Una unidad hipotética de 2 TB con 1200 TBW y cinco años de garantía da 1200 / (2 × 365 × 5), unos 0,33 DWPD. Un equipo de escritorio que escribe 50 GB al día consume unos 91 TB en cinco años. Una base de datos que reescribe la unidad entera cada día necesita más, y Ceph sugiere 1 DWPD o más para sus pools exigentes.
Las escrituras del host no son escrituras NAND. Las escrituras aleatorias pequeñas, una unidad llena y la falta de TRIM elevan el factor de amplificación de escritura (WAF). Un ejemplo desarrollado en el material de JEDEC estima la resistencia como TBW < (capacity × NAND P/E cycles) / (2 × WAF). Deje espacio libre, active TRIM y compre más capacidad para cargas con muchas escrituras.
Muchas garantías de consumo terminan al cumplirse el plazo o al alcanzar el TBW declarado, lo que ocurra primero. JESD218 fija además la retención sin alimentación de una unidad que ha agotado su resistencia nominal: un año a 30 °C para la clase cliente y tres meses a 40 °C para la clase empresarial. Un SSD desconectado no es un archivo, así que siga la guía de copias de seguridad 3-2-1.
Temperatura, throttling y disipadores
Cada controladora publica dos umbrales en Identify Controller. En WCTEMP sigue funcionando, pero necesita más refrigeración o menos carga. En CCTEMP puede reducir drásticamente el rendimiento, apagarse o perder datos. La NVM Express Base Specification 2.4 define estas temperaturas en kelvin y recomienda un umbral de aviso de 343 K, unos 70 °C.
Las unidades PCIe 5.0 y las PCIe 4.0 rápidas suelen necesitar disipador bajo carga sostenida. Use uno solo, la tapa M.2 de la placa con su almohadilla térmica o el propio de la unidad, y asegúrese de que le llegue flujo de aire. En portátiles y cajas compactas, una unidad de menor consumo puede sostener más trabajo que otra más rápida que sufre throttling. El registro SMART cuenta los minutos pasados en cada umbral o por encima. Si el contador de aviso crece con el uso normal, mejore la refrigeración.
Protección ante cortes de energía y unidades empresariales
Las unidades de cliente confirman una escritura en cuanto los datos llegan a un búfer volátil y confían en que el host lo vacíe con una orden flush antes de que se vaya la corriente. El registro SMART cuenta los cortes repentinos en el campo Unexpected Power Losses, que en revisiones anteriores de la especificación se llamaba Unsafe Shutdowns, y la especificación advierte que puede haber corrupción de datos en unidades sin protección ante pérdidas de energía.
Las unidades empresariales con protección ante cortes (PLP) usan condensadores para escribir en NAND los datos y metadatos del búfer cuando falla la alimentación. Las escrituras confirmadas sobreviven y los flush terminan sin esperar a la NAND. Por eso el software que llama a fsync constantemente, como bases de datos, registros de escritura anticipada, dispositivos ZFS intent log y Ceph, funciona más rápido y de forma más predecible, y Ceph recomienda unidades empresariales con PLP.
nvme id-ctrl /dev/nvme0 | grep -E '^vwc '
cat /sys/block/nvme0n1/queue/write_cache
El campo vwc indica si la controladora declara una caché de escritura volátil, y el valor write back en write_cache significa que Linux envía órdenes flush a la unidad. La ficha técnica es la referencia definitiva sobre PLP. No desactive nunca los flush ni las barreras del sistema de archivos en una unidad de cliente para mejorar un benchmark.
Probar una unidad nueva con fio
Pruebe antes de que la unidad contenga datos y use archivos en su sistema de archivos, porque escribir en un dispositivo en bruto como /dev/nvme0n1 destruye su contenido. Las pruebas usan E/S directa e io_uring. En núcleos antiguos, use --ioengine=libaio. fio prepara primero el archivo de prueba, de modo que las lecturas recaen sobre datos escritos.
cd /mnt/newdrive
# Lecturas aleatorias 4K con profundidad de cola 1: lo que nota un escritorio
fio --name=qd1-randread --filename=fio.test --size=32G \
--ioengine=io_uring --direct=1 --rw=randread --bs=4k \
--iodepth=1 --time_based --runtime=60 --ramp_time=5 \
--lat_percentiles=1 --percentile_list=50:99:99.9
# 4K aleatorio mixto con paralelismo: más cerca de un servidor cargado
fio --name=qd32-randrw --filename=fio.test --size=32G \
--ioengine=io_uring --direct=1 --rw=randrw --rwmixread=70 --bs=4k \
--iodepth=32 --numjobs=4 --group_reporting --time_based --runtime=120
# Escritura secuencial más allá de la caché SLC, ancho de banda registrado cada segundo
fio --name=seqwrite-cliff --filename=fio-big.test --size=300G \
--ioengine=io_uring --direct=1 --rw=write --bs=1M --iodepth=8 \
--write_bw_log=cliff --log_avg_msec=1000
En la prueba QD1, fíjese en la latencia media y el p99, no solo en las IOPS. En la prueba mixta, compare la latencia p99.9 entre unidades. Dimensione la prueba de caída por encima de la caché esperada y por debajo del espacio libre. Genera cliff_bw.1.log, una línea por segundo con el tiempo en milisegundos y el ancho de banda en KiB/s, y un gráfico muestra la velocidad en caché, la caída y cualquier throttling. Después borre los archivos de prueba. La documentación de fio describe cada opción.
Leer el estado con smartctl y nvme-cli
smartmontools y nvme-cli leen el mismo registro SMART / Health Information:
smartctl -x /dev/nvme0
nvme smart-log /dev/nvme0
nvme-cli 3.0, publicado en septiembre de 2026, renombra las órdenes con formas como nvme log smart y nvme id ctrl. Los nombres con guion que se usan aquí siguen disponibles como alias obsoletos y también funcionan en nvme-cli 2.x.
- Critical Warning: cualquier bit distinto de cero exige actuar. Los bits cubren la reserva de bloques, la temperatura, la fiabilidad y el paso del medio a solo lectura.
- Available Spare: la reserva restante en porcentaje. Si baja hacia Available Spare Threshold, la unidad está retirando bloques.
- Percentage Used: la estimación del fabricante sobre la resistencia consumida. Puede superar 100, y eso por sí solo no significa una avería.
- Data Units Written: miles de unidades de 512 bytes. Multiplique por 512 000 para obtener bytes, de modo que 10 000 000 unidades son 5,12 TB. Anótelo cada mes para conocer su DWPD real.
- Media and Data Integrity Errors: errores no recuperados. Cualquier aumento obliga a verificar las copias de seguridad de inmediato.
Autopruebas y firmware
smartctl -t short /dev/nvme0
smartctl -l selftest /dev/nvme0
nvme fw-log /dev/nvme0
fwupdmgr get-updates
fwupdmgr update
La autoprueba del dispositivo es opcional en la especificación NVMe, así que algunas unidades la rechazan. Configure smartd o su sistema de monitorización para que avise sobre los campos anteriores. El firmware afecta al rendimiento, la gestión de energía y el tratamiento de errores, así que lea las notas de la versión y haga una copia de seguridad antes de actualizar. El plugin NVMe de fwupd instala actualizaciones de los fabricantes que publican en LVFS y las activa en el siguiente reinicio. Para otros fabricantes hace falta su propia herramienta, o nvme fw-download y nvme fw-commit con su imagen. En un espejo, actualice primero una sola unidad. Si una unidad desaparece del bus en Linux, busque primero una corrección de firmware; el parámetro del núcleo nvme_core.default_ps_max_latency_us=0 desactiva las transiciones autónomas entre estados de energía como paso de diagnóstico.
Alineación de particiones y TRIM en Linux
fdisk y parted alinean las particiones según la topología de E/S que declara el dispositivo, así que mantenga sus valores predeterminados y compruebe el resultado:
lsblk -t /dev/nvme0n1
parted /dev/nvme0n1 align-check optimal 1
nvme id-ns -H /dev/nvme0n1 | grep 'LBA Format'
La orden align-check de parted indica si la partición 1 tiene una alineación óptima. La última orden enumera los formatos LBA admitidos y marca el activo. Muchas unidades se entregan con sectores de 512 bytes y ofrecen también sectores de 4096 bytes. nvme format --lbaf=<n> cambia el formato pero borra el espacio de nombres, así que decida antes de guardar datos y después de comprobar que el gestor de arranque, la capa RAID y el hipervisor admiten dispositivos 4Kn.
TRIM indica a la unidad qué bloques están libres, de modo que la recolección de basura no copia páginas obsoletas, baja la amplificación de escritura y se mantiene la velocidad tras la caché. Es preferible un TRIM periódico:
sudo systemctl enable --now fstrim.timer
sudo fstrim -av
lsblk --discard
El manual de fstrim considera suficiente un TRIM semanal para la mayoría de equipos de escritorio y servidores, y advierte que un TRIM frecuente o la opción de montaje discard podrían acortar la vida de los SSD de baja calidad. Btrfs activa automáticamente discard=async en los dispositivos compatibles desde el núcleo 6.2. Unos valores DISC-GRAN y DISC-MAX distintos de cero en lsblk --discard indican que las peticiones discard llegan al dispositivo. dm-crypt ignora los discard de forma predeterminada porque pueden revelar qué bloques están en uso. Actívelos con la opción discard de crypttab o con --allow-discards solo si esa filtración es aceptable. Deje también espacio libre, porque la caché SLC y la recolección de basura necesitan bloques libres.
Cómo encajar la unidad en cada equipo
| Requisito | PC gaming | Estación de desarrollo o creación | Servidor de bases de datos o VM | Almacenamiento sobre todo de lectura |
|---|---|---|---|---|
| Interfaz | PCIe 4.0, 5.0 opcional | PCIe 4.0, o 5.0 en un slot del procesador | U.2, E1.S, E3.S o M.2 22110 | PCIe 4.0 o 3.0, slot del chipset |
| 4K aleatorio a QD1 | Prioridad alta | Prioridad alta | Alta, más IOPS con cola profunda y p99.9 | Prioridad baja |
| DRAM o HMB | HMB aceptable | Mejor DRAM | DRAM | HMB aceptable |
| NAND | TLC, QLC para la biblioteca de juegos | TLC | TLC empresarial | QLC aceptable |
| Escritura tras la caché | Prioridad baja | Prioridad alta | Valor en estado estable | Baja salvo grandes importaciones |
| Resistencia | 0,3 DWPD es suficiente | Calcúlela según sus escrituras | 1 DWPD o más | Prioridad baja |
| Protección ante cortes | No necesaria | Útil para bases de datos locales | Obligatoria | No necesaria |
| Refrigeración | Disipador de la placa | Disipador y flujo de aire | Ventilación del chasis | Disipador de la placa |
Lista de comprobación antes y después de comprar
- Describa la carga: escrituras diarias, mayor escritura puntual, patrón de acceso y software que abusa de fsync.
- Compruebe en el manual de la placa qué slots M.2 están conectados al procesador y qué desactivan.
- Elija TLC con DRAM para cargas aleatorias o de escritura intensas, y deje HMB o QLC para funciones de sobre todo lectura.
- Calcule el DWPD a partir del TBW y lea las condiciones de la garantía.
- En servidores, exija PLP, un índice DWPD y una vía de actualización del firmware.
- Monte un solo disipador con flujo de aire y revise los contadores de temperatura al cabo de una semana.
- Tras la instalación, compruebe la velocidad y el ancho del enlace y anote la versión del firmware.
- Ejecute las tres pruebas de fio y guarde los resultados como referencia.
- Active
fstrim.timer, compruebe la alineación y decida el formato LBA antes de guardar datos. - Vigile Critical Warning, los errores de medio, Available Spare y Percentage Used, y guarde copias de seguridad en otros soportes.