Matlab

Table of Contents

Installation

Vorbereitung

Auf einem AFS-Server muß das Ziel-Directory für die Installation

VERSION="2017b"
/usr/local/sbin/afs_make_opt matlab $VERSION $((16*1024))

Nach dem Erzeugen des Directories für die Installation durch den Administrator wird der Softwareserver der TU gemountet und die Daten auf den lokalen Arbeitsplatz - nicht auf einen Server, dort fehlt Java - kopiert:

VERSION="2017b"
TMPDIR=`mktemp -d /var/tmp/matlab.XXXXXX`
#sudo mount -t nfs cdnfs:/exports /mnt/
#cp /mnt/Software/Mathworks/Matlab/Matlab-${VERSION}*.iso  ${TMPDIR}
#cp /mnt/Software/Mathworks/Matlab/File_Installation_Key*  ${TMPDIR}
#cp /mnt/Software/Mathworks/Matlab/inform.txt              ${TMPDIR}
#cp /mnt/Software/Mathworks/Matlab/license.dat             ${TMPDIR}
#sudo umount /mnt

Der Downoad via NFS von cdnfs funktioniert nicht mehr für aktuelle Versionen; das muß nun per Web-Browser von https://swsrv.tugraz.at/ geholt werden. Von dort muß auch das Lizenzfile und der File Installation Key geholt werden.

Danach muss das Image auf Übertragungsfehler geprüft und per loopback device gemounted.

Das Ziel-Directory für die Installation ist wie immer /afs/itp.tugraz.at/opt/matlab/${VERSION}/. Die weitere Installation ist jedesmal/gelegentlich ein bisschen anders :)

Matlab-Installer

cd $TMPDIR
#md5sum  -c Matlab-${VERSION}-Unix---.md5   # waer schoen, Checksummen gibt es beim ZID nicht
#sha1sum -c Matlab-${VERSION}-Unix---.sha1  # waer schoen, Checksummen gibt es beim ZID nicht
mkdir ./mnt
sudo mount -o loop Matlab-${VERSION}-LINUX64-EN-1of2.iso  ./mnt/
./mnt/install & 

# die grafische Installationsroutine beginnt
# fordert nach einiger Zeit zum Medien-Wechsel auf

sudo umount ./mnt/
sudo mount -o loop Matlab-${VERSION}-LINUX64-EN-2of2.iso  ./mnt/ # graf. Installation fortsetzen

sudo umount ./mnt/ && rmdir ./mnt/
sudo chown -R $USER ./Matlab

notwendige Anpassungen nach der Installation

Hilfe im HTML-Format

Dieser Schritt ist anscheinend nicht mehr notwendig ab Matlab Version R2012b.

Die HTML-Hilfe im Matlab wird nicht nicht mehr automatisch ausgepackt, sondern ist in JAR-Files (zip) verpackt. Ausgepackt wird durch:

find /afs/.itp.tugraz.at/opt/matlab/<...>/help/ \
     -name help.jar \
     -execdir unzip -o ./help.jar \;

Für den Webserver allein (nicht Wiki-Seiten und MatlabTutor) reicht folgendes Skript:

HELPDIR=/afs/.itp.tugraz.at/opt/matlab/<...>/help/
for WEBFILE in $(find $HELPDIR -name "*.html")
do
    echo $WEBFILE
    ed $WEBFILE <<< "1,\$s/'file:../'../g\nw"
done

Damit der Zugriff auf unseren Matlab-Bereich am Webserver und die URLs aus dem MatlabTutor funktionieren, muß am Webserver der Alias

Alias /matlab/ /afs/itp.tugraz.at/opt/matlab/R2014b/help/

in der Datei /etc/apache2/sites-enabled/010-krb-ssl gesetzt werden. Die Hilfe ist dann unter https://itp.tugraz.at/matlab/matlab/ zu finden.

In der Batch-Datei ~/bin/matlab-hilfe.sh sind diese Schritte zusammengefasst.

Unterstützung für den Matlab-Tutor

Emacs-Link

