Wednesday, December 12, 2007

speedup

postgresql



в последнее время на проекте замечались некислые такие тормоза. они наблюдаются до сих пор, но их количество сильно уменьшено. часть из них, оказывается, была связана с тем, что postgresql по умолчанию настроен так, чтобы запускаться на 200 пентиуме с 128 мегабайтами оперативки. соответственно, даже на минимальных запросах он безбожно тормозит. 10 строк счастья:

max_connections = 5 # на локальной машине мне совсем незачем 20 процессов постгреса
shared_buffers = 32MB # required
max_prepared_transactions = 10 # только если есть prepared transactions и то не уверен что работает так, как нужно
work_mem = 16MB
max_fsm_pages = 204800

random_page_cost = 2.0 # required, сильно ускоряет работу, если у вас быстрый диск
cpu_tuple_cost = 0.001 # required, у нас быстрый процессор и их даже несколько
cpu_index_tuple_cost = 0.0005 # required, как и выше
cpu_operator_cost = 0.00025 # required, как и выше
effective_cache_size = 64MB # required, позволяет использовать кэш операционной системы

berkeleydb



кто-то говорил о том, что берклидб - быстрая? может быть, но в обычном применении в perl, когда ее используют как tie MLDBM+Storable - она просто пиздец какая тормозная.

я тут сравнил скорость tie MLDBM и SQLite, где в SQLite создается табличка из двух колонок. и ужаснулся.

1. SQLite быстрее пишет свои файлы, чем tie свои читает;
2. разница в скорости записи - четыре раза, чтения - почти два раза, размер файла - полтора и все в пользу SQLite;

тест

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 только выиграют. выиграют базы данных и веб сервера. выиграет профессиональное использование, а обычный пользователь ничего не заметит.

Saturday, September 22, 2007

leopard vs tiger

первой mac os x, с которой я работал, была версия 10.3. после linux все было несколько странно, но в целом приемлемо, и, даже, очень неплохо. год отработав на своем ноутбуке под 10.3, я решил сменить операционку на 10.4, благо что она только что вышла.

трансфер был мучительный, потому что новый софт был несовместим со старым. чего стоит хотя бы новый quicktime 7, к которому не было плагинов, ноутбук, не возвращающийся из sleep, если подключена хотя бы одна samba share.

проблем была масса, но и обновлений тоже было немало. dashboard и automator, spotlight и smart folders в finder, address book, mail. новый isync с поддержкой нового железа, новый safari, который наконец смог заменить ie 5.2

10.4 - это к тому же первая система, портированная на intel. вместе с портированием на intel в mac os x появился bootcamp, photobooth, itunes с coverflow, front row. это уже была не 10.4, а нечто большее, благо что изменений не на одну major версию наберется.

сейчас я сижу и рассматриваю mac os x 10.5 и что-то мне кажется, что джобс всех омбанул. реально новых приложений - всего 3: spaces, time machine, podcast capture. изменения интерфейса вобрали в себя некоторые моменты дополнительно устанавливаемого софта на 10.4.

все стало симпатичнее, многое стало лучше и понятнее работать, но если tiger по сравнению с panther это три шага вперед, то leopard - визуально этот даже один шаг не смог вытянуть. тем более странно смотреть на 300+ фич, которые отличают леопард от тигра.

через сутки после начала работы на новом релизе я понял, что в леопарде больше скрытого, чем открытого глазу. netinfo manager? его больше нет. нет ни графического интерфейса, ни утилит, доступных через терминал. его полностью вырезали, заменив directory services. точнее, netinfo остался, но интерфейс к нему полностью сменился. lookupd? его тоже больше нет. вместо него directory service cache manager. /etc/rc? канул в лету. на его месте allmighty launchd. java? для java становится все меньше программных интерфейсов. еще в тигре apple отказалась поддерживать нативные классы для java. теперь модно программировать на ruby, в том числе и gui. universal binary? да, но они стали еще универсальнее. вместо архитектур i386 и ppc в тигре во всех поставляемых с леопардом бинарников аж четыре архитектуры: ppc7400 ppc64 i386 x86_64. и леопард не умеет запускаться под g3 и ранними g4 вообще. потому что запускаемого кода под такую платформу не содержит.

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

