enchufado
   RSS
#
Raspberry Pi tips (Hardware) 2012-09-01 12:03:39

Este post no sigue ningún orden concreto. Son apuntes personales estructurados a modo de pregunta-respuesta que pueden servir para curioseo/información ajena. Ten presente que uso la Dark Basic Image de Raspbian, así que muchos tweaks/trucos pueden ir ligados a este sistema.

  1. ¿Qué es lo mínimamente imprescindible para que la Raspberry Pi funcione?
  2. ¿De qué es capaz la Raspberry Pi?
  3. ¿Porqué no instalar el Sistema Operativo como si fuera un ordenador normal?
  4. ¿Porqué mi SD va tan lenta en mi RaspberryPi si en mi cámara fotográfica/de video vuela?
  5. Entonces ¿qué tarjeta me compro? ¿Una Clase 10? ¿Utilizo un USB?
  6. ¿Puedo ponerle ip fija a mi Raspberry?
  7. ¿Qué Sistema Operativo es el indicado teniendo en mente instalar un servidor?
  8. ¿Puedo montar fácilmente la imagen (.img) del Sistema Operativo para ver su contenido/realizar cambios sin necesidad de haberla volcado antes a la SD?
  9. ¿Qué parámetros de montado sirven para tunear el rendimiento del rootfs y dónde ponerlos?
  10. ¿Cómo puedo actualizar el firmware? ¿Es peligroso?
  11. ¿Se puede hacer overclocking? ¿Invalida la garantía?


¿Qué es lo mínimamente imprescindible para que la Raspberry Pi funcione?

La propia Raspberry Pi, una tarjeta SD con el Sistema Operativo y el conector de alimentación micro USB. Si no se precisa, no es necesario conectar red, monitor/televisión, teclado ni ratón.

¿De qué es capaz la Raspberry Pi?

Pensada para la enseñanza de programación a los peques, es un pequeño ordenador barato (unos 35¤) y de muy bajo consumo (3.5W, muy probablemente inferior que tu router ADSL). Por poner un ejemplo, este blog y alguna otra web de bajo tráfico estan hospedadas en una, pero comunmente también se usa como media center, NAS o pequeña máquina para entornos de test/preproducción de pequeños proyectos.

¿Porqué no instalar el Sistema Operativo como si fuera un ordenador normal?

El RaspberryPi no es un ordenador normal entre otras cosas porque por defecto, el disco duro es una tarjeta de memoria SD (aunque puedan usarse USB) y éstas se caracterizan, en comparación con otros medios de almacenamiento, por su lentitud. En algunos casos (p.ej. con Raspbian) disponemos de instalador, pero no se recomienda y se aconseja al usuario (para mantener indemne su salud mental) planchar la imagen en la tarjeta. Alguno pensará que esto no es así porque dispone de la tarjeta más rápida del mercado y sus tasas (de lectura/escritura) son una maravilla, lo cual nos lleva a la siguiente pregunta...

¿Porqué mi SD va tan lenta en mi RaspberryPi si en mi cámara fotográfica/de video vuela?

Porque este tipo de tarjetas, dada la tendencia a ser usadas mayormente en este tipo de dispositivos, se están especializando cada vez más en el acceso secuencial a los datos. Y he aquí el problema, puesto que los sistemas de ficheros de los Sistemas Operativos hacen todo tipo de accesos, si bien predominan los aleatorios (esto es, a distintas partes del almacenamiento).

Entonces ¿qué tarjeta me compro? ¿Una Clase 10? ¿Utilizo un USB?

