4 votes

OS X exécute-t-il parfois une routine TRIM moins connue avec des disques qui ne sont pas explicitement pris en charge ?

OS X exécute-t-il parfois une routine TRIM avec des disques qui ne sont pas explicitement pris en charge ?

Lorsqu'un volume HFS Plus est démonté ou éjecté, peut-être ?

Contexte

Récemment, lors du partitionnement répété/agressif d'une simple clé USB et de l'effacement de ses multiples systèmes de fichiers HFS Plus journalisés, des messages tels que celui-ci ont été observés dans la Console :

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

Dans les informations système, le disque - un Kingston DataTraveler 400 - n'est pas traité comme un support à semi-conducteurs, et il n'y a pas de ligne "Prise en charge TRIM :".

Je ne fais pas de code, mais il me semble que ignorer l'habillage apparaît dans une partie du code - le hfs_unmap_free_extent routine - cela s'appliquerait là où le TRIM est pris en charge d'une manière ou d'une autre.

Je me demande donc si, en plus des routines supposées critiques à la nanoseconde qui peuvent être exécutées pendant qu'un système de fichiers est monté, il n'est pas possible d'avoir un système de fichiers qui ne soit pas monté. une routine moins connue et relativement rudimentaire (moins critique) peut être exécutée à d'autres moments .


En rapport

Optimiser le macbook pro pour les disques internes SSD+HDD (2011), où le réponse acceptée a attiré l'attention sur un commentaire de Hyram en juillet 2011 en réponse à un article de Grant Pannell paru sur digitaldj.net. Dans ce commentaire :

Apple a verrouillé la prise en charge du TRIM pour une très bonne raison - leur code fonctionne de manière fiable avec les disques SSD qu'ils ont choisi d'utiliser et aucun autre, parce qu'ils ont programmé des boucles de synchronisation critiques à la nanoseconde qui correspondent parfaitement aux temps d'accès des contrôleurs utilisés dans les disques SSD d'Apple.

Cependant, un article de digitaldj.net de novembre 2011 mettent en doute certaines des déclarations de Hyram. En particulier :

Il n'y a aucune preuve qu'Apple dispose d'un code spécifique pour gérer leur matériel SSD spécifique pour la lecture et l'écriture.

Veuillez noter que cette question est no à propos du tiers Enabler TRIM et autres. Il s'agit de :

  • ce qui est partie intégrante du système d'exploitation

- et j'aimerais obtenir des réponses fiables. Des réponses fondées sur des preuves si possible, bien que je comprenne que les parties à code source fermé d'OS X puissent rendre cela difficile.


A partir du code source du noyau lié à HFS

/* 
 ;________________________________________________________________________________ 
 ; 
 ; 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);
}

Première apparition dans l'open source d'Apple : http://www.opensource.apple.com/source/xnu/xnu-2050.9.2/bsd/hfs/hfscommon/Misc/VolumeAllocation.c (Mac OS X 10.8.1)

Dernière apparition : http://www.opensource.apple.com/source/xnu/xnu-2422.1.72/bsd/hfs/hfscommon/Misc/VolumeAllocation.c

De même, dans ce dernier cas :

/* 
 * 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. 
 ;________________________________________________________________________________ 
 */ 

et ainsi de suite.

1voto

Geoff Nixon Points 3143

Ainsi, en vertu de :

Cette question ne porte pas sur le TRIM Enabler de tierces parties ni sur d'autres produits similaires.

Cela ne peut pas être la "bonne réponse", semble-t-il. Mais même si ce n'est pas l'objet de la question, c'est ce que le, hum, "réponse correcte" est en quelque sorte ? Je vais quand même tenter ma chance...

La réponse courte à la question du titre : en bref, non.

Il n'y a qu'une seule mise en œuvre... par contrôleur pris en charge .

hfs_unmap_free_ext ne fait pas référence à la hfs_unmap_free extent fonction .

Il s'agit de la kext qui fait le " hfs_unmap_free l'homme".

L'erreur,

hfs_unmap_free_ext: ignoring trim peut se produire pour l'une ou l'autre des raisons suivantes, ou pour les deux à la fois :

  • Le disque utilise un contrôleur pris en charge, mais il n'a pas été "béni" par un contrôleur Apple. avec un numéro de série et un micrologiciel Apple. Dans ce cas, Parcheando cette protection est supprimée l'extension du noyau - ce que fait Trim Enabler - activera TRIM puisque le matériel a un pilote qui le supporte.

    (Moi aussi, je considérerais Parcheando le noyau comme étant presque la définition de quelque chose ). d'un système d'exploitation).

  • Il est ignoré car, bien que l'appareil annonce que il prend en charge la fonction TRIM, il n'y a pas de pilote TRIM dans le noyau pour ce contrôleur, car Apple n'a jamais livré de disque basé sur le TRIM. de ce contrôleur, puisque Apple n'a jamais livré de disque basé sur ce contrôleur. Il utilise donc des commandes ATA génériques.

(C'est probablement le cas de votre disque, en raison du bit "non reconnu comme SSD").


Tandis que :

ils ont programmé des boucles de synchronisation critiques à la nanoseconde qui correspondent parfaitement aux temps d'accès des contrôleurs utilisés dans les disques SSD d'Apple.

est vrai, ce n'est certainement pas la raison pour laquelle Apple verrouille les disques. Ils le font pour que vous ne puissiez pas bénéficier d'une assistance dans le cadre de la garantie pour un disque tiers.

Apple ne fabrique pas de disques, mais si vous lisez comment Tim Cook (alors COO) s'est accaparé le marché asiatique de la flash NAND il y a quelques années - plus ou moins la raison pour laquelle il est PDG aujourd'hui - vous comprendrez pourquoi les fabricants de flash permettent à Apple de dicter ce genre de choses.

A part cela, je crains que vous ne trouviez pas grand-chose de plus qui fasse "autorité". Comme vous l'avez dit, la plupart de ces choses sont des sources fermées, bien que vous puissiez trouver des traces partout, avec des comprend comme éste . Notez également que le TRIM est davantage un concept/une mise en œuvre qu'une norme (du moins pour tout ce qui est antérieur à la norme SATA 3.1).

Je peux également vous dire en toute confiance que les disques SSD dotés de la fonction TRIM et du logo Apple ne peuvent être achetés que par l'intermédiaire de GSX (ou sur le marché gris). Et que Trim Enabler fonctionne très bien. J'ai installé (les versions les plus récentes) dans de nombreux environnements de production.

Quelques liens :
http://www.anandtech.com/show/5453/trim-enabler-20-for-os-x-lion-released http://en.wikipedia.org/wiki/Trim_(informatique)

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X