# [SSD] Lenteur NAND Flash [Résolu]

## versus8

Bonjour à tous,

Je viens vers vous car j'ai des soucis sur une installation récente de Gentoo (pas tout à fait terminée mais presque). Je m'aperçois que le Nettop où j'installe Gentoo possède un petit SSD de 15 Go de type Nand Flash (pour en être sur et certain, car il a été acheté en occasion, est-ce qu'il existe une commande pour le savoir ? *). Le système fonctionne mais, la led du HDD s'allume parfois très longtemps alors que je ne fais rien (même cron est au repos). Du coup, si je lance en même temps Firefox ou VLC par exemple, je suis obligé d'attendre (je soupçonne une saturation I/O, car le CPU n'est pas forcément overheat).

* EDIT

```
myhostname ~ # hdparm -I /dev/sda

/dev/sda:

CompactFlash ATA device

        Model Number:       P-SSD1800

        Serial Number:      0208352013666

        Firmware Revision:  Ver2.Y0C

Standards:

        Supported: 5 4

        Likely used: 6

Configuration:

        Logical         max     current

        cylinders       16383   16383

        heads           16      16

        sectors/track   63      63

        --

        CHS current addressable sectors:   31522176

        LBA    user addressable sectors:   31522176

        Logical/Physical Sector size:           512 bytes

        device size with M = 1024*1024:       15391 MBytes

        device size with M = 1000*1000:       16139 MBytes (16 GB)

        cache/buffer size  = 1 KBytes (type=DualPort)

Capabilities:

        LBA, IORDY(cannot be disabled)

        Standby timer values: spec'd by Standard, no device specific minimum

        R/W multiple sector transfer: Max = 1   Current = 0

        DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 *udma4

             Cycle time: min=120ns recommended=120ns

        PIO: pio0 pio1 pio2 pio3 pio4

             Cycle time: no flow control=120ns  IORDY flow control=120ns

Commands/features:

        Enabled Supported:

           *    Power Management feature set

           *    WRITE_BUFFER command

           *    READ_BUFFER command

           *    NOP cmd

           *    CFA feature set

           *    Mandatory FLUSH_CACHE

           *    CFA advanced modes: pio5 pio6 mdma3 mdma4

Integrity word not set (found 0x0000, expected 0xd9a5)
```

Autre infos:

```
myhostname ~ # grep bogo /proc/cpuinfo && hdparm -tT /dev/sda && grep MemTotal /proc/meminfo 

bogomips        : 3193.26 

bogomips        : 3193.26 

/dev/sda: 

 Timing cached reads:   1224 MB in  2.00 seconds = 611.87 MB/sec 

 Timing buffered disk reads:  98 MB in  3.03 seconds =  32.30 MB/sec 

MemTotal:         898528 kB
```

J'ai fais la vérification de l'alignement du HD (car l'installation a été faite via un stage 5) avec fdisk -lu /dev/sda et RAS de ce côté.

Je pense qu'il y a une lecture séquentielle sur ce type de mémoire, les éventuels fsck (reiserfs) sont très longs et les accès I/O semble l'être également. A première vue, le scheduler NOOP semble être plus adapté, mais je ne l'ai pas suffisamment testé pour en être certain. Maintenant, il parait que CFQ adapterait son comportement en détectant que le support de stockage utilisé est du type Flash (selon le wiki d'Arch : "According to the discussion page, the CFQ scheduler can detect SSDs and modifies its behavior appropriately, so there is no need to change the I/O scheduler.").

Mise à part cette config sur le noyau, CONFIG_BLK_DEV_INTEGRITY est activé par défaut (source seedkernel) mais la description la déconseille. Cependant, la vérification de l'intégrité sur un support type NAND flash me semble nécessaire, car elle me semble pas fiable.

Mais ce qui m'interroge le plus, c'est CONFIG_MTD (désactivé par défaut je crois), où l'on peut activer diverses options telles que CONFIG_MTD_NAND_ECC_SMC (qui pourrait-être intéressante), NFTL (déconseillée) et/ou DiskOnChip/M-Systems (qui ne semble pas plus conseillée), MTD_BLKDEVS, CONFIG_MTD_SWAP (que je n'utiliserait pas, car j'utilise 2 zram pour éviter les écritures sur le SSD), CONFIG_MTD_RAM + probe && detect && mapping (je ne sais pas si cela peut résoudre quelque peu les soucis de performances)...

Bref, je m'y perd un peu et... j'ai surtout pas envie de tout perdre :p

J'ai aussi vu que certains FS seraient plus adaptés que reiserFS, tels que UBIFS, JFFS2, YAFFS, F2FS et enfin NILFS.

Avec ça, on peut dire que l'on a que l'embarras du choix :p

Mais cela me fait de la lecture et celle-ci ne m'est pas désagréable :p

EDIT : D'ailleurs, pour ceux que cela éveille de la curiosité, linuxfr.org en parle très bien !

EDIT² : mon choix s'orienterait donc entre UBIFS et NILFS (F2FS : je n'ai pas eu le temps de tout lire, mais apparemment il ne gére pas encore la compression/data deduplication, ni redimensionnement. Mais ce FS est tout jeune est à l'air pas mal à première vue).

Mais au cas où si auriez-vous des conseils à me donner sur la config du noyau (là je suis full reiserFS (une seule partition sans swap) avec un noyau gentoo-sources-3.8.13) et, éventuellement, auriez-vous une préférence de FS à me conseiller pour un nettop orienté Internet && e-mails, traitement de texte et quelques fichiers multimédia (voir quelques photos et petits jeux) ?

Le système est configuré pour être minimal (htop m'indique 48M sur 800M de RAM occupé après le login dans e-17, mais il doit avoir pas mal de cache/buffer), et j'ai prévu de construire un serveur dédié pour le portage des binaires prévus pour cette machine (bien sur, la compilation sera effectuée sur une machine plus puissante, sans doute en profile minimal && -Os). Du coup, dans l'avenir, je prévois de wiper le HD au max (quitte à virer les libs inutiles et les outils de compilation en dehors de ceux requis par portage pour l'importation des binaires).

Car il faut dire que 15 Go c'est peu pour une ado de nos jours   :Smile:  -heureusement qu'il y a des ports USB et SD

Merci par avance de vos conseils avisés ^^Last edited by versus8 on Wed Aug 21, 2013 8:12 am; edited 5 times in total

----------

## versus8

/off ?

Sinon, pour ceux que cela intéresserait de connaitre la taille de l'erase block sur un NAND:

```
 target$ cat /proc/mtd

   dev:    size   erasesize  name

   mtd0: 00040000 00004000 "bootloader"

   mtd1: 00020000 00004000 "params"

   mtd2: 00400000 00004000 "kernel"

   mtd3: 03ba0000 00004000 "filesystem"
```

Source et config noyau

En conséquence, faut-il formater avec une taille de block spécifique ?  Et est-ce de même pour les inodes ?

off ?/

Aussi, j'ai lu le tuto sur le wiki Gentoo, mais il ne parle que d'EXT4.

Mais il me reste à jeter un coup d'oeil sur les benchmark de Phoronix histoire de voir si cela peu m'aider à choisir un autre FS :p

Au vu tout ce que j'ai pu voir, je pense ne pas prendre trop de risque à compiler mon noyau avec les options MTD, reste tout de même à connaître celle qui peuvent-être nocives...

A plus tard  :Smile: 

----------

## xaviermiller

Bonjour,

Quel est ce modèle de nettop ? J'ai un Acer Aspire One A110 et le "SSD" de 8 Go était catastrophique en écriture. Je l'ai remplacé par un disque dur traditionnel.

----------

## versus8

Bon, mes lectures m'amène sur d'autres pistes à vérifier avant d'effectuer le "gros œuvre" : 

L'effacement sécurisé : sur e-17 on peut paramétrer par défaut l'effacement d'un fichier en remplaçant les octets par des zéro. J'ai testé sur un fichier, c'est relativement long !  La doc Ubuntu indique un avantage de cette procédure étendue à une sorte de formatage bas-niveau sur le disque complet (il va sans dire que les commandes suivantes sont dangereuses : hdparm --security-set-pass NULL /dev/sda && hdparm --security-erase NULL /dev/sda), "le disque SSD se retrouve comme à sa sortie d'usine". Alors peut-être que oui, mais mieux vaut je pense, éviter les écritures qui affaiblissent la durée de vie du support. Je trouve l'intérêt limité et je ne pense pas que cela soit la cause de mon problème. Cela doit-être la dernière solution (et si TRIM n'est pas prit en compte), mais à quelle moment ?  Il n'existe pas à ma connaissance d'outil qui indiquerait les statistiques permettant cette prise de décision.

Désactiver complètement l'archivage : toujours sur la doc Ubuntu (oui je sais, mais faut pas se limiter :p ), il est conseillé de désactiver complètement l'archivage avec data=writeback dans /etc/fstab après un "tune2fs -o journal_data_writeback /dev/sda1". Alors là, par contre, je n'ai rien saisie. Si vous avez des infos ^^

Désactiver ureadhead : effectivement, j'utilise ureadhead. Je vais tout de même tester sans, c'est au moins une opération sans risque.

Je vous tiens au jus !

----------

## versus8

 *XavierMiller wrote:*   

> Bonjour,
> 
> Quel est ce modèle de nettop ? J'ai un Acer Aspire One A110 et le "SSD" de 8 Go était catastrophique en écriture. Je l'ai remplacé par un disque dur traditionnel.

 

Salut Xavier,

Tu as visé dans le mille :p  C'est bien un Acer One (Model ZG5 / A110).

J'avais essayer de l'ouvrir pour le nettoyer en profondeur et rafraîchir la pâte thermique. J'ai pas réussi mais je viens de voir des tutos sur le Net pour remplacer le HDD. Faut vraiment avoir de la patience  :Smile: 

----------

## xaviermiller

Prends-toi un disque dur 1.8" PATA ZIF (genre pour iPod classic), tu seras beaucoup moins frustré  :Wink: 

Pour le placer, il faut enlever un peu de plastique dans la coque. Je l'ai ensuite fait tenir avec du collant double face puissant.

----------

## versus8

Merci beaucoup pour ces conseils  :Smile: 

Bon, j'aurais eu au moins le mérite d'avoir pu me cultiver un peu plus dans la soirée (j'aurais bien l'occasion plus tard de faire des tests pratique pour combler ma curiosité et mes interrogations). Mais puisqu'il s'agit bien là d'un défaut conceptuel sur ce modèle en série, je marque donc le sujet en résolu et je met un titre un peu plus au goût du sujet (qui s'est un peut éparpillé au fils du temps, je l'avoue :p ).

Bonne journée à tous  :Smile: Last edited by versus8 on Wed Aug 21, 2013 8:13 am; edited 1 time in total

----------

## xaviermiller

C'est un portable increvable... le mien a plus de 4 ans et est bon pied bon oeil.

2 autres conseils:

- ajoute 1 Mo de RAM si ce n'est déjà fait

- prends-toi une grosse batterie (y en a des tonnes compatibles sur eBay)

----------

## versus8

Qu'il soit increvable, c'est déjà un bon point. Ma batterie a déjà du être remplacée car elle est noir, et le modèle du Nettop est blanc. C'est une 2200 mAh et, pour une conso. moyenne qui oscille entre 7W et 12W, j'obtiens (estimation) 1h40 d'Internet (sans Flash), et 40 min de visionnage d'un mp4 (360p).

Si je prend un PATA (HD mécanique sur interface ATA/IDE ?), c'est sur qu'il vaut mieux remplacer la batterie  :Smile:   Puis sans doute une nappe ZIP, et le socket remplacé par du double-face c'est jouable ^^

Sinon, je n'ai qu'1 Go de RAM. Et en effet, il me semble qu'il y a un slot libre, mais le BIOS (dernière version, d'origine) prendra t-il en compte les 2 Go ?

