CAT | linux
Иногда нам приходится собирать приложения из исходников. Причин для этого море – старая версия в репозитории, это приложение в репозиторий не попало, или нам нужно его пропатчить. Не важно…
У сборки из исходников есть один очевидный минус – удалить приложение практически нереально. В некоторых мы можем написать make uninstall, но таких приложений не так уж много.
В linux для этого существует утилита checkinstall — она создаёт пакет из архива с исходниками, который корректно ставится и удаляется. И работает она очень просто:
(more…)
Для начала расскажу, как обычно работают сервера:
- Создаётся сокет, который слушает порт
- Вызывается системный вызов accept, который берёт первого клиента из очереди соединений, а если его нет – то блокирует приложение до тех пор, пока он не появится
- Приложение что-то делает с этим клиентом и в конце концов с ним прощается
- goto пункт два
nginx и lighttpd использует вместо accept функции select/kevent/epoll, которые позволяют работать со многими клиентами одновременно, но это уже отдельная история (к асинхронным веб-серверам accept-фильтры применимяются точно так же)
Accept-фильтры – это модули ядра FreeBSD, которые не говорят, что сокет готов до тех пор, пока не выполнится какое-то условие. Я нашёл только два фильтра:
- dataready – accept блокирует сокет до тех пор, пока в него прийдут данные. Когда мы получаем сокет, мы уже точно можем из него что-то считать
- httpready – сокет блокируется до тех пор, пока не прийдёт полный GET/HEAD запрос. Соответственно, нам не надо тратить время на переключение контекста, если запрос ещё не собрался.
Остановимся на фильтре httpready
Буферизирует он только GET и HEAD запросы, так как в POST/PUT может прийти 600мегабайтный порнофильм.
Итак, подключаем модуль accf_http:
kldload accf_http
echo 'accf_http_load=”YES”' >> /boot/loader.confДалее нужно изменить работу с сокетом — установить опцию httpready:
struct accept_filter_arg afa; bzero(&afa, sizeof(afa)); strcpy(afa.af_name, "httpready"); setsockopt(sok, SOL_SOCKET, SO_ACCEPTFILTER, &afa, sizeof(afa));
Результаты тестов
Так как существует мнение, что accept-фильтры бесполезны, мы решили провести тестирование. Веб-сервер был выбран AnyEvent::HTTPD, клиент – ab. Итак, результаты:
- локальная машина, 10000 запросов, concurrency = 4: httpready даёт прирост в 10%
- локальная сеть, 10000 запросов, concurrency=1000: httpready даёт прирост в 10%
- локальная сеть, 10000 запросов, concurrency = 4: прирост в 25%
- локальная сеть, 1000 запросов, concurrency = 1: в два раза!
В боевых условиях, при наличии GPRS, 256k и прочего позора цивилизации, скорость ещё увеличится.
Настройка веб-серверов
В apache 1.3+ и nginx accept-фильтры поддерживаются.
Apache под FreeBSD изначально содержит такую конфигурацию:
AcceptFilter http httpready AcceptFilter https dataready
и менять её не стоит.
А вот в настройках сервера nginx стоит добавить опцию
accept_filter "httpready";
Ссылки
- статья Игоря Сысоева
- man accf_http
- man accf_data
По-перше – обновил себе Ubuntu до 9.04. Абсолютно юзабельна, удобна и красива. Не смотря на то, что бета. Пока ни одного бага не заметил

Поставил себе нативный Google Chrome. Это сообщение пишу из него, рискуя тем, что он вылетит к чертям. Он падает в кору, если что-то вставить из буфера обмена, или если попадёшь на автодополнения. Ни вкладки, ни настройки не работают. Но для демонстрации фич он отлично подходит. Всё работает очень-очень быстро.
Поставил Synapse. Почему-то в среде linux спра… ( ну нихрена себе, хром даже орфографию проверяет ) справедливо такое утверждение – чем лучше Jabber-клиент, тем более уёбищный у него интерфейс. Буду надеяться, что Synapse нарушит эту традицию. Интерфейс у него – лучший из всех клиентов, которые я когда-либо видел. Если сделают обещаную поддержку твиттера – он займёт прочное место у меня на десктопе.
Он написан на Gtk (придурки IMHO) и похож на свою виндовую версию.
Сегодня вечером поставлю и расскажу что и как
Пакет под Debian лежит здесь:
https://launchpad.net/~chromium-daily/+archive/ppa
use feature 'say'; say scalar(localtime(1234567890))
Sat Feb 14 02:31:30 2009
Никогда не слышал об этом файле. Когда узнал – был шок.
Оказывается, команда ftp не такая тупая как я думал.
У этого файлика есть две фичи
- Запоминание логина/пароля
machine ftp.freebsd.org login anonymous password edwin@mavetju.org
machine myownmachine login myusername password mypassword
теперь ftp myownmachine пустит вас без пароля
- Макросы для команды ftp
macdef uploadtest cd /pub/tests bin put filename.tar.gz quit
macdef dailyupload cd /pub/tests bin put daily-$1.tar.gz quit
Этот же файл для аутентификации понимает Net::FTP
Расскажу вам про очень полезную вешь. Которую я даже сам редко использую. Прочёл я о ней в книге Стива Макконнела “Совершенный код”. Это Библия программиста. Советую прочесть всем.
Псевдокод
Когда вам нужно создать метод, не нужно торопиться и писать кучу кода. Попробуйте начать работать по такой схеме:
(more…)
Сегодня утром она вышла.
А ещё я узнал как апиться из консоли. для этого предназначена команда do-release-upgrade
Для желающих скачать. Разработчики слёзно просят не качать с FTP. Юзайте торренты. Сервера Ubuntu хотят жить.)


