¿El tamaño predeterminado del sector físico de 512 bytes es apropiado para los discos SSD en Linux?

10

GSmartControl y cualquier otra herramienta de línea de comandos (como fdisk, smartctl, cat /sys/block/sd*/queue/hw_sector_size, cat /sys/block/sd*/queue/physical_block_size) que había utilizado el mismo informe para mis dos discos:

Sector Size: 512 bytes logical/physical

Esta es una instalación predeterminada de Ubuntu 18.10 (más tarde actualizada a 19.04). Sin embargo, el stat -fcomando en ambos discos informa:

Block size: 4096       Fundamental block size: 4096

Mis dos discos son SSD y los discos AFAIK SSD requieren un tamaño de sector de 4K . ¿Está bien o me falta algo? ¿La información devuelta por stat(= 4K) garantiza que el sistema operativo siempre enviará E / S al disco en múltiplos de 4K y estos bloques nunca cruzarán los límites de 4K (los bloques de E / S siempre estarán alineados a 4K)?

Tenga en cuenta la siguiente salida ( sdb2es mi partición raíz , sdaes mi /homedisco):

# fdisk -l /dev/sd?
Disk /dev/sda: 465.8 GiB, 500107862016 bytes, 976773168 sectors
Disk model: SanDisk SDSSDH35
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sdb: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Disk model: ADATA SU800NS38 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: xxxx....

Device       Start       End   Sectors  Size Type
/dev/sdb1     2048   1050623   1048576  512M EFI System
/dev/sdb2  1050624 500117503 499066880  238G Linux filesystem

# df / /home
Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sdb2      244568380  17799136 214276188   8% /
/dev/sda       479670976 129685112 325550152  29% /home
FedonKadifeli
fuente
Si. Contiene información útil. Pero no he encontrado una respuesta autorizada a la pregunta: ¿la información devuelta por stat (4K) garantiza que el sistema operativo siempre enviará E / S al disco en múltiplos de 4K y estos bloques nunca cruzarán los límites de 4K (los bloques IO siempre estar alineado a 4K)?
FedonKadifeli
No sé qué es "stat (4K)". Pero la mayoría de los sistemas operativos modernos saben cómo lidiar con las transferencias nativas de E / S 4K. Y no, no significa que los bloques nunca crucen límites 4K en el disco a menos que las particiones estén alineadas correctamente. Use fdisk -lpara verificar problemas de alineación. Y aparentemente los SSD funcionan ligeramente diferente, debido a su construcción física, pero no soy un experto en esa área.
heynnema

Respuestas:

7

En los viejos tiempos, los sectores de 512 bytes eran la norma para los discos. El sistema solía leer / escribir sectores solo un sector a la vez, y eso era lo mejor que podían hacer los viejos discos duros.

Ahora, con las unidades modernas tan densas, tan rápidas y tan inteligentes, los sectores de lectura / escritura solo un sector a la vez realmente ralentizan el rendimiento total.

El truco fue ... ¿cómo acelerar el rendimiento total, pero aún mantener la compatibilidad con los subsistemas de disco antiguos / estándar? Crea un tamaño de bloque 4096 que se compone de ocho sectores físicos de 512 bytes. 4096 es ahora la transferencia mínima de lectura / escritura hacia / desde el disco, pero se entrega en mandriles de 512 bytes compatibles al SO.

Esto significa que incluso si el sistema solo necesita un sector de información de 512 bytes, la unidad lee ocho sectores de 512 bytes para obtenerlo. Sin embargo, si el sistema necesita los siguientes siete sectores, ya los ha leído, por lo que no es necesario que ocurra E / S de disco ... de ahí un aumento de la velocidad en el rendimiento total.

Los sistemas operativos modernos pueden aprovechar al máximo los tamaños de bloque 4K nativos de las unidades modernas.

heynnema
fuente
+1 pero 4096/512 = 8, por lo que creo que debería haber 8 sectores (lógicos) de 512 b en un sector físico de 4096 b. Solía partedmostrar el tamaño del sector lógico y físico.
sudodus
@sudodus Buena captura. Editar realizado.
heynnema
Es por eso que es importante alinear sus particiones a un límite de 4k, de lo contrario, cada carga / almacenamiento de bloque de 4k en realidad toca dos sectores de hardware. (Los sistemas de archivos dentro de las particiones a menudo usan bloques de 4k alineados al inicio de la partición). Algunas herramientas de formato alinean la primera partición por 1MiB, dejando un MiB completo sin usar, excepto la tabla de particiones. Las modernas unidades no informan de su tamaño de sector físico como 4k, se separan de su tamaño de sector lógico que sigue siendo 512B.
Peter Cordes
@PeterCordes, no solo el sector de arranque y la tabla de particiones (en los primeros 512 bytes) se almacenan en el primer Mibibyte. En una tabla de partición MSDOS, grubcoloca código adicional en el primer Mibibyte para arrancar en modo BIOS. (En un GPT, grubnecesita una pequeña partición con la bios_grubbandera para que ese código arranque en modo BIOS).
sudodus
4