freischalten von Emacs-Link:

cd /afs/.itp.tugraz.at/opt/matlab/<...>/java/extern/EmacsLink
mv info.xml.sample info.xml
  • kopieren der EmacsLisp-Dateien einer älteren Installation nach ./lisp/
  • prüfen ob /etc/emacs/site-start.el noch mit den Informationen in ./install.html übereinstimmt

Lokaler Cache

Matlab startet sehr langsam; wir haben ursprünglich vermutet, daß es wegen der Größe der Installation und den vielen kleinen Dateien zum Einbruch der Performance im AFS kommt. Daher wird die jeweils aktuelle Matlab-Version über die Configuration Engine nach /opt/matlab/ kopiert. Mit der Version 2014b bringt das aber nicht viel.

Aufräumen danach

rm -rf /var/tmp/matlab.*

Issues

2016-01-30 - Version 2016b

TODO Editor startet mit Emacs-Keybinding

Damit sind viele jüngere Benutzer deutlich überfordert. Default sollte Windows sein.

Stellt man das mit der Hand unter “Preferences–> Keyboard –> Shortcuts” um oder gibt es da noch einen weiteren Eintrag?

Wie automatisiert ändern, ohne bestehende Accounts unangenehm zu überraschen?

  • /etc/skel/.matlab/R2016b/matlab.prf mit der Zeile “EditorEmacsTab=Bfalse” vorbelegen
  • /etc/skel/startup.m wäre schon vorhanden und unabhängig von der Version, wird aber vermutlich nicht funktionieren

2016-04-18 - Version 2016a

Derzeit im Testbetrieb - default für Benutzer bleibt vorläufig 2014b.

2015-03-13 - Version 2015a

2014-12-19 - Version 2014b

langsamer Start - Lizenzmanager?

[2015-04-20 Mon] wurde nachmittags festgestellt, daß Matlab wesentlich langsamer startet als vor den Osterferien. Die Ladezeiten sind stark unterschiedlich und schwankten zwischen 30 und 300 Sekunden. X11 forwarding über SSH spielt diesmal anscheinend kein große Rolle.

Vermutung: instabiles Netz; allerdings sehen wir lokal keine gedropten IP-Pakete. Vorerst wird nur die lokale Kopie und ohne Homedirectory im AFS getestet:

# base working directory
TEMP="/tmp"

# clean ENVIRONMENT from references to AFS
unset KDEDIRS 
unset TEXMFHOME 
unset TEXMFLOCAL
unset XDG_CONFIG_DIRS 
unset XDG_DATA_DIRS 
export PATH=/usr/local/bin:/usr/bin:/bin
env | grep afs     # this should give no output

# fake a fast home directory
mkdir -p $TEMP/$USER/Documents/MATLAB
rm -rf   $TEMP/$USER/.matlab/
export HOME=$TEMP/$USER

 # create a trace
strace -f -ttt -o $TEMP/matlab.trace matlab -nojvm -r quit
wc -l $TEMP/matlab.trace
awk '{print $2}' $TEMP/matlab.trace | graph -a -T ps --page-size a4 > $TEMP/plot.ps
gv $TEMP/plot.ps

Eines der Log-Files liegt auf https://itp.tugraz.at/~ahi/privat/matlab.trace; die interessanten Teile daraus beginnen beim Timestamp “1429782730.606774” Da stehen dann mehrfach Dinge wie

17198 1429782934.536975 socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
17198 1429782934.536998 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
17198 1429782934.537017 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
17198 1429782934.537035 fcntl(3, F_SETFD, FD_CLOEXEC) = 0
17198 1429782934.537053 connect(3, {sa_family=AF_INET, sin_port=htons(27000), sin_addr=inet_addr("129.27.43.21")}, 16) = -1 EINPROGRESS (Operation now in progress)
17198 1429782934.537109 select(4, NULL, [3], NULL, {10, 0} <unfinished ...>
17245 1429782936.550469 <... futex resumed> ) = -1 ETIMEDOUT (Connection timed out)
17245 1429782936.550495 futex(0x20354c0, FUTEX_WAKE_PRIVATE, 1) = 0
17245 1429782936.550530 futex(0x20354ec, FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME, 27, {1429782951, 550521000}, ffffffff <unfinished ...>
17198 1429782944.547183 <... select resumed> ) = 0 (Timeout)
17198 1429782944.547210 shutdown(3, 2 /* send and receive */) = 0
17198 1429782944.547232 close(3)        = 0

