4 votos

¿OS X a veces se ejecutan menos conocidas RECORTE de rutina con unidades que no están explícitamente apoyado?

¿OS X a veces ejecutar un RECORTE de rutina con unidades que no están explícitamente apoyado?

Cuando un HFS Plus de volumen se desmonta o expulsado, tal vez?

De fondo

Señaló recientemente en la Consola, mientras que con frecuencia/de manera agresiva la partición de un simple unidad flash USB y borrar sus múltiples diario HFS Plus sistemas de archivos, mensajes como este:

2013-12-29 21:56:18.000 kernel[0]: hfs_unmap_free_ext: ignoring trim vol=swivel @ off 4698607616 len 159744 

En el Sistema de Información, la unidad de un Kingston DataTraveler 400 – no es tratado como un estado sólido a medio, y no hay 'Soporte TRIM:' la línea.

Yo no hago el código, pero a mí me parece que ignorar recorte aparece en una parte del código – hfs_unmap_free_extent rutina – que se aplican donde RECORTAR es en cierto modo compatible.

Esto me deja preguntándome si – además de los supuestos de nanosegundos crítica de rutina(s) que se puede ejecutar mientras que un sistema de archivos es montado – menos conocidas y relativamente crudo (menos importante) de rutina se pueden ejecutar en otros momentos.


Relacionados con la

Optimizar el macbook pro para SSD interno+unidades de disco duro (2011), donde la aceptaron responder llamó la atención a que en julio de 2011 comentario por Hyram en respuesta a una digitaldj.net artículo de la Concesión Pannell. Dentro de ese comentario:

... Apple bloquea el soporte TRIM para una muy buena razón - su código funciona de forma fiable con el SSD que han elegido usar, y no otros, porque ellos se han programado en nanosegundos-sincronización crítica de bucles que coincide perfectamente con el acceso a los tiempos de los controladores utilizados en Apple Ssd. ...

Sin embargo, en el mes de noviembre de 2011 digitaldj.net artículo puesto en duda algunos de Hyram declaraciones. En particular:

... No existe ninguna evidencia de que Apple tiene un código específico para manejar sus específicas SSD de hardware para la lectura y la escritura. ...

Por favor, tenga en cuenta que esta pregunta es no sobre terceros TRIM Enabler y similares. Se trata de:

  • lo que es parte integral del sistema operativo

– y me gustaría respuestas autorizadas. Basada en la evidencia, si es posible, aunque soy consciente de que la fuente cerrada porciones de OS X puede tomar esta difícil.


De HFS relacionados con el código fuente 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 la Manzana de código abierto: http://www.opensource.apple.com/source/xnu/xnu-2050.9.2/bsd/hfs/hfscommon/Misc/VolumeAllocation.c (Mac OS X 10.8.1)

La mayoría de reciente aparición: http://www.opensource.apple.com/source/xnu/xnu-2422.1.72/bsd/hfs/hfscommon/Misc/VolumeAllocation.c

También, desde el ú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í sucesivamente.

1voto

Baarn Puntos 4579

Así, en virtud de:

esta pregunta no es acerca de terceros TRIM Enabler y el como

Esta no puede ser la "respuesta correcta" de lo que parece. Pero incluso si eso no es lo que la pregunta es, que es lo que el, um, "respuesta correcta" es una especie de sobre? Así que me voy a dar un tiro de todos modos...

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

Sólo hay una aplicación... por soportados.

hfs_unmap_free_ext no se refiere a la hfs_unmap_free extent función.

Se refiere a los kext que hace el "hfs_unmap_freeing."

El error,

hfs_unmap_free_ext: ignoring trim puede ocurrir por uno o ambos de dos razones:

  • La unidad es uno que utiliza un controlador compatible, pero no ha sido "bendecidos" con una Manzana número de serie y versión de firmware. En este caso, parches, esta protección el núcleo de la extensión de lo que Trim Enabler - permitirá RECORTAR ya que el hardware tiene un controlador que soporta.

    (También, a mí mismo, me gustaría considerar la posibilidad de parchear el kernel para ser casi la definición de algo intergral para el sistema operativo).

  • Se ignora porque a pesar de que el dispositivo se anuncia que es compatible con TRIM, no hay RECORTE de driver en el kernel para que el controlador, ya que Apple nunca envían un unidad basándose en que el controlador en el primer lugar. Tan sólo utiliza los genéricos de comandos ATA.

(Este es probablemente el caso con la unidad, debido a la "no se reconoce como un SSD de bits".)


Mientras que:

ellos se han programado en nanosegundos-sincronización crítica de bucles que coincide perfectamente con el acceso a los tiempos de los controladores utilizados en Apple Ssd

es una declaración verdadera, que, definitivamente, no se por qué Apple bloquea unidades. Que de hacerlo, así que usted no puede conseguir en el soporte de la garantía de una tercera parte de la unidad.

Apple no hacer unidades; pero si usted lee cómo Tim Cook (mientras COO) acaparado el Asiático NAND flash mercado un par de años atrás más o menos, ¿por qué él es el CEO de hoy - vas a entender por qué flash fabricantes permiten Apple para dictar este tipo de cosas.

Aparte de eso, no estoy seguro de que vas a encontrar mucho más que eso "autoritaria", me temo. Como usted dijo, la mayoría de este material es de código cerrado, aunque se pueden encontrar vestigios de la yacija en todas partes, con los incluye como este. También, tenga en cuenta que el RECORTE es más un concepto/implementación cosa que una norma (al menos con algo antes de SATA 3.1).

También puedo decir con confianza que recorta habilitado/Apple-logotipo de la marca de Ssd sólo puede ser adquirido a través de la GSX (o el mercado gris). Y que Trim Enabler funciona bastante bien. He instalado (las versiones más recientes) en muchos un entorno 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_(computación)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X