Optymalizacja paczek dystrybucyjnych w Slackware

Slackware FAQ - czyli baza pytań i odpowiedzi.

Moderatorzy: Moderatorzy, Administratorzy

ODPOWIEDZ
1973_PL
Użytkownik
Posty: 6
Rejestracja: 2004-06-16, 21:31
Lokalizacja: Szczecin

Optymalizacja paczek dystrybucyjnych w Slackware

Post autor: 1973_PL »

Optymalizacja paczek dystrybucyjnych w Slackware


Aby zwiększyć prędkość działania systemu i oprogramowania warto przekompilować pakiety, z wykorzystaniem odpowiednich parametrów, flag charakterystycznych dla posiadanego procesora.

Kod: Zaznacz cały

Spis treści
1. Zdobycie źrodeł pakietu
2. Flagi procesora
3. Modyfikacja skryptu Slackbuild 
4. Kompilacja źródeł, instalacja/uaktualnienie pakietu
5. Uwagi

1. Zdobycie źródeł pakietu
Po wybraniu pakietu, który chcemy przekompilować/zoptymalizować, musimy zdobyć jego dystrybucyjne źródła. W tym celu z serwera lustrzanego (np.: http://slackware.at/), ściągamy całą zawartość katalogu ze źródłami, dotyczącego wybranego programu (np.: GIMP /data/slackware-current/source/xap/gimp/). Oczywiście wybieramy odpowiednią wersję wydania Slackware. Ważne również, aby pobrać wszystkie znajdujące się tam pliki.


2. Flagi procesora
Podstawą optymalizacji kompilacji jest dobranie odpowiednich parametrów, flag właściwych dla posiadanego procesora, które będą wykorzystywane kompilator. Pomocą w tej dziedzinie służy podręcznik kompilatora gcc. Drogą na skróty jest skorzystanie ze skryptu gcccpuopt, który wyświetli charakterystyczne cechy naszego procesora. Można go ściągnąć ze strony http://www.pixelbeat.org/scripts/. Skrypt uruchamiamy w terminalu, poleceniem:
# sh gcccpuopt
Przykładowo, w przypadku procesora "Pentium4 1.6 GHz" wynik był następujący:

Kod: Zaznacz cały

-march=pentium4 -mfpmath=sse -msse2 -mmmx
A procesora Athlon 2000+:

Kod: Zaznacz cały

-march=athlon-xp -mfpmath=sse -msse -mmmx -m3dnow
Bezpieczną, sugerowaną opcją optymalizacji kodu jest -O2 (przy -O3 kod może będzie szybszy, ale i większy, co moze powodować przeciążenie pamięci cache i w efekcie mniej efektywną pracę).


3. Modyfikacja skryptu Slackbuild, kompilacja źródeł
Po wybraniu odpowiednich flag, przystępujemy do edycji skryptu Slackbuild. W naszym przykładzie będzie to plik gimp.SlackBuild. Najczęściej będzie nas interesowała sekcja podobna do poniższej:

Kod: Zaznacz cały

# Set initial variables:
CWD=$(pwd)
TMP=${TMP:-/tmp}
PKG=$TMP/package-gimp
rm -rf $PKG
mkdir -p $PKG

VERSION=2.2.13
ARCH=${ARCH:-i486}
BUILD=1

if [ "$ARCH" = "i386" ]; then
  SLKCFLAGS="-O2 -march=i386 -mcpu=i686"
elif [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
elif [ "$ARCH" = "s390" ]; then
  SLKCFLAGS="-O2"
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2"
fi
Zmieniamy wpisy zmiennej ARCH (również w instrukcji if) z i486 na i686. Następnie w odpowiednim miejscu, dotyczącym i686 zmieniamy flagi kompilacji na te wybrane przez nas. W efekcie otrzymamy, przykładowo następującą konfigurację:

Kod: Zaznacz cały

# Set initial variables:
CWD=$(pwd)
TMP=${TMP:-/tmp}
PKG=$TMP/package-gimp
rm -rf $PKG
mkdir -p $PKG

VERSION=2.2.13
ARCH=${ARCH:-i686}
BUILD=1

if [ "$ARCH" = "i386" ]; then
  SLKCFLAGS="-O2 -march=i386 -mcpu=i686"
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=pentium4 -mfpmath=sse -msse2 -mmmx"
elif [ "$ARCH" = "s390" ]; then
  SLKCFLAGS="-O2"
elif [ "$ARCH" = "x86_64" ]; then
  SLKCFLAGS="-O2"
fi
Uwaga! Zmienne mogą być różne, zazwyczaj CFLAGS, CPUOPTS lub SLACKCFLAGS, itp., jednak wszystkie powinny prezentować się podobnie: "-O2 -march=i386 -mcpu=i686". Zmienne te znajdują się w plikach XXX.SlackBuild. Czasami jednak znajdują się w dodatkowych plikach. Np. w przypadku KDE jest to plik KDE.options. Wynika to z faktu, że KDE składa się z wielu paczek na raz i możemy w ten sposób wszystkie skonfigurować za jednym razem.

Zazwyczaj, w Slackware, paczki kompilowane i przygotowywane są katalogu tymczasowym /tmp. Wskazuje na niego zmienna TMP w skrypcie. Niekiedy może się zdarzyć, że katalog ten znajduje sie na partycji/dysku, na którym jest mało miejsca, co uniemożliwi przygotowanie paczki. Należy wtedy zmienić wartość zmiennej TMP i podać odpowiedni, inny katalog z wystarczającą ilością miejsca. Czyli:

Kod: Zaznacz cały

TMP=${TMP:-/tmp}
Zmieniamy na:

Kod: Zaznacz cały

TMP=${TMP:-/katalog/dla/paczki}
4. Kompilacja źródeł, instalacja/uaktualnienie pakietu
Po dokonaniu zmian w skrypcie. Nadajemy mu prawo wykonywalności poleceniem:
# chmod +x gimp.SlackBuild
i uruchamiamy:
# ./gimp.SlackBuild

Nastąpi proces automatycznego rozpakowania źródeł, kompilacji i przygotowania nowego, zoptymalizowanego wg flag, pakietu. Będzie sie on znajdował w katalogu wskazywanym przez zmienną TMP.
Po tym zabiegu będzie można uaktualnić dotychczasową paczkę, wykorzystując polecenie # upgradepkg pakiet.tgz


5. Uwagi
- Przekompilowane/zoptymalizowane paczki działają szybciej, co ma pozytywny wpływ na prace z programami.
- Nie warto kompilować całego systemu (wszystkich paczek). Jeśli Ktoś ma ochotę to warto zainteresować sie dystrybucją Gentoo
- Zaleca się przekompilować kluczowe paczki, takie jak: kernel (mimo, że jego konfiguracja wygląda zupełnie inaczej), Xorg, KDE, Gnome, Xfce, QT, GTK i inne najczęściej wykorzystywane programy/biblioteki.




Autorzy: Skyscraper, 1973_PL, loop0
Ostatnio zmieniony 2006-08-25, 18:23 przez 1973_PL, łącznie zmieniany 6 razy.
ODPOWIEDZ