mam problem, kteremu nedokazu prijit na kloub.
Totozne awk skripty a operace mi bezi na AIXu cca 20x dele nez na Linuxu. Nesetkal jste se s tim nekdo?
Pro uplnost dodavam Linux je Mandrake 10.1 + awk 3.1.3, stejnou verzi GNU awk jsem nainstalil i na ten AIX 5.2 ml4, zkousel jsem i awk 3.1.5, ale vysledek/rychlost stejny... :(
20x je hodne, neni to treba kvuli nastaveni locales? Mozna mate na kazdem systemu jiny LC_ALL a pak to pouziva uplne jinou rutinu pri cteni radku. Napriklad na AIX, pokud je LC_ALL=cs_CZ.UTF-8, tak by to mohlo nacitat soubor a pak delat prevod kazde radky z UTF-8 na pole 32-bitovych integeru a z kazdym znakem by to pak pracovalo jako s 32bitovym integerem a pak vysledek to pomoci dalsi rutiny slozite prevadet zpatky na UTF-8. Zatimco na Linuxu to treba pracuje se souborem otevrenym pomoci mmap, protoze je LC_ALL=cs_CZ.iso-8859-2. (Jenom takovy napad)
Mrknul jsem na to a stav je takovyto:
Na Linuxu mam vsechny promenne LC_* nastaveny na cs_CZ.
Na AIXu takoveto promenne nejsou, nicmene LANG=cs_CZ a promenna NLS (National Language Support) pouziva prave $LANG... :(
Stale nejsem presvedcen, ze v tom to neni. Vim, ze UTF-8 zpusobuje v gawku velke zdrzeni.
Na Linuxu pry pouzivate locale "cz_CZ", coz znamena, ze pouzivate kodovani ISO-8859-2, pokud se nepletu.
Pisete, ze na AIXu je nastaven LANG=cs_CZ, ale neuvadite jednoznacne, zda to znamena pouziti UTF-8 nebo ne.
Ale i kdybyste na AIXu UTF-8 nepouzival, stale bych velice podezrival prave NLS support.
Doporucuji nasledujici experimenty:
- Zkuste na obou systemech pouzivat POSIX locale (export LC_ALL=C, aspon na Linuxu).
- Zkuste na Linuxu vlastni build z gawk-3.1.5.tar.bz2, zda bude take tak rychly.
- Zkuste na AIXu configure --disable-nls.
Jak ovlivni tyto pokusy rychlost scriptu?
Pokud problem pretrva, zkuste to nahlasit jako chybu gawk, mailem. (Pokyny jiste najdete v tarballu.)