performance testing

некоторое время назад один человек рассказал о том, что в mac os x невозможно оперировать с 250 000 файлов в одной директории. конечно, делать так - это бред, но мне стало интересно, действительно ли оно так. при этом, этот же человек уверял, что в виндовс все в порядке и никаких проблем с этим нет.


скрипт:



#!/usr/bin/perl

use strict;

local $/;

my $file = $ARGV[0];
my $dir = $ARGV[1];

die 'can\'t open file' unless open IN, $file;

binmode IN;
my $content = <$file>;

close IN;

foreach my $counter (0 .. 300000) {
print "$counter\n"
if $counter % 10000 == 0;

die 'can\'t open file for writing'
unless open OUT, '>', "$dir/$counter.png";
binmode OUT;

print OUT $content;

close OUT;
}


все тестировалось в фаловой системе hfs+ для mac os x, ntfs для windows xp sp2



создание файлов в виндах и mac os x заняло примерно 2-3 минуты (windows time /t не выводит секунды)
время показа содержимого директории в finder и explorer - 4-5 минут. короче, не делайте так и будет вам счастье.


P.S.: far всю ночь удалял файлы из директории, потому что эксплорер выдавал sharing violation при попытке удаления папки. и до сих пор еще не справился. под mac os x в finder все произошло достаточно быстро (10 минут), хотя файндер перед перемещением в корзину очень уж долго считал считал файлы.

Wednesday, August 29, 2007

mac os security guidelines

безопасность в mac os x

для параноиков: мне придется вас огорчить. не существует и не будет существовать системы, которая при наличии сетевого соединения позволит вам чувствовать себя уверенным.

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

немного теории

вирусы и прочее могут нарушить стабильность и целостность системы, создать нежелательный сетевой трафик. в mac os x по умолчанию сложнее нарушить целостность системы за счет удаления и подмены системных файлов по сравнению с windows. потому что в windows xp системная папка защищена намного слабее - в ней можно удалять и перемещать файлы.

нежелательный сетевой трафик создает большинство современных приложений. например, microsoft office 2004 при запуске «смотрит» по локальной сети, не стоит ли рядом такой же microsoft office с таким же серийным номером. желание производителя защититься понятно, но это не то, что нужно пользователю. coolbook при регистрации отправляет серийный номер вашего ноутбука по незащищенному соединению. itunes показывает по умолчанию itunes music store, хотя в россии купить в нем музыку невозможно. если вы платите за трафик, то вас может удивить, насколько много трафика потребляют проверки обновлений программ.

все это можно заблокировать с помощью настроек программ или, если настроек нет, ipfw (System Preferences/Sharing/Firewall) и LittleSnitch.

стабильность системы без приложений достаточно высока. то есть, если вы только что установили операционную систему и не ставили никаких дополнительных приложений, то вероятность того, что вы потеряете данные, очень мала. чем больше у вас установлено приложений, тем более вероятна потеря данных, меньшая отзывчивость системы («у меня компьютер тормозит») или ее неожиданное поведение («у меня по контрол-пробел включается itunes и spotlight. как сделать так, чтобы айтюнс не загружался по этой комбинации?»). поэтому устанавливайте только то, что реально необходимо.

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

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

единственное, как можно защитить действительно ценную информацию - это резервное копирование.

внутренние средства системы

с помощью настроек системы вы можете немного обезопасить себя от случайных и намеренных потерь данных.

запускаем яблочное меню -> System Preferences

раздел Security

filevault позволит вам зашифровать вашу домашнюю директорию.

я считаю, что использование filevault на компьютере оправдано лишь в том случае, если на нем есть действительно ценные данные, которые никто не должен увидеть. потому что если вы забудете пароль и master password, то и про данные тоже забудьте. включайте на свое усмотрение и под свою ответственность.

require password to wake … - хорошая опция для всех, кто дорожит своими данными и не сидит в гордом одиночестве в 100-метровом бункере под землей. с помощью этой опции у вас будет возможность вернуться к нетронутому рабочему столу после того, как вы решите сходить на кухню и попить чаю.

disable automatic login - после загрузки будет показан список пользователей и нужно будет выбрать одного из них.

