With the default LANG, running strace across various binaries, 'ls' for example gives many messages such as:
open("/usr/lib/locale/en_AU.UTF-8/LC_CTYPE", O_RDONLY) = -1 ENOENT (No such file or directory)
With LANG=en_AU.utf8, to match the directory in /usr/lib/locale
strace -c ls
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
nan 0.000000 0 14 read
nan 0.000000 0 3 write
nan 0.000000 0 93 65 open
nan 0.000000 0 29 close
nan 0.000000 0 1 execve
nan 0.000000 0 12 12 access
nan 0.000000 0 3 brk
nan 0.000000 0 2 ioctl
nan 0.000000 0 6 munmap
nan 0.000000 0 1 mprotect
nan 0.000000 0 1 _sysctl
nan 0.000000 0 2 rt_sigaction
nan 0.000000 0 1 rt_sigprocmask
nan 0.000000 0 1 getrlimit
nan 0.000000 0 42 mmap2
nan 0.000000 0 29 fstat64
nan 0.000000 0 2 getdents64
nan 0.000000 0 1 fcntl64
nan 0.000000 0 2 futex
nan 0.000000 0 1 set_thread_area
nan 0.000000 0 1 set_tid_address
------ ----------- ----------- --------- --------- ----------------
100.00 0.000000 247 77 total
Having a LANG that doesn't match a directory in /usr/lib/locale generates 10 more system calls, and 14 more errors.
Testing something a bit more substantial than 'ls', heres the summary of the first process for firefox.
Was going to log a new bug, but this one looks very similar. Heres the details I found.
Peter try setting LANG to something matching under /usr/lib/locale and run your test to see if we have the same bug. probably en_CA.utf8
------- ------- ------- ------- ------- ------- ------- ------- ------- ------- ------
Ive noticed a small performance hit arising from locale settings. Ubunutu (gnome- language- selector) sets lang in a format like:
LANG=en_AU.UTF-8 "en_AU. UTF-8" "en_AU. UTF-8" "en_AU. UTF-8" "en_AU. UTF-8" "en_AU. UTF-8" "en_AU. UTF-8" "en_AU. UTF-8" "en_AU. UTF-8" "en_AU. UTF-8" "en_AU. UTF-8" "en_AU. UTF-8" ON="en_ AU.UTF- 8"
LANGUAGE=en_AU:en
LC_CTYPE=
LC_NUMERIC=
LC_TIME=
LC_COLLATE=
LC_MONETARY=
LC_MESSAGES=
LC_PAPER=
LC_NAME=
LC_ADDRESS=
LC_TELEPHONE=
LC_MEASUREMENT=
LC_IDENTIFICATI
When binaries are executed, the LANG is looked up in /usr/lib/locale, which on my system looks like:
xxx@xxx: /usr/lib/ locale$ ls
en_AU.utf8 en_DK.utf8 en_IE.utf8 en_PH.utf8 en_ZA.utf8
en_BW.utf8 en_GB.utf8 en_IN en_SG.utf8 en_ZW.utf8
en_CA.utf8 en_HK.utf8 en_NZ.utf8 en_US.utf8
They dont match up, en_AU.utf8 vs en_AU.UTF-8
With the default LANG, running strace across various binaries, 'ls' for example gives many messages such as: usr/lib/ locale/ en_AU.UTF- 8/LC_CTYPE" , O_RDONLY) = -1 ENOENT (No such file or directory)
open("/
With LANG=en_AU.UTF-8
strace -c ls
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.000062 4 14 read
0.00 0.000000 0 1 write
0.00 0.000000 0 105 77 open
0.00 0.000000 0 29 close
0.00 0.000000 0 1 execve
0.00 0.000000 0 12 12 access
0.00 0.000000 0 3 brk
0.00 0.000000 0 2 2 ioctl
0.00 0.000000 0 6 munmap
0.00 0.000000 0 1 mprotect
0.00 0.000000 0 1 _sysctl
0.00 0.000000 0 2 rt_sigaction
0.00 0.000000 0 1 rt_sigprocmask
0.00 0.000000 0 1 getrlimit
0.00 0.000000 0 42 mmap2
0.00 0.000000 0 29 fstat64
0.00 0.000000 0 2 getdents64
0.00 0.000000 0 1 fcntl64
0.00 0.000000 0 2 futex
0.00 0.000000 0 1 set_thread_area
0.00 0.000000 0 1 set_tid_address
------ ----------- ----------- --------- --------- ----------------
100.00 0.000062 257 91 total
With LANG=en_AU.utf8, to match the directory in /usr/lib/locale
strace -c ls
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
nan 0.000000 0 14 read
nan 0.000000 0 3 write
nan 0.000000 0 93 65 open
nan 0.000000 0 29 close
nan 0.000000 0 1 execve
nan 0.000000 0 12 12 access
nan 0.000000 0 3 brk
nan 0.000000 0 2 ioctl
nan 0.000000 0 6 munmap
nan 0.000000 0 1 mprotect
nan 0.000000 0 1 _sysctl
nan 0.000000 0 2 rt_sigaction
nan 0.000000 0 1 rt_sigprocmask
nan 0.000000 0 1 getrlimit
nan 0.000000 0 42 mmap2
nan 0.000000 0 29 fstat64
nan 0.000000 0 2 getdents64
nan 0.000000 0 1 fcntl64
nan 0.000000 0 2 futex
nan 0.000000 0 1 set_thread_area
nan 0.000000 0 1 set_tid_address
------ ----------- ----------- --------- --------- ----------------
100.00 0.000000 247 77 total
Having a LANG that doesn't match a directory in /usr/lib/locale generates 10 more system calls, and 14 more errors.
Testing something a bit more substantial than 'ls', heres the summary of the first process for firefox.
export LANG=en_AU.UTF-8
strace -c firefox
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.000684 7627 2064 total
export LANG=en_AU.utf8
strace -c firefox
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00 0.000446 7550 2039 total
77 More system calls.
Reporting this because every little bit of performance helps.
Andrew Hendry.