Portál AbcLinuxu, 11. května 2025 01:25

Dotaz: SIGABRT po alokaci >4GB virtuální paměti

3.5.2010 18:09 Werken
SIGABRT po alokaci >4GB virtuální paměti
Přečteno: 817×
Odpovědět | Admin
Spouštím paměťově náročný program, který si postupně do paměti nahrává data překračující 4GB a v okamžiku, kdy tuto hranici přelézá, tak dostane SIGABRT.

Jde o systém:
Linux nazev_pocitace 2.6.32.11 #1 SMP Fri Apr 2 10:32:26 CEST 2010 x86_64 x86_64 x86_64 GNU/Linux
CentOS release 5.4 (Final)
Příkaz
free -m
vrací:
             total       used       free     shared    buffers     cached
Mem:         16087      12050       4037          0         72      10251
-/+ buffers/cache:       1726      14361
Swap:         9538          0       9538
Příkaz
ulimit -a
vrací:
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 128696
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 16384
cpu time               (seconds, -t) unlimited
max user processes              (-u) 128
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
Pokud to dobře chápu, tak systém podporuje Physical Address Extension, má 16 GB RAM a já jako uživatel mám právo je používat, tak v čem by ještě mohl být problém?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

michich avatar 3.5.2010 18:28 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Odpovědět | | Sbalit | Link | Blokovat | Admin
Klidně to může být chyba v tom programu samotném. Ale co je to za program, jsi neprozradil.
3.5.2010 19:32 Werken
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Jde o dekodér systému Moses (http://www.statmt.org/moses/), který se příznačně nazývá moses. Jde o zkompilovaný program napsaný v C++ a pro menší korpusy funguje bez problémů. Myslel jsem, že PAE funguje transparentně, nebo snad v tom programu samotném může být něco, aby se sám omezoval?
Marcho avatar 4.5.2010 18:15 Marcho
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Může třeba používat 32-bitové pointery...
No Linux, Just GNU!
6.5.2010 09:37 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Ty ale máš 64b systém a tím pádem nepoužíváš PAE a ten binární program pokud je 32b může být přeložen tak blbě že prostě nedokáže využít 64b systém.

Použij 64b program ten by to dělat neměl.

A nebo mu chybí pokud je ten program 32b nějaké 32b knihovny a tak zhavaruje, já bych typnul že bude chyba v programu.
7.5.2010 06:21 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Ty ale máš 64b systém a tím pádem nepoužíváš PAE
Tento mýtus by se měl jednou provždy vymýtit. Asi jsem se níže nevyjádřil dost jasně.
In computing, Physical Address Extension (PAE) is a feature (first implemented in the Intel Pentium Pro in 1995) to allow x86 processors to access more than 4 gigabytes of random access memory if the operating system supports it. It was extended by AMD to add a level to the page table hierarchy, to allow it to handle up to 52-bit physical addresses, add NX bit functionality, and make it the mandatory memory paging model in long mode.

Tak. A je to.

A mimochodem, PAE je dobré zapnout i na 32b s malou pamětí. Kvůli tomu NX bitu.
In Ada the typical infinite loop would normally be terminated by detonation.
pavlix avatar 7.5.2010 11:40 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Tento mýtus by se měl jednou provždy vymýtit.
Chápu to dobře, že chceš vymýtit mýtus, že se PAE používá na 64bit architektuře? Chvilku mi to trvalo, nejdřív jsem tě chtěl zprdnout a napsat citation needed, protože to vyznělo jako bys chtěl vyvracet příspěvek, na který reaguješ.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
7.5.2010 18:41 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Tak ještě jednou, pro ultra pomalé ...

Mýtus: Mám 64bit OS, nepoužívám PAE.

Omyl.

64 bit obsahuje PAE samo od sebe. V 32 bit se mohu rozhodnout jestli chci PAE nebo nePAE. V 64 bit se rozhodnout nemůžu - PAE v 64b režimu nelze vypnout.

Citace viz [1].
In Ada the typical infinite loop would normally be terminated by detonation.
pavlix avatar 8.5.2010 00:50 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Citation needed.

Tvůj odkaz vede na stránku, kde se o PAE nic nepíše. Pokud vyvracíš něco, co výslovně tvrdí obecně používané zdroje jako anglická a česká wikipedie, chce to něco lepšího než ze sebe dělat chytráka.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
8.5.2010 01:11 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Prostě u 64b OS se PAE nepoužívá viz: Physical Address Extension kde je psáno: "Při použití 64bitových procesorů a 64bitových operačních systémů nemá PAE význam a není ani podporováno. PAE je však dostupné v 32bitovém režimu 64bitových procesorů."

A je to snad logické u 64b CPU a OS můžu adresovat vše přímo a nemusím hledat berličky. Ovšem u 64b CPU a 32b OS musím hledat berličky a tak když ten CPU přepne na 32b tak umožní použít PAE. Čili PAE umí i 64b CPU ovšem pouze když se přepnou do 32b režimu. Když beží CPU v 64b režimu žádné PAE nepodporuje a o překlad mezi 32b programy na 64b implementaci nebo jak bych to nazval se stará OS.
michich avatar 8.5.2010 09:19 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Viz AMD64 Architecture Programmer's Manual Volume 2: System Programming část 5.3 Long-Mode Page Translation:
Long-mode page translation requires the use of physical-address extensions (PAE). Before activating long mode, PAE must be enabled [...]
Because PAE is always enabled in long mode, [...]
pavlix avatar 8.5.2010 17:11 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Jsem rád, že se tu najde někdo, kdo narozdíl od pana pht umí dát i jasný a smysluplný odkaz.

Takže díky a už zbývá jen otázka, jestli si někdo z vás znalých tématu najde čas na úpravu v české a anglické wikipedii.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
8.5.2010 20:47 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Aha, tak už jsem pochopil proč jste tak zatvrzele vzdoroval.

Ono to je totiž na wikipedii špatně, ale jen na té české. Na anglické je to co jsem původně ocitoval, tj. správné tvrzení. Nějak mě nenapadlo, že by se různé překlady wikipedie proti sobě rozcházely.

Jo a na to Vaše citation needed prdím, protože takhle jednoduchou věc je skutečně jednodušší dohledat na G, než hledat ISBN knihy ve které jsem to četl.
In Ada the typical infinite loop would normally be terminated by detonation.
pavlix avatar 9.5.2010 15:29 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Ono to je totiž na wikipedii špatně
Ano, na české wikipedii je několikrát uvedené tvrzení, které je v rozporu s manuálem AMD.
ale jen na té české.
To není pravda. Na anglické wikipedii je výslovně uvedeno toto:
On x86-64 processors in native long mode, the address translation scheme resembles PAE...
Když se v technickém textu píše, že je to pouze podobné PAE, tak je to podle mě v přímém rozporu s tvrzením, že to PAE.

Tudíž i anglická wikipedie je v rozporu s manuálem AMD.
Jo a na to Vaše citation needed prdím, protože takhle jednoduchou věc je skutečně jednodušší dohledat na G, než hledat ISBN knihy ve které jsem to četl.
Já vám zase prdím na vaše blbé nepodložené kecy. Možná jste na tolik geniální, že nad námi obyčejnými smrtelníky ohrnujete nos.

Odkaz na google, který ukazuje na několik zdrojů, které tvrdí opak (byť třeba nepravdivý), ok, pokud je to z nevědomosti. Ale odkazovat na google i když už se ví, že google dává spíše špatné výsledky, to mi přijde jako vrchol arogance.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
10.5.2010 07:06 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Když se v technickém textu píše, že je to pouze podobné PAE, tak je to podle mě v přímém rozporu s tvrzením, že to PAE.

Tudíž i anglická wikipedie je v rozporu s manuálem AMD.
Za prvé wikipedia není technický text a za druhé to v rozporu není.

Přečtěte si ten manuál když Vás to zajímá do podrobností.

Ale odkazovat na google i když už se ví, že google dává spíše špatné výsledky, to mi přijde jako vrchol arogance.
Já o žádných špatných výsledcích nevím a ani nevím že "se to ví".

Když už jste tak houževnatý tak tu českou wikipedii opravte ;-)
In Ada the typical infinite loop would normally be terminated by detonation.
pavlix avatar 10.5.2010 11:39 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Za prvé wikipedia není technický text
Ještě mi řekněte, že článek o PAE není technický text. Co to potom je? Pohádka?
a za druhé to v rozporu není.
Podobný != stejný.
Když už jste tak houževnatý tak tu českou wikipedii opravte
Už jsem v ní opravil dost věcí, kterým rozumím. Do hardware se zase tak moc míchat nechci. Navíc tu nejsem zdaleka jediný houževnatý jedinec.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
10.5.2010 22:14 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Podobný != stejný.