----------

## xaviermiller

Oui, le BIOS supporte l'ajout 1GO supplémentaire.

Tu as de la chance d'avoir eu le modèle "Windows", j'ai le modèle "Linux" qui à la base n'a que 512 Mo soudés sur la carte-mère.

----------

## versus8

C'est pas vraiment le mien, mon ami l'a récupéré d'occasion. Il y avait un gros windows (Vista ou 7) dessus qui avait pas l'air "genuine", et l'autocollant de l'OS autant que l'étiquette certifié authentique avait été enlevé  :Mr. Green: 

Le disque 15 Go saturé bien entendu. Je comprend mieux maintenant pourquoi certains forumeurs parlaient de limitation à 1.5 Go.

/off

Ils abusent chez Acer, c'est n'importe quoi comme concept ! autant faire des économies sur la licence et avoir une liberté de manœuvre sur le matériel et vice-versa, là, c'est tout le contraire. Faut payer une licence windows pour ne pas avoir de soudure sur la RAM !  Et avoir deux séries différentes apporte un coût de fabrication supérieur, mais c'est pas grave, c'est le client qui paie... pfff... et quel idée économe que d'intégrer un disque dur "contre-performant"...

off/

----------

## xaviermiller

Ton /off/ n'a aucun sens, car Acer avait sorti 2 versions : avec Windows ou avec Linpus (une daube)  :Wink: 

