domingo, 24 de febrero de 2008

Eee PC: Optimizar el disco SSD

Examinando un poco los mensajes de arranque de Linux (dmesg) he encontrado algo que me ha llamado la atención: El disco SSD que monta el equipo 4G soporta velocidades UDMA66, sin embargo en el arranque se inicializa como UDMA33.

El problema de la inicialización a inferior velocidad es debido a un test realizado para confirmar que cuenta con un cable de 80 hilos. Los cables de 80 hilos aparecieron con estos modos de acceso a mayores velocidades, y su único objetivo era ofrecer 40 hilos adicionales que se colocan entre los hilos activos para servir de apantallamiento y evitar interferencias entre conductores.

En este caso el test no tiene ningún sentido, pues estamos hablando de un disco que ni siquiera tiene unos cables de conexión ya que directamente está soldado en la placa base.

Este es el mensaje mostrado por el Xandros original (kernel 2.6.21.4)


[ 9.079879] ata1: SATA max UDMA/133 cmd 0x000101f0 ctl 0x000103f6 bmdma 0x0001ffa0 irq 14
[ 9.079924] ata2: PATA max UDMA/100 cmd 0x00010170 ctl 0x00010376 bmdma 0x0001ffa8 irq 15
[ 9.079952] scsi0 : ata_piix
[ 9.248388] ATA: abnormal status 0x7F on port 0x000101f7
[ 9.248427] scsi1 : ata_piix
[ 9.427674] ata2.00: ATA-4: SILICONMOTION SM223AC, , max UDMA/66
[ 9.427682] ata2.00: 7815024 sectors, multi 0: LBA
[ 9.447667] ata2.00: configured for UDMA/33
[ 9.447859] scsi 1:0:0:0: Direct-Access ATA SILICONMOTION SM n/a PQ: 0 ANSI: 5
[ 9.448030] SCSI device sda: 7815024 512-byte hdwr sectors (4001 MB)
[ 9.448052] sda: Write Protect is off
[ 9.448057] sda: Mode Sense: 00 3a 00 00
[ 9.448083] SCSI device sda: write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 9.448173] SCSI device sda: 7815024 512-byte hdwr sectors (4001 MB)
[ 9.448190] sda: Write Protect is off
[ 9.448195] sda: Mode Sense: 00 3a 00 00
[ 9.448220] SCSI device sda: write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 9.448228] sda: sda1 sda2 sda3 sda4
[ 9.448933] sd 1:0:0:0: Attached scsi disk sda


...y este el mostrado por la última versión de Ubuntu 8.04 (kernel 2.6.24-8) con la que estoy haciendo pruebas:


[ 26.368103] ata1: SATA max UDMA/133 cmd 0x1f0 ctl 0x3f6 bmdma 0xffa0 irq 14
[ 26.368112] ata2: PATA max UDMA/100 cmd 0x170 ctl 0x376 bmdma 0xffa8 irq 15
[ 26.603830] usb 5-4: new high speed USB device using ehci_hcd and address 2
[ 26.700245] ata2.00: ATA-4: SILICONMOTION SM223AC, , max UDMA/66
[ 26.700256] ata2.00: 7815024 sectors, multi 0: LBA
[ 26.700297] ata2.00: limited to UDMA/33 due to 40-wire cable
[ 26.716208] ata2.00: configured for UDMA/33
[ 26.716530] scsi 1:0:0:0: Direct-Access ATA SILICONMOTION SM n/a PQ: 0 ANSI: 5
[ 27.282234] usb 5-4: configuration #1 chosen from 1 choice
[ 27.519681] usb 5-5: new high speed USB device using ehci_hcd and address 3
[ 27.651879] Driver 'sd' needs updating - please use bus_type methods
[ 27.652117] sd 1:0:0:0: [sda] 7815024 512-byte hardware sectors (4001 MB)
[ 27.652150] sd 1:0:0:0: [sda] Write Protect is off
[ 27.652157] sd 1:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 27.652234] sd 1:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 27.652379] sd 1:0:0:0: [sda] 7815024 512-byte hardware sectors (4001 MB)
[ 27.652406] sd 1:0:0:0: [sda] Write Protect is off
[ 27.652412] sd 1:0:0:0: [sda] Mode Sense: 00 3a 00 00
[ 27.652475] sd 1:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
[ 27.652485] sda:<6>usb 5-5: configuration #1 chosen from 1 choice
[ 27.653120] sda1 sda2 sda3 sda4
[ 27.653617] sd 1:0:0:0: [sda] Attached SCSI disk
[ 27.682266] sd 1:0:0:0: Attached scsi generic sg0 type 0


Lo prmero que haremos es realizar una medida inicial de rendimiento (para confirmar si finalmente se consigue una mejora) y obtener información sobre el disco (para confirmar los modos UDMA soportados):


$ sudo hdparm -i /dev/sda

/dev/sda:

