Fasziniert von der Entdeckung eines Browserbenchmarks (Peacekeeper) gleich mal an meinem per ramdisk getunten Firefox 3.6.7 und der aktuellen Chromium-Version aus den Arch Repos (5.0.375.99) ausprobiert. Bittere Niederlage für Firefox:

Firefox vs. Chromium
Kurios bei der Ausführung: Chromium cheatet
Beim Rendering-Test Stufe 1 mit den Kugeln sollen selbige nicht nur an den “Wänden”, sondern auch gegenseitig abprallen, was Firefox korrekt umsetzt. Chromium hingegen scheint sich die Kollisionsabfrage der Kugeln untereinander zu sparen und lässt sie tunneln:

Tunneleffekt
Ich schließe mal böse Absicht aus; wer die gegebenen JavaScript-Algorithmen jetzt korrekt umsetzt und damit “Recht” hat, bleibt zu klären
Update: Hier der Link zum Eintrag im Bugtracker
Meinen Core i7-920 (2.67GHz Standardtakt) hatte ich bis vor kurzem noch per BCLK auf 3.6GHz übertaktet, was bei den 2009er Modellen erfreulicherweise recht zuverlässig funktioniert – ambitioniertere Tuner jagen die Dinger sogar permanent auf über 4GHz hoch. Negativer Nebeneffekt der Sache: Hitze. Der (alte) Core i7 hat mit 130W TDP auf Standardtakt schon eine recht hohe Verlustleistung; übertaktet entwickelt er sich dann endgültig zum Hitzkopf.
Trotz Wasserkühlung knackte mein Exemplar so nicht selten die 70°C – Marke, was mir im Hinblick auf den Sommer einige Sorgen bereitete. Zugegeben, mein System hat in Punkto Kühlungsdesign zwei entscheidende Defizite: 1.) Im Kreislauf hängt neben CPU auch eine GTX 280 als GraKa, die nicht unerheblich zur Hitze beiträgt. 2.) Der Rechner steht eingekeilt zwischen Schreibtisch-Seitenteil, Schrank und Tischplatte, sodass nur nach vorne Luft zu- und wegströmen kann.
Das alles veranlasste mich kürzlich zu einem konkreten Benchmark mit linpack:
Intel(R) LINPACK data
Current date/time: Fri May 7 19:49:37 2010
CPU frequency: 3.610 GHz
Number of CPUs: 8
Number of threads: 8
Parameters are set to:
Number of tests : 1
Number of equations to solve (problem size) : 21000
Leading dimension of array : 21000
Number of trials to run : 100
Data alignment value (in Kbytes) : 4
Maximum memory requested that can be used = 3528424096, at the size = 21000
============= Timing linear equation system solver =================
Size LDA Align. Time(s) GFlops Residual Residual(norm)
21000 21000 4 252.846 24.4215 3.959026e-10 3.178913e-02
21000 21000 4 252.587 24.4466 3.959026e-10 3.178913e-02
21000 21000 4 252.602 24.4451 3.959026e-10 3.178913e-02
21000 21000 4 252.614 24.4439 3.959026e-10 3.178913e-02
21000 21000 4 252.531 24.4520 3.959026e-10 3.178913e-02
21000 21000 4 252.550 24.4501 3.959026e-10 3.178913e-02
21000 21000 4 252.500 24.4549 3.959026e-10 3.178913e-02
21000 21000 4 252.466 24.4583 3.959026e-10 3.178913e-02
21000 21000 4 252.481 24.4568 3.959026e-10 3.178913e-02
21000 21000 4 252.489 24.4560 3.959026e-10 3.178913e-02
21000 21000 4 252.467 24.4582 3.959026e-10 3.178913e-02
21000 21000 4 252.475 24.4574 3.959026e-10 3.178913e-02
21000 21000 4 252.482 24.4567 3.959026e-10 3.178913e-02
21000 21000 4 252.477 24.4573 3.959026e-10 3.178913e-02 |
Intel(R) LINPACK data
Current date/time: Mon May 10 20:33:50 2010
CPU frequency: 2.670 GHz
Number of CPUs: 8
Number of threads: 8
Parameters are set to:
Number of tests : 1
Number of equations to solve (problem size) : 21000
Leading dimension of array : 21000
Number of trials to run : 100
Data alignment value (in Kbytes) : 4
Maximum memory requested that can be used = 3528424096, at the size = 21000
============= Timing linear equation system solver =================
Size LDA Align. Time(s) GFlops Residual Residual(norm)
21000 21000 4 342.691 18.0188 3.959026e-10 3.178913e-02
21000 21000 4 342.756 18.0154 3.959026e-10 3.178913e-02
21000 21000 4 342.765 18.0149 3.959026e-10 3.178913e-02
21000 21000 4 342.770 18.0146 3.959026e-10 3.178913e-02 |
Summa summarum also ~25% Performance-Einbuße, genau der linearer Weise erwartete Wert. Nun zu den Auswirkungen auf die Temperaturen:
|
CPU idle |
CPU Last |
Case |
Wasser |
| OC’ed |
47°C |
75°C |
38°C |
43°C |
| norm. |
42°C |
53°C |
31°C |
33°C |
Alle Werte außer “CPU Last” beziehen sich auf eine Uptime von ca. 4h bei normalem Office-Workload und einer Raumtemperatur von ca. 23°C.
Fazit: 25% weniger (theoretische) CPU-Performance für 30% bessere Temperaturwerte – für den Sommer ein wie ich finde fairer Tausch. Zumal bei den einzigen wirklich Rechenintensiven Anwendungen (Games!) hauptsächlich GPU und weniger CPU belastet wird.
Hier noch die relevanten Settings für beide Modi:
|
BCLK |
Multipl. |
DRAM Freq. |
VCore |
| OC’ed |
180.0MHz |
20.0 |
DDR3-1443MHz |
1.18750V |
| norm. |
133.0MHz |
20.0 |
–* |
–* |
Die *-Werte werden noch nachgeliefert. Am VCore könnte man sicher noch etwas Undervolting betreiben, hier heißt das Ziel <1.0V
Ja, das vom Paket iptables mitgebrachte init-script leistet wunderbare Dienste. Nein, es besteht kein akuter Grund, eine Alternative zu schreiben…
Einen Nachteil hat es schon: die Konfiguration wird in einem nicht kommentierbaren Format hinterlegt, was bei mir in letzter Zeit ständig zur Frage “WTF hat doch gleich dieser Port da verloren? Was lässt die rule da nochmal durch?” geführt hat.
<bash-addicted>Yep, eindeutige Notwenigkeit für ein selbst gehämmertes, kommentierbares Script!</bash-addicted> Wie in guten alten Debian-Zeiten übernimmt jetzt also bei mir ein einfaches, aber für den Job völlig ausreichendes init-script den Job. Wer es verwenden mag:
#!/bin/bash
#
# easy-to-edit iptables init script for Arch
# 2010 by Alexander Koch
#
# TCP services: ssh
SERVICES_TCP=( 22 )
# UDP services:
SERVICES_UDP=( )
. /etc/rc.conf
. /etc/rc.d/functions
if [ -z "$IPTABLES" ]; then
IPTABLES="/usr/sbin/iptables"
fi
if ! [ -x "$IPTABLES" ]; then
echo "unable to execute iptables binary: $IPTABLES"
exit 1
fi
function reset_tables() {
ERR=0
$IPTABLES -F || ERR=1
$IPTABLES -X || ERR=1
$IPTABLES -P INPUT ACCEPT || ERR=1
$IPTABLES -P OUTPUT ACCEPT || ERR=1
if [ $IPTABLES_FORWARD -eq 1 ]; then
$IPTABLES -P FORWARD ACCEPT || ERR=1
echo 1 >/proc/sys/net/ipv4/ip_forward || ERR=1
else
$IPTABLES -P FORWARD DROP || ERR=1
echo 0 >/proc/sys/net/ipv4/ip_forward || ERR=1
fi
return $ERR
}
function setup_tables() {
ERR=0
# setup prevention chain against common attacks
$IPTABLES -N preventions || ERR=1
$IPTABLES -A preventions -f -j DROP || ERR=1 # frags
$IPTABLES -A preventions -p tcp --tcp-flags ALL ALL -j DROP || ERR=1 # XMAS
$IPTABLES -A preventions -p tcp --tcp-flags ALL NONE -j DROP || ERR=1 # null
# setup services chain
$IPTABLES -N services || ERR=1
for PORT in ${SERVICES_TCP[@]}; do
$IPTABLES -A services -p tcp --dport $PORT -j ACCEPT || ERR=1
done
for PORT in ${SERVICES_UDP[@]}; do
$IPTABLES -A services -p udp --dport $PORT -j ACCEPT || ERR=1
done
# allow incoming ping requests
iptables -A services -p icmp --icmp-type echo-request -j ACCEPT || ERR=1
# setup main chains
$IPTABLES -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT || ERR=1
$IPTABLES -A INPUT -i lo -j ACCEPT || ERR=1
$IPTABLES -A INPUT -j preventions || ERR=1
$IPTABLES -A INPUT -m state --state NEW -j services || ERR=1
$IPTABLES -A INPUT -p tcp -j REJECT --reject-with tcp-reset || ERR=1
$IPTABLES -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable || ERR=1
$IPTABLES -P INPUT DROP || ERR=1
return $ERR
}
case "$1" in
start)
stat_busy "Loading IP Tables"
reset_tables
if setup_tables; then
stat_fail
exit 1
else
add_daemon miptables
stat_done
fi
;;
stop)
stat_busy "Flushing IP Tables"
if reset_tables; then
rm_daemon miptables
stat_done
else
stat_fail
exit 1
fi
;;
restart)
if ! ck_daemon miptables; then
rm_daemon miptables
fi
$0 start
exit $?
;;
*)
echo "usage: $0 {start|stop|restart}"
;;
esac
exit 0 |
Gefiltert werden nur eingehende Pakete; related und established Pakete werden ebenfalls ohne weitere Beachtung durchgelassen, ebenso alles über loopback. Für neue Pakete werden zuerst ein paar Vulnerability-Checks durchgeführt. Nach Außen wird ein Verhalten wie ohne iptables emuliert (z.B. REJECTs mit tcp-reset).
Bugreports wie immer willkommen, und Benutzung auf eigene Gefahr!

