Рубрика: "Linux"
Обработка больших потоков трафика в Linux
В этой заметке я опишу методы увеличения производительности линуксового маршрутизатора. Для меня эта тема стала актуальна, когда проходящий сетевой трафик через один линуксовый маршрутизатор стал достаточно высоким (>150 Мбит/с, > 50 Kpps). Маршрутизатор помимо роутинга еще занимается шейпированием и выступает в качестве файрволла.
Использование source-rpm в Gentoo
В этой заметке я опишу использование source rpm (*.src.rpm) в Gentoo Linux.
Для начала установим rpm:
emerge app-arch/rpm
Далее нужно посмотреть зависимости пакета:
rpm -qp --qf "[%{REQUIRENAME} %{REQUIREFLAGS:depflags} %{REQUIREVERSION}\n]" kernel-2.6.18-194.17.4.el5.src.rpm
Описание на примере kernel-2.6.18-194.17.4.el5.src.rpm – исходники ядра Linux в CentOS.
При необходимости установите нужные пакеты.
Теперь устанавливаем пакет:
rpm -Uvh --nodeps kernel-2.6.18-194.17.4.el5.src.rpm
Spec-файлы (нечто вроде сценария компиляции) и исходники теперь разложены по соответствующим каталогам в /usr/src/rpm. Собираем исходники следующим образом (в случае с ядром мы получим нормальный каталог с исходниками CentOSовского ядра):
cd /usr/src/rpm/SPECS
rpmbuild --nodeps -bp --target=`uname -m` kernel-2.6.spec
ccache - кэш компилятора
Использование ссache может значительно ускорить сборку пакетов, которые компилируются несколько раз, так как заново компилироваться будут только файлы, которые изменились с последней компиляции.
Gentoo, Bluetooth и EDGE
Десктоп поставить пока негде, сижу с ноутом. Компиляция ядра греет ноутбук, который греет меня :) А душа просит инета, поэтому настроил связку pppd+bluetooth+корпоративный edge.
prelink и preload
Prelink позволяет уменьшить время загрузки приложений, связанных с множеством динамических библиотек, путем оптимизации на уровне структуры ELF файла.
Чтобы разобраться, что происходит при прелинкинге, нужно вспомнить о том, что подавляющее большинство Linux-приложений не содержит в себе весь необходимый для их работы код, а использует т.н. разделяемые библиотеки. И обычно программы при сборке связываются с такими библиотеками динамически, то есть необходимые функции вызываются из них в ходе загрузки программы. В одних случаях это происходит быстро, в других - раздражающе медленно. Печальным примером последнего является KDE - в частности, из-за громоздкости и сложности опорной библиотеки Qt, написанной на Си++. И бороться с этим перекомпиляцией и оптимизацией почти бесполезно - выигрыш в скорости не превышает нескольких процентов.
Однако операция динамического связывания программы с опорными библиотеками всегда происходит одинаково. И потому возникает предположение - а нельзя ли выполнить его раз и навсегда? Можно, и именно в этом - в сохранении библиотечных связей в исполняемом файле программы, - и заключается прелинкинг (его не следует смешивать со статической сборкой программ).
Я просто запускаю prelink -amfR (--all --conserve-memory --force --random) после каждого emerge -uavDN world.
Preload позволяет уменьшить время загрузки приложений не дожидаясь непосредственного запуска программы (эффективно для повторных запусков), за счёт загрузки в память наиболее интенсивно используемых данных. Является демоном, так что после установки добавьте его в автозагрузку.