Esto ya es decisión personal. Un USB va a operar más rápido, pero el arranque debe hacerse forzosamente desde una SD, así que te obliga a tener ambos pinchados simultáneamente. Si optas por hacerlo todo desde la SD debes saber que la velocidad de este tipo de tarjetas viene definido normalmente por el término Class. La parte mala es que su significado parece haber variado con el tiempo. La Class 2/4/6 supone garantizar (al menos en teoría) un acceso sostenido fragmentado/aleatorio de mínimo 2/4/6 MB/s, mientras que esta definición es con acceso secuencial para la Class 10. La indústria está para vender, está claro. Esto se traduce en que no es raro ver tarjetas SD Class 4/6 con acceso aleatorio más rápido que las de Class 10. Para empeorarlo, cada marca y modelo tiene sus rendimientos, así que sólo queda fiarse de los tests de rendimiento que se haga de las mismas (p.ej. en el foro de RaspberryPi o en este apartado de eLinux). Personalmente pensé en obtener una Sandisk Ultra SDHC Class 6, pero finalmente me decanté por Class 10. Principalmente porque no conseguí encontrar Class 6, pero también porque por lo que pude ver en diversos tests, esta marca y modelo de tarjetas da un buen rendimiento también en acceso aleatorio (y la diferencia de precio con las Extreme no parece compensar). Esto en cuanto a la velocidad.

En cuanto al espacio, no penséis que es sólo un tema de saber cuánto almacenamiento se precisa para alojar los datos. Éste tipo de sistema de almacenamiento (mayormente del tipo MLC/Multi Level Cell) tiene una durabilidad inferior a los demás (p.ej. los discos magnéticos/duros y ópticos). Para retrasar este efecto, estas memorias disponen de una tecnología llamada "cell leveling" encargada de repartir equitativamente las lecturas y escrituras, es decir, de reducir el riesgo de gastar más unas celdas que otras y hacer que todas se deterioren por igual a la par. ¿Y qué tiene que ver el espacio? Pues que cuándo más espacio libre (en desuso) tenga la tarjeta, más podrá repartir la carga y su durabilidad aumentará.

¿Puedo ponerle ip fija a mi Raspberry?

Sí, y para ello no sólo es necesario que edites el archivo /etc/network/interfaces deshabilitando el dhcp y sustituyéndolo por un static como se muestra a continuación, sino que además (al menos en Raspbian) es recomendable eliminar el paquete del cliente dhcp: isc-dhcp-client.

$ cat /etc/network/interfaces 
auto lo
iface lo inet loopback

#auto eth0
#iface eth0 inet dhcp

auto eth0
iface eth0 inet static
        address 192.168.1.2
        network 192.168.1.0
        netmask 255.255.255.0
        broadcast 192.168.1.255
        gateway 192.168.1.1

¿Qué Sistema Operativo es el indicado teniendo en mente instalar un servidor?

Para gustos los colores, pero personalmente siempre prefiero empezar con lo básico y luego instalar/configurar aquello que exclusivamente voy a usar. Y cuando se trata de una máquina que no destaca por su potencia, como es el caso, es la mejor opción para aprovechar sus escasos recursos. La DarkBasicImage de Raspbian viene a ser como una netinstall de Debian que además aprovecha el coma flotante por hardware (hfp) del que dispone la RaspberryPi. Para que nadie se lleve sorpresas, no está de más decir que no dispone de entorno gráfico y su gestión es totalmente por consola.

¿Puedo montar fácilmente la imagen (.img) del Sistema Operativo para ver su contenido/realizar cambios sin necesidad de haberla volcado antes a la SD?

Sí. Para ello puedes usar la herramienta kpartx con los siguientes parámetros:

  • -l imagen.img para ver la lista de particiones de la imagen.
  • -a imagen.img para tenerlas accesibles vía /dev/mapper/loop0pX y así poder montarlas con mount.
  • -d imagen.img para desconectar los dispositivos de loop (¡recuerda desmontarlos previamente!).

A continuación una sesión de ejemplo:
plas:/home/jors# kpartx -l raspbian_wheezy_20120608.img
loop0p1 : 0 153600 /dev/loop0 2048
loop0p2 : 0 3364864 /dev/loop0 155648
loop0p3 : 0 391168 /dev/loop0 3520512

plas:/home/jors# kpartx -a raspbian_wheezy_20120608.img

plas:/home/jors# ls -lh /dev/mapper/loop0p*
lrwxrwxrwx 1 root root 7 sep  1 11:58 /dev/mapper/loop0p1 -> ../dm-0
lrwxrwxrwx 1 root root 7 sep  1 11:58 /dev/mapper/loop0p2 -> ../dm-1
lrwxrwxrwx 1 root root 7 sep  1 11:58 /dev/mapper/loop0p3 -> ../dm-2

