Uno de los aspectos a solucionar para ahorrar la batería de los
portátiles
es hacer que el disco se ponga en reposo lo antes posible. Suele
ser
difícil de lograrlo, sobre todo en sistemas
con journaling. Aquí describo las
técnicas y trucos que ayudan a lograrlo, y aunque están explicadas sobre los cambios hechos
a un Apple iBook con
Ext3, sirven para cualquier otro Linux.
Aunque no interese el ahorro de energía, otra ventaja adicional es que prolongaremos bastante la vida del disco
duro, ya que los discos de portátiles no están diseñados para funcionar de forma continua, aunque se alimente de la red.
English version
Lo primero que hay que notar cuando se usa un sistema de ficheros con
journaling, como el ext3, es que los daemons, como el noflushd, que
retrasan las operaciones de escrituras
en disco de los bloques modificados, no tienen nada de efectividad en el
Ext3 o ReiserFS.
Ésto se debe a que el sistema operativo escribe regularmente al diario
(journal
o log)
del sistema de ficheros independientemente.
Yo me estuve “peleando” bastante tiempo con el ext3, pensaba que era todo
culpa
suyo, el disco no paraba, y como en el iBook la única pieza en movimiento es el
disco y la CPU casi no calienta, todo el ruido (en realidad muy poco) y el calor
generado proviene del disco.
En mi configuración de hasta hace unos días había deshabilitado el ext3 y
había
vuelto al ext2 con el noflushd, donde lograba mejores resultados. Pero resulta
que era el noflushd el que enmascaraba de alguna forma la generación de salidas
“innecesarias” (mi portátil no es un servidor 🙂 del syslogd y la generación
de estadísticas del NTP. Además, como uso la red wireless con un servidor DHCP
en el punto de acceso, cada vez que se
renueva la IP se generaban varias líneas
de logs. Éste último punto lo resolví primero incrementando el período de
leasing
del dhcpd, pero queda intrínsicamente solucionado con lo que explico
en este artículo.
En resumen, lo que vamos a hacer básicamente son tres cosas:
y directorios (noatime).
el ntpd en su configuración original.
noatime
Por defecto, el sistema de ficheros almacena en el i-nodo del fichero la
fecha
de último acceso a los ficheros. Eso quiere decir que cada vez que leemos un
fichero se genera una operación de escritura. Si no nos interesa mantener esa
información (normalmente no interesa), podemos indicar al sistema que no lo
haga. Para ellos ponemos la opción “noatime” en el /etc/fstab para cada uno de
los sistemas de ficheros “reales” en los discos (i.e. no hay que hacerlo
con el /proc o el swap). Por ejemplo:
# /etc/fstab: static file system information.
#
/dev/hda4 / ext3 defaults,noatime 0 1
syslogd
En el syslogd se generan muchas líneas que normalmente no nos interesan en un
portátil, así que eliminé la mayoría de las que se generan periódicamente, como
mensajes de la red wireless, renovación de IPs, el crond que verifica si hay que
ejecutar algo cada minuto, etc. etc. Aquí tenéis como he dejado mi syslogd.conf,
pero debo decir que es bastante radical.
Veréis que las cosas que generan
mensajes más frecuentemente lo envío al /dev/null y a las demás les agrego el
signo “-” al principio del nombre de cada fichero para evitar que el syslogd
haga el fsync luego de cada línea (que en realidad no ayudan mucho con un
sistema con journaling, pero sí lo hacen con un ext2).
# /etc/syslog.conf Configuration file for syslogd.
#
# For more information see syslog.conf(5)
# manpage.
#
auth,authpriv.* /dev/null
*.*;auth,authpriv.none /dev/null
cron.* /dev/null
daemon.* /dev/null
*.=debug;\
auth,authpriv.none;\
news.none;mail.none /dev/null
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none /dev/null
kern.* -/var/log/kern.log
lpr.* -/var/log/lpr.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
uucp.* -/var/log/uucp.log
#
# Emergencies are sent to everybody logged in.
#
*.emerg *
daemon.*;mail.*;\
news.crit;news.err;news.notice;\
*.=debug;*.=info;\
*.=notice;*.=warn |/dev/xconsole
ntpd y otros programas
A pesar de haber hecho todo lo anterior, todavía encontraba con el “vmstat
3” que había operaciones de escritura bastante frecuentes. Me puse a
estudiar casi cada programa en funcionamiento y aquellos que se arrancan con el
crond. Cuál fue mi sorpresa ver que el ntpd generaba ficheros de
informaciones estadísticas.
Aseguraros que el ntpd.conf las siguientes líneas estén comentadas (o
borradas)
para evitar las estadísticas y forzar a que escriba a través del syslogd.
#statsdir /var/log/ntpstats/
#statistics loopstats peerstats clockstats
#filegen loopstats file loopstats type day enable
#filegen peerstats file peerstats type day enable
#filegen clockstats file clockstats type day enable
Otras programas “peligrosos”
Hay además otros programas y daemons que generan salidas y logs
en otros ficheros y que hay que controlar. No puedo
dar una receta general porque depende
de los paquetes que tengáis instalados y la configuración de los mismos. Algunos de los más comunes son:
- exim: el exim también genera logs cada vez que se ejecuta
para revisar si hay trabajos pendientes en la cola. Por defecto se ejecuta cada 15 minutos, yo lo he cambiado a que lo haga cada hora en /etc/crond.d/exim. - cups: escribe periódicamente en /var/spool/certs/.
- modutils: El paquete modutils tiene un script
que se ejecuta periódicamente desde /etc/cron.daily/modutils, /sbin/insmod_ksymoops_clean que genera ficheros de logs en /var/log/ksymoops.
Final
Para acabar, sólo decir que verifiquéis con el vmstat que el sistema no está
escribiendo al fichero. Dicha información está en la columna bo
(blocks out)
Y que tenéis configurado el control de energía como
indico en otro artículo. Con
lo explicado aquí y en el artículo anterior, seguramente lograréis que las
baterías de vuestro iBook aguanten hasta 5 horas, o más…
Me quedan sólo 5 horas y 20 minutos de batería 🙂
Este post ha sido traido de forma automatica desde https://web.archive.org/web/20140625063149/http:/bulma.net/body.phtml?nIdNoticia=1510 por un robot nigromante, si crees que puede mejorarse, por favor, contactanos.