Nikdo se nehádá, ale původní otázka byla jestli se PAE používá nebo ne, a odpověd je, že se používá.

Adresní režim v x86-64 má nějaké změny (rozšíření) oproti původnímu PAE.

Snad už je to jasné do podrobna.
In Ada the typical infinite loop would normally be terminated by detonation.
pavlix avatar 11.5.2010 21:49 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Pokud vím, tak už se po několik komentářů bavíme o wikipedii a správnosti její formulace (vůči relevantnímu zdroji, konkrétně manuálu od AMD).

Beru to tak, že tématický skok jsi udělal, abys zakryl nejistotu.
Snad už je to jasné do podrobna.
Podle toho, jak píšeš, tak ti rozdíl mezi slovy podobný a stejný, zatím ještě jasný není.

A očividně ti uteklo už i téma diskuze posledních x příspěvků.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
michich avatar 8.5.2010 09:24 michich | skóre: 51 | blog: ohrivane_parky
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
A je to snad logické u 64b CPU a OS můžu adresovat vše přímo a nemusím hledat berličky.
To je logické pouze tehdy, když máš apriori zafixováno, že PAE==berlička.
8.5.2010 20:53 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
A je to snad logické u 64b CPU a OS můžu adresovat vše přímo a nemusím hledat berličky.
To je logické pouze tehdy, když máš apriori zafixováno, že PAE==berlička.
Přesně tak, to je totiž další mýtus :)

