Friday, October 26, 2007

64 bit in leo

если вы хотели бы увидеть полностью 64 bit систему, то можете себе поставить linux или freebsd. опять же, что для вас 64 bit - это просто очередная галочка или вам это реально нужно?

посмотрим на это с практической точки зрения. в той инсталляции, которая сейчас работает у меня - только apache2 web server работает как 64 bit приложение. основное преимущество 64 bit приложений в том, что они могут адресовать намного больше памяти, но за это приходится платить. все указатели, которые создаст приложение, будут занимать в два раза больше памяти. это легко показать на примере простого приложения, выполненного внутри апач.



<скучные подробности>
у нас есть апач и мод_перл. мы создадим процесс апач, в котором мод_перлу укажем использовать массив на 10 миллионов элементов. потом избавимся от 64 bit части в апач и повторим процедуру. каждый раз внутри перла будет выполнена программа ps, которая нам расскажет, сколько памяти мы смогли сожрать.


все измерения производятся в /tmp


cd /tmp
cat >/tmp/test.httpd.conf


ServerName 127.0.0.1
ServerAdmin aaa@bbb.com
Listen 50081
ServerRoot /tmp/
DocumentRoot /tmp/
User _www
Group _www
ErrorLog error_log
LoadModule perl_module /usr/libexec/apache2/mod_perl.so

my $a = [];
$a->[50_000_000] = 1;
print `ps -o rss -p $$`, "\n";
die;

^D




lipo -info /usr/sbin/httpd
Architectures in the fat file: /usr/sbin/httpd are: ppc7400 ppc64 i386 x86_64




lipo /usr/sbin/httpd -output /tmp/httpdi386 -extract i386




lipo -info httpdi386
Architectures in the fat file: httpdi386 are: i386




sudo /usr/sbin/httpd -f /tmp/test.httpd.conf
RSS
393356




sudo /tmp/httpdi386 -f /tmp/test.httpd.conf
RSS
197808


то есть явно видно, что процесс, который оперирует 64bit указателями, использует почти в два раза больше памяти. совершенно точно, что если такой процесс будет использовать менее 4гигабайт оперативной памяти, то эффективность использования такого процесса будет стоять под большим вопросом - он съест вдвое больше памяти и будет работать медленнее за счет большего количества операций с памятью.

в то же время, процессы, которым нет нужды оперировать с большим количеством объектов, например Preview.app, вполне может себе позволить быть 64bit, потому как он не сильно вырастет в памяти.

теперь давайте посмотрим на то, что нам покажет activity monitor. в текущем состоянии с небольшим количеством процессов приложения потребляют половину оперативной памяти. и при этом они 32 bit. если все они будут 64 bit, то количество свободной памяти уменьшится. и если в отношении (картинка ниже) VLС, Terminal и TextEdit при пересборке под 64bit потребление памяти почти не увеличится, то насчет остальных программ я этого сказать не могу, потому как они используют множество объектов.



для того, чтобы не быть голословным, я собрал пример из /Developer/Examples/WebKit/MiniBrowser для двух архитектур и запустил. в каждом из них рендерится по одной странице (http://apple.com/). разница в размере занимаемой памяти отличается от 20 до 100%. это потому, что браузеры используют множество объектов.

до загрузки страницы


после загрузки страницы


поэтому, в большинстве GUI приложений, пользователь не получает выигрыша от использования в приложении 64bit. поэтому только некоторые серверные приложения собраны с поддержкой 64bit. но не все так плохо.

если у вас есть процессы, оперирующие с данными, которые занимают в памяти больше четырех гигабайт и у вас есть mac pro или xserve, то это будет для вас очень хорошо. потому что вместо загрузки данных частями по два гига приложение сможет загрузить в память все, что вам нужно (если у вас есть достаточно памяти).

другой выигрыш от этой архитектуры вы можете получить при математических рассчетах и сравнении строк. то есть Photoshop и Maya только выиграют. выиграют базы данных и веб сервера. выиграет профессиональное использование, а обычный пользователь ничего не заметит.