La version Linux était moins chère (j'ai eu le mien en soldes à 185 EUR à l'époque)

----------

## versus8

Je me doute que ce modèle était moins cher, malgré tout, je ne vois pas l'intérêt de la soudure...

----------

## versus8

Résolution temporaire apportée : ré-alignement en parallèle avec EXT4 et fdisk. la commande cat /proc/mtd ne donne rien, je n'ai pas tout compilé dans le noyau (zé peur ! ), mais il semblerait que le ECC fonctionne. Je perd un peu en I/O, cependant, je n'ai plus du tout de latence (même cron reste transparent) !

```
myhostname ~ # hdparm -I /dev/sda && hdparm -tT /dev/sda && cat /proc/mtd

/dev/sda:

CompactFlash ATA device

        Model Number:       P-SSD1800

        Serial Number:      0208352013666

        Firmware Revision:  Ver2.Y0C

Standards:

        Supported: 5 4

        Likely used: 6

Configuration:

        Logical         max     current

        cylinders       16383   16383

        heads           16      16

        sectors/track   63      63

        --

        CHS current addressable sectors:   31522176

        LBA    user addressable sectors:   31522176

        Logical/Physical Sector size:           512 bytes

        device size with M = 1024*1024:       15391 MBytes

        device size with M = 1000*1000:       16139 MBytes (16 GB)

        cache/buffer size  = 1 KBytes (type=DualPort)

Capabilities:

        LBA, IORDY(cannot be disabled)

        Standby timer values: spec'd by Standard, no device specific minimum

        R/W multiple sector transfer: Max = 1   Current = 0

        DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 *udma4

             Cycle time: min=120ns recommended=120ns

        PIO: pio0 pio1 pio2 pio3 pio4

             Cycle time: no flow control=120ns  IORDY flow control=120ns

Commands/features:

        Enabled Supported:

           *    Power Management feature set

           *    WRITE_BUFFER command

           *    READ_BUFFER command

           *    NOP cmd

           *    CFA feature set

           *    Mandatory FLUSH_CACHE

           *    CFA advanced modes: pio5 pio6 mdma3 mdma4

Integrity word not set (found 0x0000, expected 0xd9a5)

/dev/sda:

 Timing cached reads:   1196 MB in  2.00 seconds = 598.23 MB/sec

 Timing buffered disk reads:  94 MB in  3.02 seconds =  31.12 MB/sec

dev:    size   erasesize  name
```

----------