PAE je jen jedna úroveň stránkovácího adresáře navíc, a u ne-x86 systémů je docela běžné mít úrovní několik. Je to tak i u x86-64, neboť jinak by nešlo rozumně evidovat těch (až) 2^(64-12) stránek.

A mimoto PAE obsahuje NX bit.

Berličkou by se pouze dalo nazvat to, že 32bitový OS s PAE obvykle stejně nedovolí jednomu procesu adresovat více než 4 giga.
In Ada the typical infinite loop would normally be terminated by detonation.
pavlix avatar 8.5.2010 15:54 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Prostě u 64b OS se PAE nepoužívá
Chtěl jsem po pisateli odkazy podporující jeho tvrzení, že se PAE používá.

Takže mně jsi asi tímhle způsobem odpovědět nechtěl.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
pavlix avatar 8.5.2010 15:55 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Chmm, příště použiju italiku, bold to vypadá až moc výrazně :). Nebyl úmysl.
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
3.5.2010 20:15 rini17
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Odpovědět | | Sbalit | Link | Blokovat | Admin
PAE sa tyka iba 32bitoveho jadra. 64bitove jadro (ktore uz mas) nepotrebuje ziadne rozsirenie na adresovanie >4GB.

ALE: Limit na 32bitovy userspace proces ostava iba 4GB, neviem o tom ze by sa to niekomu podarilo obist a je to zbytocne, kedze sa to da lahko vyriesit prekladom pod 64bit kompilatorom (ak zdrojaky nepisalo prasa).

Cize, mozne su 2 priciny:

a) mas 32bitovu binarku

b) binarka je 64bit, ale zdrojaky pisalo prasa a velkost pamate je niekde natvrdo definovana ako 32-bitovy integer...

A este ti odporucam si nastudovat a pouzit HugeTLBFS (alokovat 2MB velke stranky), kedze obycajne 4kB stranky zvyknu mat nechutny overhead, zvlast pri nahodnom pristupe.
4.5.2010 06:51 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
PAE sa tyka iba 32bitoveho jadra. 64bitove jadro (ktore uz mas) nepotrebuje ziadne rozsirenie na adresovanie >4GB.

Přesněji řečeno u 64b je PAE zabudováno.
In Ada the typical infinite loop would normally be terminated by detonation.
pavlix avatar 7.5.2010 11:42 pavlix | skóre: 54 | blog: pavlix
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
citation needed
Já už tu vlastně ani nejsem. Abclinuxu umřelo.
3.5.2010 20:19 xavier | skóre: 10 | blog: borkovo
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Odpovědět | | Sbalit | Link | Blokovat | Admin
Není to tím, že PAE sice umožňuje přístup k více než 4GB RAM, ale limit pro jeden proces zůstává pořád stejný(teda zvedne se z 2/3 GB na 4GB)?
3.5.2010 20:26 xavier | skóre: 10 | blog: borkovo
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Jsem si nevšiml, že to je 64bit kernel, tak nic.
8.5.2010 23:29 Sten
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Trochu off-topic, ale ten 2/3 GiB limit se u 32bitového jádra nezvedne ani s PAE, protože všechny syscally jádra musí probíhat ve stejném virtuálním paměťovém prostoru. 4 GiB lze pro proces dostat pouze u 64bitového jádra, kde syscall přepne na long mode a tak najde jádro i nad 4 GiB
10.5.2010 01:05 Werken
Rozbalit Rozbalit vše Re: SIGABRT po alokaci >4GB virtuální paměti
Odpovědět | | Sbalit | Link | Blokovat | Admin
To je ale diskuze :) Jenom pár slov k té výchozí otázce, abych to uzavřel...

Binárka byla opravdu přeložena do 32bitů, takže jsem se pokoušel to přeložit do 64bitů, ale to se mně nepovedlo. Pak jsem ale zjistil, že před dekódováním je možné model profiltrovat a binarizovat. Když se to provede obojí, tak potom moses nepotřeboval nikdy více jak cca 2 GB RAM. Jede to sice pomaleji, ale můj problém to vyřešilo.

Toť pro ty, co by řešili podobný problém.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.