¿OS X a veces ejecuta una rutina TRIM less conocida con unidades que no son explícitamente compatibles?

¿A veces OS X ejecuta una rutina TRIM con unidades que no son compatibles explícitamente?

Cuando un volumen HFS Plus se desmonta o se expulsa, ¿tal vez?

Fondo

Observado recientemente en la console, mientras particiona / agresivamente particiona una simple unidad flash USB y borra sus múltiples filesystems HFS Plus, posts como este:

  • No puedo formatear mi Macbook, HDD y MacUtilities no se cargarán, se bloqueará el signo después de intentar iniciar usb
  • Error al cambiar la aplicación pnetworkingeterminada con la que abrimos un file
  • ¿Cómo descargo un file de audio de Facebook Messenger?
  • ¿Cómo mostrar todos los processs en ejecución en macOS / OS X?
  • Mac OS X 10.6.8 App Store no funciona
  • ¿Hay alguna forma de networkingucir el exceso de OS X 10.6 Snow Leopard?
  • 2013-12-29 21:56:18.000 kernel[0]: hfs_unmap_free_ext: ignoring trim vol=swivel @ off 4698607616 len 159744 

    En Información del sistema, el disco – un Kingston DataTraveler 400 – no se trata como un medio de estado sólido, y no hay una línea 'Soporte TRIM:'.

    No uso el código, pero me parece que ignorar el ajuste aparece en una parte del código, la rutina hfs_unmap_free_extent , que se aplicaría cuando TRIM sea de alguna manera compatible.

    Esto me deja preguntándome si, además de las supuestas rutinas críticas de nanosegundos que se pueden ejecutar mientras se monta un sistema de files, una rutina less conocida y relativamente cruda (less crítica) puede ejecutarse en otros momentos .


    Relacionado

    Optimice macbook pro para discos internos SSD + HDD (2011), donde la respuesta aceptada llamó la atención sobre un comentario de julio de 2011 de Hyram en respuesta a un artículo de digitaldj.net de Grant Pannell. Dentro de ese comentario:

    … Apple bloqueó el soporte TRIM por una muy buena razón: su código funciona de manera confiable con los SSD que eligieron y no otros, porque han progtwigdo en ciclos de synchronization críticos para nanosegundos que combinan perfectamente con los times de acceso de los controlleres utilizados en SSD de Apple. …

    Sin embargo, un artículo de digitaldj.net de noviembre de 2011 arrojó dudas sobre algunas de las declaraciones de Hyram. En particular:

    … No hay evidencia de que Apple tenga un código específico para manejar su hardware SSD específico para leer y escribir. …

    Tenga en count que esta pregunta no se trata de terceros TRIM Enabler y similares. Se trata de:

    • lo que es integral para el sistema operativo

    – y me gustaría respuestas autorizadas. Basado en evidencia si es posible, aunque aprecio que las porciones de código cerrado de OS X pueden dificultarlo.


    Del código fuente relacionado con HFS para el kernel

     /* ;________________________________________________________________________________ ; ; Routine: hfs_unmap_free_extent ; ; Function: Make note of a range of allocation blocks that should be ; unmapped (trimmed). That is, the given range of blocks no ; longer have useful content, and the device can unmap the ; previous contents. For example, a solid state disk may reuse ; the underlying storage for other blocks. ; ; This routine is only supported for journaled volumes. The extent ; being freed is passed to the journal code, and the extent will ; be unmapped after the current transaction is written to disk. ; ; Input Arguments: ; hfsmp - The volume containing the allocation blocks. ; startingBlock - The first allocation block of the extent being freed. ; numBlocks - The number of allocation blocks of the extent being freed. ;________________________________________________________________________________ */ static void hfs_unmap_free_extent(struct hfsmount *hfsmp, u_int32_t startingBlock, u_int32_t numBlocks) { u_int64_t offset; u_int64_t length; u_int64_t device_sz; int err = 0; if (hfs_kdebug_allocation & HFSDBG_UNMAP_ENABLED) KERNEL_DEBUG_CONSTANT(HFSDBG_UNMAP_FREE | DBG_FUNC_START, startingBlock, numBlocks, 0, 0, 0); if (ALLOC_DEBUG) { if (hfs_isallocated(hfsmp, startingBlock, numBlocks)) { panic("hfs: %p: (%u,%u) unmapping allocated blocks", hfsmp, startingBlock, numBlocks); } } if (hfsmp->jnl != NULL) { device_sz = hfsmp->hfs_logical_bytes; offset = (u_int64_t) startingBlock * hfsmp->blockSize + (u_int64_t) hfsmp->hfsPlusIOPosOffset; length = (u_int64_t) numBlocks * hfsmp->blockSize; /* Validate that the trim is in a valid range of bytes */ if ((offset >= device_sz) || ((offset + length) > device_sz)) { printf("hfs_unmap_free_ext: ignoring trim vol=%s @ off %lld len %lld \n", hfsmp->vcbVN, offset, length); err = EINVAL; } if (err == 0) { err = journal_trim_add_extent(hfsmp->jnl, offset, length); if (err) { printf("hfs_unmap_free_extent: error %d from journal_trim_add_extent for vol=%s", err, hfsmp->vcbVN); } } } if (hfs_kdebug_allocation & HFSDBG_UNMAP_ENABLED) KERNEL_DEBUG_CONSTANT(HFSDBG_UNMAP_FREE | DBG_FUNC_END, err, 0, 0, 0, 0); } 

    Primera aparición en fuente abierta de Apple: http://www.opensource.apple.com/source/xnu/xnu-2050.9.2/bsd/hfs/hfscommon/Misc/VolumeAllocation.c (Mac OS X 10.8.1)

    Aparición más reciente: http://www.opensource.apple.com/source/xnu/xnu-2422.1.72/bsd/hfs/hfscommon/Misc/VolumeAllocation.c

    Además, de este último:

     /* * Validation Routine to verify that the TRIM list maintained by the journal * is in good shape relative to what we think the bitmap should have. We should * never encounter allocated blocks in the TRIM list, so if we ever encounter them, * we panic. */ 

     /* ;________________________________________________________________________________ ; ; Routine: hfs_track_unmap_blocks ; ; Function: Make note of a range of allocation blocks that should be ; unmapped (trimmed). That is, the given range of blocks no ; longer have useful content, and the device can unmap the ; previous contents. For example, a solid state disk may reuse ; the underlying storage for other blocks. ; ; This routine is only supported for journaled volumes. ; ; *****NOTE*****: ; This function should *NOT* be used when the volume is fully ; mounted. This function is intended to support a bitmap iteration ; at mount time to fully inform the SSD driver of the state of all blocks ; at mount time, and assumes that there is no allocation/deallocation ; interference during its iteration., ; ; Input Arguments: ; hfsmp - The volume containing the allocation blocks. ; offset - The first allocation block of the extent being freed. ; numBlocks - The number of allocation blocks of the extent being freed. ; list - The list of currently tracked trim ranges. ;________________________________________________________________________________ */ 

    … y así.

  • ¿Cómo interactúa Power Nap de Apple con File Vault?
  • SRM ido en macOS Sierra (10.12)
  • ¿Cómo puedo moverme rápido en CLI en Mac?
  • Incapaz de elaborar vino de installation
  • Configure Time Machine luego de reinstalar Mac OS para tener en count las copys de security anteriores
  • ¿Cómo puedo verificar la entropía disponible?
  • One Solution collect form web for “¿OS X a veces ejecuta una rutina TRIM less conocida con unidades que no son explícitamente compatibles?”

    Entonces, en virtud de:

    esta pregunta no es sobre TRIM Enabler de terceros y similares

    Esta no puede ser la "respuesta correcta" que parecería. Pero incluso si de eso no se trata la pregunta, ¿de eso se trata la "respuesta correcta" ? Así que voy a intentarlo de todos modos …

    La respuesta corta a la pregunta del título: en resumen, no.

    Solo hay una implementación … por controller compatible .

    hfs_unmap_free_ext no se refiere a la function de extent hfs_unmap_free .

    Se refiere al kext que hace el " hfs_unmap_free ing".

    El error,

    hfs_unmap_free_ext: ignoring trim puede ocurrir por una o ambas razones:

    • El disco es uno que usa un controller compatible, pero no ha sido "bendecido" con un número de serie y firmware de Apple. En este caso, parchear esta protección en la extensión del kernel, lo que hace Trim Enabler, habilitará TRIM ya que el hardware tiene un controller que lo admite.

      (También, yo mismo, consideraría parchear el núcleo para que sea casi la definición de algo integrado al sistema operativo).

    • Se ignora porque, aunque el dispositivo anuncia que es compatible con TRIM, no hay ningún controller TRIM en el kernel para ese controller, ya que Apple nunca envió una unidad basada en ese controller en primer lugar. Entonces solo usa commands ATA generics.

    (Este es probablemente el caso con su unidad, debido al bit "no reconocido como SSD").


    Mientras:

    han progtwigdo en ciclos de temporización críticos de nanosegundos que combinan perfectamente con los times de acceso de los controlleres utilizados en las SSD de Apple

    es una afirmación verdadera, definitivamente no es por eso que Apple bloquea las unidades. Lo hacen para que no pueda get soporte de garantía para una unidad de terceros.

    Apple no hace unidades; pero si lee cómo Tim Cook (mientras COO) arrinconó el mercado asiático de NAND flash hace unos años, más o less por qué es CEO hoy en día, comprenderá por qué los fabricantes de flash permiten a Apple dictar cosas como esta.

    Aparte de eso, no estoy seguro de que encuentres mucho más de lo que es "autorizado", me temo. Como dijiste, la mayoría de estas cosas son de código cerrado, aunque puedes encontrar rastros en todas partes, con inclusiones como esta . Además, tenga en count que TRIM es más un concepto / implementación que un estándar (al less con algo anterior a SATA 3.1).

    También puedo decir con confianza que las SSD con TRIM habilitado / marca Apple-logo solo se pueden comprar a través de GSX (o el mercado gris). Y ese Trim Enabler funciona bastante bien. He instalado (las versiones más recientes) en muchos entornos de producción.

    Un par de enlaces:
    http://www.anandtech.com/show/5453/trim-enabler-20-for-os-x-lion-released http://en.wikipedia.org/wiki/Trim_(computing)

    Loving Apple Products like poisoning (iPhone, iPad, iMac, Macbook, iWatch).