XFCE mit AWN statt xfce4-panel
Dieser animierte Blogpost beschreibt meinen Abend perfekt

Im Zuge meines Wechsels vom Notebook auf eine Workstation als Hauptrechner bin ich wieder auf KDE umgestiegen. Dabei entbrennt natürlich auch gleich mal wieder der übliche Toolkitwechsel und damit verbundene “iiieh, GTK!”-Wahn ^^
Für Mails bin ich wieder bei KMail, als Browser und lange gesuchte, mittlerweile ernstzunehmende Firefox-Alternative teste ich Arora.

KDE 4.4 auf Thor
Auch mich hat der DeNIC-Ausfall am Mittwoch ziemlich geschickt

Bleibt nur zu hoffen, dass die Provider ihre DNS-Caches flushen ^^
Im Arch Bootscript /etc/rc.sysinit werden u.A. die per /etc/crypttab definierten verschlüsselten Volumes geöffnet und gemountet – sequentiell. Da ein luksOpen-Aufruf generell schon recht lange dauert, kommen bei mehreren solcher Volumes schnell einige Sekunden zusammen.
Auf einer Kiste mit fünf LUKS-Volumes kam mir die Idee, die entsprechende Funktion mal per “&” zu forken und das Ganze so ein wenig zu parallelisieren.
In wie fern das jetzt tatsächlich im messbaren Bereich liegt, sei mal dahingestellt. Ich bilde mir jedenfalls erfolgreich einen Geschwindigkeits-zuwachs ein, und da der Patch meines Erachtens recht unkritisch ist, bleibe ich dabei
Wer es ausprobieren mag:
--- /etc/rc.sysinit.backup 2010-01-24 15:35:12.000000000 +0100
+++ /etc/rc.sysinit 2010-05-04 18:57:53.380890577 +0200
@@ -149,7 +149,7 @@
cpass="$3"
shift 3
copts="$*"
- stat_append "${cname}.."
+ #stat_append "${cname}.."
# For some fun reason, the parameter ordering varies for
# LUKS and non-LUKS devices. Joy.
if [ "${cpass}" = "SWAP" ]; then
@@ -188,15 +188,16 @@
fi
if [ $? -ne 0 ]; then
csfailed=1
- stat_append "failed "
+ stat_append "${cname} failed "
else
- stat_append "ok "
+ stat_append "${cname} ok "
fi
fi
}
while read line; do
- eval do_crypt "$line"
+ eval do_crypt "$line" &
done </etc/crypttab
+ wait
if [ $csfailed -eq 0 ]; then
stat_done
else |
In meinem Arch Ramdisk-Script <1.4 hatte sich ein dämlicher Bug eingeschlichen: bei sämtlichen rsync-Aufrufen fehlte das --delete.
Das bewirkt z.B. bei Verwendung mit Firefox, dass der Cache nie geleert wird und (streng) monoton wächst – unschön.
Hier die gefixte Version
#!/bin/sh
#
# Manages outsourcing of specified directories into memory on bootup and
# takes care of synchronization/backup on system shutdown.
#
# Version 1.4, 2010-04-26, by Alexander Koch
#
# includes
. /etc/rc.conf
. /etc/rc.d/functions
# configuration (syntax is: [persist. storage]:[mountpoint]:[mount options])
DISKS=('/home/alex/.ramdisks/_mozilla:/home/alex/.mozilla:size=100M,uid=1000,gid=100' \
'empty:/home/alex/.adobe:size=10M,uid=1000,gid=100' \
'empty:/home/alex/.macromedia:size=10M,uid=1000,gid=100')
# helper functions
function activate_rd() {
[ -d "$1" ] || [ "$1" = "empty" ] || return 1
[ -d "$2" ] || return 1
mount | grep "$2" &>/dev/null && return 1
MNT="mount -t tmpfs"
[ -z "$3" ] || MNT="$MNT -o $3"
$MNT none "$2"
[ $? -gt 0 ] && return 1
if [ "$1" != "empty" ]; then
for D in $1/.* $1/*; do
[ "$(basename "$D")" == "." ] && continue
[ "$(basename "$D")" == ".." ] && continue
rsync -axq "$D" "$2" &>/dev/null
if [ $? -gt 0 ]; then
umount "$2"
return 1
fi
done
fi
return 0
}
function backup_rd() {
mount | grep "$1" &>/dev/null || return 0
if [ "$2" != "empty" ]; then
for D in $1/.* $1/*; do
[ "$(basename "$D")" == "." ] && continue
[ "$(basename "$D")" == ".." ] && continue
rsync -axq --delete "$D" "$2" &>/dev/null
if [ $? -gt 0 ]; then
tar -cf "/root/$(basename "$2")-failed.tar" "$1"
return 1
fi
done
fi
umount "$1" || return 1
return 0
}
# main logic
case $1 in
start)
stat_busy "Mounting ramdisks"
error=0
for M in ${DISKS[@]}; do
FROM="$(echo "$M" | cut -d ':' -f 1)"
TO="$(echo "$M" | cut -d ':' -f 2)"
OPTS="$(echo "$M" | cut -d ':' -f 3)"
activate_rd "$FROM" "$TO" "$OPTS" || error=1
done
if [ $error -eq 0 ]; then
add_daemon ramdisks
stat_done
else
stat_fail
exit 1
fi
;;
stop)
stat_busy "Saving ramdisks"
error=0
for M in ${DISKS[@]}; do
FROM="$(echo "$M" | cut -d ':' -f 2)"
TO="$(echo "$M" | cut -d ':' -f 1)"
backup_rd "$FROM" "$TO" || error=1
done
if [ $error -eq 0 ]; then
rm_daemon ramdisks
stat_done
else
stat_fail
echo -n "WARNING: failed to save ramdisk(s), tried to make "
echo "backup(s) under /root."
echo "Hit enter to proceed shutdown."
read DUMMY
exit 1
fi
;;
restart)
if ! ck_daemon ramdisks; then
"$0" stop && sleep 3
fi
"$0" start
;;
*)
echo "usage: $0 {start|stop|restart}"
;;
esac
exit 0 |
Tag 1
Interessanter Zustand: man wartet ständig auf den morgendlichen Kaffee, der die verbliebenen Dunstwolken vom Schlaf wegreißt, und einen im Wachzustand ankommen lässt. Erschreckender Weise kommt stattdessen leichtes Kopfweh auf – eine von vielen “Aussteigern” berichtete Entzugserscheinung.
Garnicht so einfach, sich vollständig von Coffein fernzuhalten: neben Kaffee verkneife ich mir nun auch: Eistee, Multivitamin-Drinks (gibts in der Mensa auch mit Coffein und Guarana), mein Lieblingskaugummi, [Biermischgetränk mit dem X] und Cappuccino-Müsli. *schnief*
Tag 2
<jammer>War ja irgendwie klar, dass ausgerechnet diese Woche auf dem Campus andauernd gratis Energy-Drinks verteilt werden… Ach und könnte bitte jemand das anhaltende Kopfweh abstellen? </jammer>
Tag 8 – Ergebnisse
Tja, nun sind die sieben Tage rum – ich habe sogar noch heute drangehängt. Die Ergebnisse weichen stark von meinen ursprünglichen Erwartungen ab: weder am Schlafverhalten noch am körperlichen Wohlbefinden hat sich eine signifikante Veränderung gezeigt, und ruhiger bin ich auch nicht gewesen. Aus der anderen Seite hatte ich (abgesehen von Kopfschmerzen am ersten Tag) keine der erwarteten Nebenwirkungen, die Kaffee-Junkies auf Entzug sonst beschreiben.
Ich nenne es ursprüngliche Erwartungen, weil ich mittlerweile erfahren habe, dass eine Woche bei Weitem nicht ausreicht, um eine völlige Umstellung in der Physis zu erzielen – es läuft also alles viel langsamer mit der Umstellung, als ich mir vorgestellt hatte.
Fazit: Die Woche war weder blanker Horror, noch ultimativ meditativ; ich werde in Zukunft, wenn mir mal wieder danach sein sollte, gern wieder eine solche Pause einlegen. Jetzt freue ich mich aber erst mal tierisch auf meinen Cappuccino morgen früh