Comment from Paul for the article make me rerun the tests in different conditions: I update the memory of both machines to 1024 MB and use scripts (see below)
[root@centos ~]# cat z1.sh
TEMPVAR=A
for i in {1..1000};
do
TEMPVAR=${TEMPVAR}$TEMPVAR;
a=$(echo 2^$i|bc)
b=${#TEMPVAR}
if [ $a -ne $b ]
then echo KO - $a, $b
else echo $a
fi
done
[root@centos ~]# cat z1.1.sh
TEMPVAR=A
for i in {1..1000};
do
TEMPVAR=${TEMPVAR}$TEMPVAR;
a=$(echo 2^$i+1|bc)
b=$(echo $TEMPVAR|wc -c)
if [ $a -ne $b ]
then echo KO - $a, $b
else echo $a
fi
done
Solaris
On Solaris independently of the amout of memory and the way of get length of environment variable the result is same:
bash-3.00# vmstat 1 2
kthr memory page disk faults cpu
r b w swap free re mf pi po fr de sr cd f0 s0 -- in sy cs us sy id
0 0 0 1075080 616428 152 3085 0 0 0 0 204 10 -0 3 0 309 3345 1511 14 19 67
1 0 0 1407772 753456 18 50 0 0 0 0 0 0 0 0 0 304 324 142 0 1 99
It seems 32MB is internal limitation in bash (or OS) in Solaris
bash-3.00# ./z1.sh
2
4
<snip>
8388608
16777216
33554432
./z1.sh: fork: Not enough space
./z1.sh: line 7: [: -ne: unary operator expected
./z1.sh: fork: Not enough space
bash-3.00# ./z1.1.sh
3
5
<snip>
16777217
33554433
./z1.1.sh: fork: Not enough space
./z1.1.sh: fork: Not enough space
KO - ,
./z1.1.sh: fork: Not enough space
And the execution times follow the common sense
bash-3.00# time ./z1.sh
2
4
<snip>
16777216
33554432
real 0m9.670s
user 0m6.454s
sys 0m3.014s
bash-3.00# time ./z1.1.sh
3
5
<snip>
16777217
33554433
real 0m13.709s
user 0m8.040s
sys 0m5.352s
Linux
But on linux
[root@centos ~]# vmstat 1 2
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 10416 1016704 252 4072 75 804 318 828 1008 77 19 44 32 4 0
0 0 10416 1016704 252 4096 0 0 0 0 1015 14 0 1 99 0 0
my method of count permit me to reach bigger length
[root@centos ~]# ./z1.sh
2
4
<snip>
67108864
134217728
./z1.sh: xmalloc: cannot allocate 536870913 bytes (0 bytes allocated)
[root@centos ~]# ./z1.1.sh
3
5
<snip>
134217729
268435457
./z1.1.sh: xmalloc: cannot allocate 1073741825 bytes (0 bytes allocated)
KO - 536870913, 0
./z1.1.sh: xmalloc: cannot allocate 1073741825 bytes (0 bytes allocated)
and need less execution time (with limit to 2^26)
[root@centos ~]# time ./z1.sh
2
4
<snip>
33554432
67108864
real 1m58.730s
user 0m33.084s
sys 1m27.562s
[root@centos ~]# time ./z1.1.sh
3
5
<snip>
33554433
67108865
real 1m36.457s
user 0m50.206s
sys 0m47.815s
Final conclusion: this need further investigations :)
Subscribe to:
Post Comments (Atom)
Should I trust AI
Should I trust AI? So far no, sorry. I tested for the moment (May, 2025) most advanced model for programming and ask very simple question:...
-
To build firewall under AIX is sample, but as each host based firewall should be done careful 1. Prerequisites To start firewall in AIX yo...
-
There are some cases when you want to create compressed tar archive but you do not have enough disk space to keep original files and tar arc...
-
4. Its time for some system administrator tasks. Oracle ASM need special mark of disks will work with 4.1. Because of some reason (i don...
No comments:
Post a Comment