Según Wikipedia, "el formato avanzado (AF) es cualquier formato de sector de disco utilizado para almacenar datos en unidades de disco que excedan 512, 520 o 528 bytes por sector, como los sectores de 4096 bytes de una unidad de formato avanzado (AFD)". El formato avanzado (AF) es un formato de disco que utiliza de forma nativa un tamaño de sector de 4.096 bytes en lugar de 512 bytes. Para mantener la compatibilidad con los sistemas heredados, los discos AF emulan un tamaño de sector de 512 bytes.

Obtuve los mismos resultados que obtuviste al ejecutar stat -fy smartctlen dos SSD. El sistema operativo reconoció automáticamente ambos SSD cuando se instalaron y requirió una configuración cero, por lo que parece que los datos que obtuvo son las configuraciones predeterminadas para el tamaño de bloque y el tamaño de sector.

karel
fuente
@heynnema No puedo hacer nada acerca de los "sectores de 4096 bytes" porque está copiado de Wikipedia, así que tengo que dejarlo igual que en Wikipedia.
karel
2
@heynnema: el tamaño físico es mucho mayor. Los SSD están construidos a partir de la memoria flash NAND ", que se divide físicamente en los llamados" bloques de borrado ". Esos pueden ser mucho más grandes, definitivamente es posible 4 MB.
MSalters
1

¿El tamaño predeterminado del sector físico de 512 bytes es apropiado para los discos SSD en Linux?

Mis dos discos son SSD y los discos AFAIK SSD requieren un tamaño de sector de 4K. ¿Está bien o me falta algo?

El hardware y los sistemas operativos antiguos usaban sectores de 512 bytes, desde 2011 (casi) todo el hardware de almacenamiento tiene 4096 (o más ) sectores de bytes; pero parte del hardware admite la emulación de sectores de 512 bytes para sistemas heredados. Hay excepciones, el Samsung 840 EVO SSD tiene bloques de tamaño 2048 KB .

Se calcula un Código de corrección de errores (ECC) para cada fragmento de 512 bytes y, como puede imaginar, los datos de ECC también requieren espacio de almacenamiento. No hace falta decir que un sector de 4096 bytes requiere menos información de ECC que ocho fragmentos de 512 bytes si los algoritmos de ECC permanecen sin cambios. Al final, la capacidad de almacenamiento total de un disco duro aumenta como resultado de una menor sobrecarga de datos ECC.

El uso de sectores 4K tiene sentido desde un punto de vista arquitectónico, ya que otras figuras clave (como páginas de memoria x86 y muchos grupos de sistemas de archivos) también emplean el tamaño de 4 KB. El formato avanzado permite algoritmos ECC más robustos, lo cual es importante a la luz de las capacidades cada vez mayores. Los controladores emplean técnicas adicionales más allá de la corrección de errores mediante la comprensión de las características de error de la memoria flash NAND y el comportamiento de la carga de trabajo.

El formato avanzado (AF) es cualquier formato de sector de disco utilizado para almacenar datos en discos magnéticos en unidades de disco duro (HDD) que excede 512, 520 o 528 bytes por sector, como 4096, 4112, 4160 y 4224 bytes ( 4 KB) sectores de una unidad de formato avanzado (AFD). Los sectores más grandes permiten la integración de algoritmos de corrección de errores más fuertes para mantener la integridad de los datos a mayores densidades de almacenamiento.

Para los discos SCSI (SAS), el tamaño del bloque RAID es mayor que el tamaño de un bloque JBOD debido a los campos de integridad de datos estandarizados SCSI T10 junto con la comprobación lógica de bloques defectuosos almacenados en cada bloque con los datos. Los adaptadores RAID SAS admiten bloques de disco basados ​​en 512 bytes de datos o 4K bytes de datos. El tamaño del bloque RAID para los 512 discos es 528 Bytes por sector y el tamaño del bloque RAID para los discos 4K es 4224 bytes por sector.

Debido a que está escribiendo en la memoria y no en un disco giratorio, el tamaño del sector físico tiene menos efecto que asegurarse de que sus particiones estén alineadas con el tamaño del bloque de borrado . Aun así, es mejor tener software y hardware actualizados y usar un tamaño de sector 4K.

Intel recomienda el tamaño de sector más grande: " Obtenga un rendimiento óptimo mediante cambios en el tamaño del sector físico de SSD ".

Robar
fuente