plas:/home/jors# mount /dev/mapper/loop0p2 /mnt/SD -o loop

plas:/home/jors# ls /mnt/SD/
bin  boot  dev  etc  home  lib  lost+found  media  mnt  opt  proc  root  run  sbin  selinux  srv  sys  tmp  usr  var

plas:/home/jors# umount /mnt/SD/

plas:/home/jors# kpartx -d raspbian_wheezy_20120608.img
loop deleted : /dev/loop0

¿Qué parámetros de montado sirven para tunear el rendimiento del rootfs y dónde ponerlos?

En /boot/cmdline.txt se pueden poner por ejemplo los siguientes en el parámetro rootflags:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootflags=data=writeback,discard,commit=300 quiet rootwait

También se puede deshabilitar el journal (tune2fs -O ^has_journal /dev/particion), pero existe mayor riesgo de pérdida de datos. Se pueden cojer ideas del documento SSD optimization - Debian Wiki.

¿Cómo puedo actualizar el firmware? ¿Es peligroso?

No entraña ningún riesgo porque el firmware va alojado en la propia SD, así que en el peor de los casos bastaría con reflashear (instalar o volcar la imagen del Sistema Operativo a la SD de nuevo). El procedimiento es actualmente tan sencillo como el que sigue:

wget https://raw.github.com/Hexxeh/rpi-update/master/rpi-update -O /usr/bin/rpi-update
chmod +x /usr/bin/rpi-update
apt-get install git
rpi-update

Después de esto nos pedirá reiniciar. Un modo de comprobar el update, a parte del cambio de versión de kernel que podemos comprobar con un uname -r (debemos ver 3.2.27+), es comprobar el número de interrupciones del driver USB, bien con:

vnstat # Ver el valor bajo el apartado system, in (de interrupts)

...o bien con:

sh -c "cat /proc/interrupts | grep dwc && sleep 10 && cat /proc/interrupts | grep dwc" | awk '{ if (s==0) s=$2 } END { print ($2-s)/10 }'

Antes, dependiendo de los dispositivos conectados a los puertos USB podian llegar a o incluso superar las 8000. Ahora no deberian superar las 1000, y si no tienes nada conectado por USB, deberian rondar las 200-300.

Otro modo de comprobar la versión de firmware es checkeando la versión que dispone la GPU:

# Estos 2 exports deberian estar en nuestro .bashrc:
export PATH=$PATH:/opt/vc/bin
export LD_LIBRARY_PATH=$LD_LIBRARYPATH:/opt/vc/lib
$ vcgencmd version
Sep 25 2012 00:17:37 
Copyright (c) 2012 Broadcom
version 339133 (release)

¿Se puede hacer overclocking? ¿Invalida la garantía?

Tradicionalmente se ha podido hacer overclocking, pero ésto habilitaba un bit en un componente de la Raspberry que invalidaba la garantía en caso de problemas. Actualmente hay un modo de hacer overclocking "legalmente" (aprobado por la propia compañía fundación) y sin invalidar la garantía: usar raspi-config. Para instalarlo deberemos añadir a nuestros repositorios (si no lo tenemos ya) el siguiente:

deb http://archive.raspberrypi.org/debian/ wheezy main
wget http://archive.raspberrypi.org/debian/raspberrypi.gpg.key
apt-key add raspberrypi.gpg.key

Esta utilidad basada en ncurses nos permite hacer una serie de configuraciones de nuestro sistema, incluyendo el apartado de overclocking. Hecho esto, podemos querer consultar la velocidad del procesador o su temperatura, respectivamente, en un momento dado:

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
cat /sys/class/thermal/thermal_zone0/temp


Si tienes algún otro tip/truco/consejo interesante, estaré encantado de oirlo y añadirlo a la lista. ¡Gracias por contribuir a la difusión de la información y el conocimiento! ;)


Comentarios (0)


Volver al indice

login, admin, form, register