Model=SILICONMOTION SM223AC, FwRev= , SerialNo=99737499482303948769
Config={ HardSect NotMFM Fixed DTR>10Mbs }
RawCHS=7753/16/63, TrkSize=0, SectSize=576, ECCbytes=4
BuffType=DualPort, BuffSize=1kB, MaxMultSect=1, MultSect=?0?
CurCHS=7753/16/63, CurSects=7815024, LBA=yes, LBAsects=7815024
IORDY=no, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 *udma2 udma3 udma4
AdvancedPM=yes: disabled (255)
Drive conforms to: Unspecified: ATA/ATAPI-4

* signifies the current active mode



$ sudo hdparm -tT /dev/sda

/dev/sda:
Timing cached reads: 642 MB in 2.00 seconds = 320.88 MB/sec
Timing buffered disk reads: 66 MB in 3.02 seconds = 21.86 MB/sec


El primer paso en el que uno podría pensar, es intentar forzar el uso de UDMA66 mediante el comando hdparm. Sin embargo, aparece un mensaje de error indicando que no se permite el cambio (quizás porque inicialmente ya se ha fijado UDMA33 como límite superior)


$ sudo hdparm -X68 /dev/sda

/dev/sda:
setting xfermode to 68 (UltraDMA mode4)
SG_IO: bad/missing ATA_16 sense data:: ....


El siguiente paso, al ver que el cambio de modo UDMA no va a ser trivial es intentar obtener información adicional sobre el disco SSD, en particular algo referente a velocidades soportadas para ver si estamos ya en la máximas prestaciones o si por el contrario podremos conseguir una mejora al pasar a UDMA4 (66). Teóricamente UDMA33 permitiría transferencias de 33MB/s pero el disco está entregando 21MB/s, de modo que no sería descabellado pensar que ya está al máximo de sus posibilidades.

La información existente es escasa. Buscando en la web del fabricante (SiliconMotion), la primera información que obtengo no me gusta nada: Resulta que es un chip de tarjetas CompactFlash.

¿Tanta historia con el disco SSD y resulta que no es más que una tarjeta CF sin carcasa soldada en la placa base? Me indigno un poco y pienso que hubiera sido mejor poner un conector y una ranura para tarjetas CF. Al menos sería más sencillo tener diferentes sistemas operativos en el equipo.

Continúo buscando información sobre el controlador, y encuentro en un hilo de eeeuser que el disco de 8G utiliza el controlador SM223TF AC. No dice nada del 4G, pero sospecho que es el mismo (agradecería que alguien que haya abierto su equipo lo confirmara)

Continúo buscando información, ahora sobre este chip. Resulta que no es un controlador cualquiera, sino que lo incorporan las últimas tarjetas CF de alta velocidad. En concreto parece que hay tarjetas CF con velocidad 300x (yo pensaba que lo máximo existente en la actualidad era 266x) que ofrecen velocidades de 45MB/s y que utilizan este chip como controlador. En un blog japonés (1, 2) muestran una de estas tarjetas desmontadas, y en pruebas de benchmark obtienen velocidades promedio de 41.5MB/s.

Bueno, resulta que nuestro Eee PC tiene soldada una CompactFlash 300x de 4GB que puede dar más de 40MB/s, pero nuestro equipo la maneja como UDMA33 (a mitad de velocidad) y obtiene 21.8MB/s Esto suena muy prometedor: Si conseguimos UDMA66 todo apunta a que podemos duplicar la velocidad (al menos de lectura) del disco SSD.

Este problema ya apareció hace algunos años, cuando aparecieron los primeros dispositivos con capacidades UDMA66 y que no siempre se detectaban correctamente. para evitarlo, se contempló la posibilidad de pasar un parámetro al kernel (ideX=ata66, siendo X = 0, 1, 2, el bus ATA en cuestión), de modo que éste no realizara el test de número de conductores (40 u 80) y asumiera que el cable contaba con 80 conectores.

Lo he probado tanto en Ubuntu como en Xandros sin éxito, y parece que el problema está comenzando a aparecer de nuevo a los usuarios, precisamente por el uso de tarjetas CF de alta velocidad. En este último enlace se plantea la posibilidad de parchear el kernel, pero no es algo que esté dispuesto a hacer en este momento.

Hasta aquí he podido llegar, y lanzo las siguientes preguntas a posibles lectores:

  1. ¿Alguien puede confirmar el chip que lleva el modelo 4G? (y, ya puestos, el 2G)
  2. ¿Alguien que utilice Windows puede averiguar si maneja el disco como UDMA33 o UDMA66?
  3. Quienes usais otras distribuciones Linux, ¿Podeis examinar dmesg para ver si alguna distribución lo maneja como UDMA66? ¿podeis hacer un test de velocidad en este caso?

Creo que estamos utilizando el disco a la mitad de sus prestaciones, y creo también que no debería de ser muy difícil utilizarlo al 100%. Creo que merece la pena el esfuerzo y que nuestro Eee PC puede mejorar de manera importante sus prestaciones.

3 comentarios:

josean dijo...

I have reported this as a bug in Ubuntu Launchpad.

josean dijo...

El bug ha sido resuelto y está cerrado. Cuando actualicemos a Ubuntu 8.10 ya no tendremos este problema.

tycho dijo...

no te pone ahi qeu el controlador es el SM223AC?¿?¿?¿ con el hdparm -i

o eso es otra cosa??