require password to unlock … - с помощью System Preferences вы можете сделать многое. даже слишком многое. с установкой этой опции для некоторых небезопасных вещей вам придется ввести пароль.

log out ater … - не рекомендую. возможна потеря данных.

use secure virtual memory - не рекомендую. сильное снижение скорости работы. но если вы решили включить filevault - то эта опция сделает вашу машину защищеннее.

Dashboard and Expose

Active Screen Corners
каждый раз, когда я отлучаюсь от компьютера, я блокирую его с помощью скринсэйвера. чтобы облегчить эту задачу, я установил для правого верхнего угла экрана опцию Start Screen Saver

Accounts

Change Password - установите пароль. хотите совет? откройте книжку со стихами и выучите одну из строк наизусть. и используйте ее в качестве пароля. взломать компьютер намеренно очень просто, если у вас в качестве пароля стоит день рождения или имя собаки.

Sharing

вкладка Services

рекомендую оставить только Windows Sharing. и Printer Sharing, если у вас стоит общий принтер на несколько компьютеров. но тогда печатать на вашем принтере сможет любой человек из «вашей» сети. например, если ваш провайдер - корбина и интернет раздается другим компьютерам через макинтош с принтером, при включенном Printer Sharing вашим принтером сможет воспользоваться весь ваш район.

вкладка Firewall

firewall должен быть включен всегда. без вариантов. это позволит защититься от большей части атак извне.

Software Update

если вы включите проверку обновлений раз в неделю и будете устанавливать обновления, то это с большой вероятностью защитит вас от злоумышленников, которые будут ломить сквозь бреши в системе безопасности.

сторонний софт

LittleSnitch

позволит вам пресечь трафик некоторых программ, которым для работы не нужно лезть в интернет.

AppFresh

сделает архив приложений, которыми вы пользуетесь, чтобы в случае неприятностей восстановить рабочую версию.

Carbon Copy Cloner

позволит вам сделать точную копию рабочей системы

Firefox + AdBlock Plus + flashblock

позволит вам не смотреть рекламу на сайтах. для Safari есть подобное решение (PithHelmet), но за деньги.

Friday, August 24, 2007

coolbook

об отсылке персональных данных с компьютера при регистрации, и о деньгах, которые платятся за уменьшение стабильности системы.

есть такой софт - coolbook, позволяет охладить пыл macbook и macbook pro. в силу того, что я решил отдохнуть недельку в киеве, а температура держится тут на очень высоком уровне, то нужно было как-то бороться с жарой.

coolbook без регистрации ничего не дает сделать, только посмотреть текущий вольтаж на процессоре и частоту. с ним поставляются два документа как пользоваться и руководство по понижению вольтажа процессора, и одна ссылка на cputest, который позволяет проконтролировать работу процессора после понижения вольтажа.

я решил посмотреть, что будет, если нажать кнопку регистрации. coolbook поперся в интернет по незащищенному http, отправил first name, last name и activation code. я решил посмотреть, что еще он отправит, и для этого завернул с помощью firewall трафик, который идет на сервер регистрации, на локальный апач. оказывается, после первого запроса coolbook получает количество оставшихся лицензий. а потом отсылает на свой сервер серийный номер ноутбука. так мы не договаривались, посему я загрузил xcode tools и с помощью дебаггера два раза отредактировал регистр eax в процессе выполнения процедуры doRegistration. coolbook решил, что все в порядке и я стал зарегистированным пользователем.

после часа тестирования (и постоянных перезагрузок) на каком же минимальном напряжении сможет работать мой процессор, выяснилось что таких напряжений два: .95 вольта для 1.67GHz и 1.025 вольта для 2.0GHz. естественно, все тестировалось с помощью CPUTest. хорошо, пускай так и будет. через некоторое время я запустил импорт фото с помощью adobe lightroom - перезагрузка. повышение вольтажа, потом снова импорт фото. в итоге оказалось, что для 2GHz стабильное напряжение будет 1.1 вольта. а автор CPUTest и автор coolbook просто облажались с тестированием.

итоги:

