programma lento su freebsd

davide cittaro daweonline a gmail.com
Gio 4 Gen 2007 17:31:59 CET


Ciao a tutti e scusate fin d'ora per le "ingenuita'" che seguiranno.
Ho questo programma, hgTracks (che fa parte della suite UCSC Genome
Browser), che mi sono compilato sotto freebsd (5.4) per girare su un
nostro server che fa da mirror a quello californiano. Compila,
funziona ed e' tutto bello.
Purtroppo ci siamo accorti, soprattutto quando ci sono grosse moli di
dati da analizzare, che va dannatamente lento. Ho pensato fosse a
causa dell'hardware (singolo Xeon 2.4 e 4 Gb RAM) o del fatto che gira
in una jail su una macchina con altre 4 jail mediamente cariche. Me lo
sono installato sotto un piu' recente freebsd 6.1 su macchina
pressoche' vuota ma non ho dei miglioramenti.
Il sito originale fa girare tutto in linux allora mi sono messo tutto
su una macchina linux e, accidenti, tutto va una scheggia. Per
intenderci, 3 minuti contro 50...
Da quasi profano di programmazione ho chiesto ad un collega scafato
che mi ha consigliato di sostituire tutte le chiamate getc/putc con le
versioni _unlocked, la cosa e' sicura dal momento che hgTracks non e'
multithread.
*Ovviamente* non ho avuto nessun miglioramento. In questo momento lo
sto testando sotto OS X e mi pare proprio di stare in una situazione
uguale (lento...).
Ora, qualcuno ha qualche idea su come/cosa controllare (oltre ai getc
e simili...) per sperare di migliorare le performance?
Giusto per la cronaca questi sono i time sotto linux e freebsd:

Linux
        Command being timed: "./hgTracks db=hg18 position=chr22"
        User time (seconds): 4.89
        System time (seconds): 1.54
        Percent of CPU this job got: 4%
        Elapsed (wall clock) time (h:mm:ss or m:ss): 2:13.23
        Average shared text size (kbytes): 0
        Average unshared data size (kbytes): 0
        Average stack size (kbytes): 0
        Average total size (kbytes): 0
        Maximum resident set size (kbytes): 0
        Average resident set size (kbytes): 0
        Major (requiring I/O) page faults: 0
        Minor (reclaiming a frame) page faults: 36704
        Voluntary context switches: 44332
        Involuntary context switches: 7
        Swaps: 0
        File system inputs: 0
        File system outputs: 0
        Socket messages sent: 0
        Socket messages received: 0
        Signals delivered: 0
        Page size (bytes): 4096
        Exit status: 0

FreeBSD
2923.84 real      1988.24 user         8.18 sys
    157364  maximum resident set size
      1279  average shared memory size
     16163  average unshared data size
       127  average unshared stack size
     39606  page reclaims
         0  page faults
         0  swaps
       362  block input operations
         1  block output operations
     40625  messages sent
     47244  messages received
         0  signals received
     46067  voluntary context switches
    265372  involuntary context switches

Non so se significhi qualcosa e se possa essere un buon punto di
partenza, ma sotto FreeBSD c'e' un numero spaventosamente alto di
icsw.
Grazie a chi vorra' aiutare questo povero ricercatore un po' tapino.

d


Maggiori informazioni sulla lista devel