PDA

View Full Version : ricompilare GLIBC per incrementare lo stack size...


AnonimoVeneziano
21-07-2003, 18:51
Ciao a tutti e soprattutto a ilsensine :D

Allora, ho problemi con programmi che usano i POSIX THREADS. Cioè , a quanto sembra ho compilato la mia versione di GLIBC (2.3.2) con uno stack size per i PTHREADS di 2MB ( 2052kb per intenderci :D ) e a quanto sembra Winex ha problemi per esempio. Mi hanno consigliato di ricompilare GLIBC per incrementare lo stack size , ma sinceramente non so che fare , e anke il pensiero che fallire la compilazione delle GLIBC mi cancellerebbe il mio bel sistemino definitivamente mi fa un po' paura :D

Insomma , che flag , variabile devo impostare per incrementare lo stack size durante la compilazione delle GLIBC? (possibilmente qualcosa di sicuro , perchè non ho voglia di compilare GLIBC 2 volte,dato che la compilazione + check (che faccio per gagia :D ) non dura proprio 2 minuti :D )

Ciao e grazie

mjordan
21-07-2003, 19:27
-- con uno stack size per i PTHREADS di 2MB ( 2052kb per intenderci )

2 Mb sono 2048 kb ...

Comunque non esiste un parametro da passare per modificare quello stack di cui parli.
Anche se chi ti ha consigliato ha detto una minkiata, forse intendeva di modificare lo stack del programma con cui hai problemi che usa i POSIX Threads, e non la libreria direttamente... Cerca nei sorgenti la funzione pthread_attr_setstacksize()
e modificala di conseguenza...

EDIT:
Il parametro da modificare è il secondo... Quando modifichi, cerca di assicurarti che sia multiplo di 1 Mb (1024 Kb), pertanto usa il seguente formato:

1024 per 1 Mb
2 * 1024 per 2 Mb
3 * 1024 per 3 Mb

e così via....

VICIUS
21-07-2003, 19:33
Originariamente inviato da AnonimoVeneziano
Ciao a tutti e soprattutto a ilsensine :D

Allora, ho problemi con programmi che usano i POSIX THREADS. Cioè , a quanto sembra ho compilato la mia versione di GLIBC (2.3.2) con uno stack size per i PTHREADS di 2MB ( 2052kb per intenderci :D ) e a quanto sembra Winex ha problemi per esempio. Mi hanno consigliato di ricompilare GLIBC per incrementare lo stack size , ma sinceramente non so che fare , e anke il pensiero che fallire la compilazione delle GLIBC mi cancellerebbe il mio bel sistemino definitivamente mi fa un po' paura :D

Insomma , che flag , variabile devo impostare per incrementare lo stack size durante la compilazione delle GLIBC? (possibilmente qualcosa di sicuro , perchè non ho voglia di compilare GLIBC 2 volte,dato che la compilazione + check (che faccio per gagia :D ) non dura proprio 2 minuti :D )

Ciao e grazie

ricompilare le glibc non è una cosa da tutti i giorni. prima di farlo fai un bel backup di quelle che hai gia. copiando da qualche parte la cartella /lib e il suo contenuto.

dovresti avere ancora /static dalla compilazione di lfs cosi puoi usare quelli in caso di macello :)

in uno dei file dentro a LinuxPthreads dovrebbe esserci #define STACK_SIZE 2048 o qualcosa del genere prova a modificare quello. per trovare il file dai un bel grep 'STACK_SIZE' -R * e controlla dove è usato.

approposito non mi assumo nessuna responsabilita di quello che ho detto :P

ciao ;)

AnonimoVeneziano
21-07-2003, 19:50
Originariamente inviato da mjordan
-- con uno stack size per i PTHREADS di 2MB ( 2052kb per intenderci )

2 Mb sono 2048 kb ...

Comunque non esiste un parametro da passare per modificare quello stack di cui parli.
Anche se chi ti ha consigliato ha detto una minkiata, forse intendeva di modificare lo stack del programma con cui hai problemi che usa i POSIX Threads, e non la libreria direttamente... Cerca nei sorgenti la funzione pthread_attr_setstacksize()
e modificala di conseguenza...

EDIT:
Il parametro da modificare è il secondo... Quando modifichi, cerca di assicurarti che sia multiplo di 1 Mb (1024 Kb), pertanto usa il seguente formato:

1024 per 1 Mb
2 * 1024 per 2 Mb
3 * 1024 per 3 Mb

e così via....


Lo so che 2 MB sono 2048 , ma ho scritto 2052 per precisare la dimensione precisa , infatti guarda il messaggio di errore :
Your system requires the use of pthreads but the maximum system allowed stack size of 2052 kB may be too small

mi è sembrato giusto essere il + preciso possibile.

Comunque il messaggio di errore è chiaro , dice che lo stack è troppo piccolo, quindi ci deve essere un modo per renderlo + grande.

Ciao

AnonimoVeneziano
21-07-2003, 19:53
Originariamente inviato da VICIUS
ricompilare le glibc non è una cosa da tutti i giorni. prima di farlo fai un bel backup di quelle che hai gia. copiando da qualche parte la cartella /lib e il suo contenuto.

dovresti avere ancora /static dalla compilazione di lfs cosi puoi usare quelli in caso di macello :)

in uno dei file dentro a LinuxPthreads dovrebbe esserci #define STACK_SIZE 2048 o qualcosa del genere prova a modificare quello. per trovare il file dai un bel grep 'STACK_SIZE' -R * e controlla dove è usato.

approposito non mi assumo nessuna responsabilita di quello che ho detto :P

ciao ;)