und erst beim Timestamp “1429782971.677512” gelingt es eine Verbindung aufzubauen und eine Lizenz zu bekommen:

17198 1429782971.677457 socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 3
17198 1429782971.677472 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR)
17198 1429782971.677486 fcntl(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
17198 1429782971.677499 fcntl(3, F_SETFD, FD_CLOEXEC) = 0
17198 1429782971.677512 connect(3, {sa_family=AF_INET, sin_port=htons(27000), sin_addr=inet_addr("129.27.43.21")}, 16) = -1 EINPROGRESS (Operation now in progress)
17198 1429782971.677546 select(4, NULL, [3], NULL, {10, 0}) = 1 (out [3], left {9, 999233})
17198 1429782971.678332 getsockopt(3, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
17198 1429782971.678351 sendto(3, "h\34513ahi\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0faepop6"..., 147, 0, NULL, 0) = 147
17198 1429782971.678376 select(4, [3], NULL, NULL, {10, 0}) = 1 (in [3], left {9, 999413})
17198 1429782971.678983 select(4, [3], NULL, NULL, {10, 0}) = 1 (in [3], left {9, 999999})
17198 1429782971.679002 recvfrom(3, "/I\10+\0\250\0?\0\0\0\0\0\0\0\0\0\0\0\0", 20, 0, NULL, NULL) = 20
17198 1429782971.679020 recvfrom(3, "??\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 148, 0, NULL, NULL) = 148
17198 1429782971.679041 shutdown(3, 2 /* send and receive */) = 0
17198 1429782971.679059 close(3)        = 0

Insgesamt sieht man mit grep 129.27.43. matlab.trace | wc -l 57 Verbindungsversuche; dabei werden in dem Fall ungefähr 240 Sekunden benötigt.

langsamer Start via SSH

Der Start von Matlab benötigt sehr lange (10 bis 180 Sekunden); anscheinend wird auf allen verfügbaren Speichermedien nach Dateien gesucht. Jedenfalls sind von der lokalen Harddisk Geräusche zu hören, während Matlab startet - insbesondere zwischen Auftauchen der Versionsangabe und dem Erscheinen des Eingabe-Prompts.

Das Phänomen ist wesentlich stärker zu sehen, wenn man sich mit SSH auf einen anderne Computer verbunden hat. Auch dann sind die Geräusche auf der lokalen Platte zu hören, was an sich deutlich auf /temp/ (MooseFS) hinweist.

Abhilfe ist möglich mit der Option -nojvm; die Option -nodesktop reicht leider nicht - eventuell sollte man noch -nodisplay versuchen. Ebenso ist es nicht ausreichend, den Startfolder einzuschränken:

Wie verfolgen wir das weiter?

strace -f -e trace=open -tt -o matlab.trace matlab -nodesktop -singleCompThread -nosplash -r 'pwd, quit'
grep --count /afs  matlab.trace
grep --count /temp matlab.trace

Anscheinend wird mehrfach das Homedirectory gescannt; allerdings nicht rekursiv, daher sollten da wohl keine besonders großen Verzögerungen enstehen. Auffällig ist recht ausgiebiges Herumrödeln auf ~/.felix/osgi-cacheXXXXXXX.

Wenn man auf dem lokalen Rechner mit dstat --disk --io --top-io --top-bio die Disk-Zugriffe verfolgt, während remote Matlab gestartet wird (time matlab -nodesktop -singleCompThread -nosplash -r quit), sieht man das ssh während dieser Zeit mit ~150 kByte/s permanent Daten überträgt.

Wenn man sich auf einen zweiten Rechner weiterverbindet, bricht die Datenrate auf typisch etwa 100 kByte/s ein; der Start dauert entsprechend etwas länger.

Der intensive Verkehr über SSH legt die Vermutung nahe, daß es sich dabei um ein Problem mit X11 forwarding handelt. Zum Test wurde folgende Routine verwendet.

REMOTE=faepop04.tu-graz.ac.at
LIMIT=60

# ssh root@$REMOTE "echo 3 > /proc/sys/vm/drop_caches"

for ((a=1; a <= LIMIT ; a++))
do
    echo "!!! Run number $a !!!"
    /usr/bin/time --format "%e" --output=time.matlab.$(date -I).X11.off --append ssh -x $REMOTE "matlab -nodesktop -singleCompThread -nosplash -r quit >/dev/null"
    /usr/bin/time --format "%e" --output=time.matlab.$(date -I).X11.on  --append ssh -X $REMOTE "matlab -nodesktop -singleCompThread -nosplash -r quit >/dev/null"
    /usr/bin/time --format "%e" --output=time.matlab.$(date -I).X11.AFS --append ssh -x $REMOTE "/afs/itp.tugraz.at/opt/matlab/R2015a/bin/matlab -nodesktop -singleCompThread -nosplash -r quit >/dev/null"
    # tail -n 1 time.matlab.X11.off time.matlab.X11.on
done

Ausgewertet wurde mit

graph -T ps  -C -a --y-limits 0 --y-label "Startzeit [s]" --page-size "a4" time.matlab.*.X11.on time.matlab.*.X11.off time.matlab.*.X11.AFS > ./pics/time.matlab.X11.ps
graph -T png -C -a --y-limits 0 --y-label "Startzeit [s]"                  time.matlab.*.X11.on time.matlab.*.X11.off time.matlab.*.X11.AFS > ./pics/time.matlab.X11.png
# gv ./pics/time.matlab.X11.ps

time.matlab.X11.png

In der grünen Kurve sind die einzelnen Laufzeiten der Runs ohne und in der roten Kurve mit X11 forwarding gezeichnet; blau sind die Startzeiten der neueren Version R2015a direkt aus dem AFS (ohne X11 forwarding): Der einzelne erhöhte Peak bei X=0 in der grünen Kurve wurde bei einer Messung aufgenommen, nachdem der Festplatten-Cache auf der entfernen Maschine durch echo 3 > /proc/sys/vm/drop_caches gelöscht wurde.

Info

2011-12-07 - Version 2011b

“opengl software” wird in $MATLBAROOT/toolbox/local/matlabrc.m untergebracht.

2010-10-20 - Version 2010b

“opengl software” wird in $MATLBAROOT/toolbox/local/matlabrc.m untergebracht.

2010-02-04 - Version 2009b

bis jetzt keine :)

2009-12-15 - Version 2009a

kann nicht mehr mit CommonUnixPrintingSystem drucken

2009-01-12 - Version 2008b

wie 2007b

2008-01-23 - Version R2007b

Gelegentlich stürzt der Grafik-Treiber des X windowing systems ab, wenn dreidimensionale Grafiken im Plot-Fenster manipuliert werden. Der Fehler ist bei MathWorks bekannt; derzeit gibt es keine direkte Lösung. Als Work-around stellt man openGL auf “software”:

>> opengl software

Dieses Kommando könnte man auch in der Datei ~/startup.m unterbringen.

(http://itp.tugraz.at/NEWS/ITP/2008-01-23_Matlab:_neue_Version_R2007b.html)

2004-01-29 - Version 6.5.1

Für die Lauffähigkeit der kompilierten Matlabprogramme (Vers. 6.5.1) ist es notwendig, einen Link von /afs/itp.tugraz.at/opt/matlab/6.5.1/extern/lib/glnx86/bin auf /afs/itp.tugraz.at/opt/matlab/6.5.1/toolbox/matlab anzulegen.

Alternative

Author: Andreas Hirczy

Created: 2018-02-19 Mon 15:50

Validate XHTML 1.0