работа ноутбука: кулер крутится медленнее, реже начинает «завывать» и температура без нагрузки ниже - почти такая же как под нагрузкой, но для powerbook 12". но под нагрузкой ноутбук точно так же обжигает колени, хотя и без страшного воя. разница при работе от аккумулятора почти незаметна, то есть ставить кулбук только для того, чтобы бук больше жил от аккумулятора - бесполезно. дополнительно к coolbook можно поставить smcFanControl, тогда температура еще немного уменьшится.

программа отправляет по незащищенному протоколу серийный номер ноутбука и это никуда не годится.

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

Saturday, May 12, 2007

mac os x pptp persistent connection

corbina и другие vpn провайдеры: как подключиться и расшарить интернет
предупреждение: вам придется перед тем, как сделать это, освоить терминал и редактирование файлов в нем (мне нравится vim, но я не стану объяснять вам как в нем работать. инструкция для nano).

по отдельности ничего работать не будет. сначала выполните все шаги.



примечание: если у вас все работает, то не стоит делать описанного ниже.

если вам нужно только подключиться, выполняйте шаги с первого по третий. если нужно подключиться и расшарить, то

шаг первый. /etc/rc.local

/usr/sbin/pppd plugin PPTP.ppp remoteaddress vpn.corbina.ru logfile /var/log/ppp.log user USERNAME password PASSWORD defaultroute usepeerdns persist maxfail 0
/usr/libexec/InternetSharing


описание:

важно: заменить USERNAME и PASSWORD на свои логин и пароль соответственно

первая строка соединит вас с интернетом прямо при старте компьютера. при дисконнекте соединит заново
а вторая строка расшарит этот интернет

шаг второй. /etc/ppp/check-and-reconnect.sh
#!/bin/sh

GOOGLE_CHECK=`/sbin/ping -c 10 -o google.com && echo ok`

if [ "x$GOOGLE_CHECK" == "x" ] ; then
echo >&2 "link failed"
kill -1 $(< /var/run/ppp0.pid)
fi


после того, как создали файл, в терминале выполните
sudo chmod 755 /etc/ppp/check-and-reconnect.sh
sudo chown root:wheel /etc/ppp/check-and-reconnect.sh


этот скрипт будет проверять соединение с гугл и при недоступности гугла пинать соединение с корбиной на предмет пересоединения

шаг третий /var/cron/tabs/root
*/10 * * * * /etc/ppp/check-and-reconnect.sh


после того, как создали файл, в терминале выполните
sudo chmod 600 /var/cron/tabs/root
sudo chown root:wheel /var/cron/tabs/root


примечание для флеймеров и эстетов: для crontab -e нужна установленная переменная EDITOR. объяснять, как ее устанавливать, я не хочу по причине, указанной в первом абзаце поста.

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

шаг четвертый. /etc/natd.conf
same_ports yes
use_sockets yes
dynamic yes
interface ppp0


это позволит пакетам, переданным на машину с других машин, уходить в интернет (и обратно)

шаг пятый. /etc/ppp/ip-up
#!/bin/sh

IPFW='/sbin/ipfw'

/usr/sbin/natd -f /etc/natd.conf
$IPFW add 1001 divert natd all from any to any via $1

$IPFW add 501 allow tcp from any to any in recv en1

/usr/libexec/InternetSharing

/usr/sbin/sysctl -w net.inet.ip.forwarding=1


и еще /etc/ppp/ip-down
#!/bin/sh

IPFW='/sbin/ipfw'

$IPFW delete 1001

$IPFW delete 501

/usr/libexec/InternetSharing


после того, как создали файлы, в терминале выполните
sudo chmod 755 /etc/ppp/ip-{up,down}
sudo chown root:wheel /etc/ppp/ip-{up,down}


важно: замените интерфейс en1 на тот, который у вас airport.

описание: сие действо открывает после соединения ваш компьютер для атак через airport. а после рассоединения - закрывает. в принципе, вы можете удалить строчку с цифрой 501, но тогда на компьютерах, для которых вы расшариваете интернет, отключатся все сервисы, закрытые у вас в закладке firewall в секции shared ваших system preferences. но можете на этот текст не обращать внимания. потому что если кто-то сильно захочет, то сломает вашу машину даже с работающим файрволлом.

после перезагрузки вы станете счастливым обладателем расшаренного интернета.
примечание: или не станете.