Si , /stage ce l'ho ankora , e lo so che la ricompilazione di Glibc è potenzialmente lenitiva :D , ma se c'è un problema bisogna risolverlo.

Proverò a vedere quello che mi hai consigliato. Ma mi stava venendo in mente un idea, quella di scaricare l'ebuild di GLIBC di gentoo e controllare i parametri impostati da quello , dato che su gentoo non avevo questo problema. Potrebbe essere possibile ?

Il consiglio su internet parlava anke di un certo FLOATING_STACK , qualcuno ne sa qualcosa?

Ciao

mjordan
21-07-2003, 20:24
Ok...
Dentro linuxthreads/descr.h hai la costante STACK_SIZE. Modifica quella.
Bada che il numero che ti identificherà la dimensione dello stack dev'essere una potenza di 2 e un multiplo di PAGE_SIZE.
La dimensione di PAGE_SIZE è calcolata mediante la funzione sysconf().
Per determinare la dimensione sul tuo sistema, usa il seguente programma:

page.c



/* Calcola la dimensione di PAGE_SIZE sul sistema in uso. */
#include <stdio.h>
#include <unistd.h>

int
main(void)
{
printf("%d\n", sysconf(_SC_PAGE_SIZE));

return 0;
}



Compila con gcc -o page page.c
Dovresti ottenere la dimensione in byte che devi usare per calcolare la nuova dimensione di STACK_SIZE dentro descr.h

Ciao.

AnonimoVeneziano
21-07-2003, 20:43
grazie , appena ho l' occasione provo :)

Ciao

mjordan
21-07-2003, 20:46
Originariamente inviato da AnonimoVeneziano
grazie , appena ho l' occasione provo :)

Ciao

De nada chico. :-)

AnonimoVeneziano
21-07-2003, 20:53
Domanda :

Io so che GLIBC 2.3.2 supporta l'add-on NPTL (Native Posix Threads Library ) , io quando l'ho compilato ho usato LinuxThreads , non è che ricompilandolo semplicemente con NPTL mi risolverebbe il problema? E l'uso di NPTL anzichè LinuxThread porterebbe problemi di compatibilità con i programmi già installati ? E' possibile far magari convivere LinuxThreads con NPTL?

Grazie

Ciao

mjordan
21-07-2003, 21:00
Può darsi. NTPL è una nuova implementazione dei Posix Threads e le differenze sostanziali interne sono appunto la gestione dello stack. Tuttavia sembrano essere incompatibili fra di loro. Te lo dico per certo perchè ad esempio Red Hat dalla versione 9.0 usa le NTPL di default e mi dava problemi con Oracle 9i. Ho dovuto reinstallare una versione delle glibc con i floating stack (i pthreads tradizionali per intenderci) per far funzionare l'installazione. Potresti provare, magari risolvi. Che distro usi??

AnonimoVeneziano
21-07-2003, 21:08
Originariamente inviato da mjordan
Può darsi. NTPL è una nuova implementazione dei Posix Threads e le differenze sostanziali interne sono appunto la gestione dello stack. Tuttavia sembrano essere incompatibili fra di loro. Te lo dico per certo perchè ad esempio Red Hat dalla versione 9.0 usa le NTPL di default e mi dava problemi con Oracle 9i. Ho dovuto reinstallare una versione delle glibc con i floating stack (i pthreads tradizionali per intenderci) per far funzionare l'installazione. Potresti provare, magari risolvi. Che distro usi??


Potrei provare , ma potrei buttare anke giù tutto dalla finestra , giusto? :D

Uso LinuxFromScratch , mi sono compilato tutto a mano , e questo è uno dei motivi per il quale preferirei evitare l' implosione del sistema :D

Ciao

mjordan
21-07-2003, 21:09
Comunque, come ti ho detto prima, non ti conviene toccare il codice dell'implementazione dei threads bensì modificare il secondo parametro della funzione pthread_attr_setstacksize() nel file di codice sorgente dell'applicazione in questione. Se poi l'errore te lo da in fase di configure e non a runtime allora modifica come detto sopra... Posso sapere che programma è che ti da questo problema??

AnonimoVeneziano
21-07-2003, 21:13
certo , il programma in questione è niente popò di meno che...... WINEX .

Il problema lo rileva gente da tutto il mondo , gente soprattutto con SuSE e RedHat , anke Gentoo ho sentito (ma che probabilmente usano il ramo instabile ~x86 ) e , vabbè, io :D

Attenzione , alla fine per me Winex ora come ora non è un programma fondamentale, anzi , però questa cosa mi puzza , e a me piace arrivare in fondo alle cose , e mi sarebbe piaciuto sapere se c'è in qualche modo una soluzione .

CIao

mjordan
21-07-2003, 21:14
Mai usato WineX... Ma il problema è rilevato al configure o durante il runtime con un crash?

AnonimoVeneziano
21-07-2003, 21:18
All' esecuzione lo da, ho provato sia la versione precompilata che la versione CVS . La versione pre-compilata (quella commerciale per intenderci) mi da questo messaggio (quello che avevo postato all' inizio) e non funziona (o funziona male , a seconda dell' applicazione) , la versione CVS non da il messaggio , ma si limita a funzionare male esattamente come la versione precompilata.

Ciao

mjordan
21-07-2003, 21:20
Allora molto probabilmente se te lo da a runtime e come dicevo io.... Non c'entra niente la dimensione in STACK_SIZE nell'implementazione pthreads. Modifica pthread_attr_setstacksize() e vivi in pace :D

AnonimoVeneziano
21-07-2003, 21:23
Ok , ci provo :D

Ciao

PS= Comunque è un peccato non poter usare la versione pre-compilata , perchè ha delle features in +...