Jak zapewne wiecie, Go został zaprojektowany tak, żeby budować binaria specyficzne dla konkretnej architektury i systemu operacyjnego. Te specyficzne dla architektury i OS binaria nazywamy targetem. Możliwość cross-compile (kompilacji krzyżowej) to jedna z najfajniejszych funkcji Go – można na przykład użyć GOARCH=ppc64 GOOS=aix go build
, żeby na Linuxie czy Windowsie zbudować aplikację dla systemu AIX działającego na procesorach Power. Oczywiście też nic nie stoi na przeszkodzie, żeby skompilować program bezpośrednio na AIX.
Jest jednak jeden dodatkowy trik, który bierze pod uwagę wersję architektury i optymalizuje wybór kodu ASM (assembler), używanego podczas budowania. 😉
PowerPC na AIX i zmienna GOPPC64
Żeby używać architektury Power ppc64 dla AIX z konkretnym targetem procesora, możesz skorzystać ze zmiennej GOPPC64. Oto dostępne opcje:
- power10 – działa tylko z Power 10
- power9 – działa z Power 9 i Power 10
- power8 (domyślna) – działa z wersjami 8, 9 i 10
Przykładowo:
GOARCH=ppc64 GOOS=aix GOPPC64=power9 go build
Dlaczego to ma sens w środowisku AIX?
Systemy AIX często działają na konkretnych, znanych konfiguracjach serwerowych IBM. Jeśli wiesz, że Twoja aplikacja będzie działać tylko na nowszych procesorach Power (np. power9 lub power10), możesz wykorzystać dodatkowe instrukcje procesora niedostępne w starszych wersjach. Go automatycznie wybierze zoptymalizowany kod assemblerowy dla danej wersji.
Specyfika środowiska AIX
AIX to system, który często działa latami na tych samych maszynach, więc optymalizacja pod konkretny procesor może mieć długoterminowy sens. W przeciwieństwie do środowisk chmurowych, gdzie nie wiesz na czym będzie działać Twoja aplikacja, w AIX zazwyczaj masz pełną kontrolę i wiedzę o sprzęcie.
Co oczywiste, jeśli masz farmy serwerów z różnymi generacjami Power, lepiej zostać przy domyślnym ustawieniu. 🏭
Czy to rzeczywiście coś zmienia?
W typowych aplikacjach biznesowych różnica może być niewielka, ale przy:
- Intensywnych obliczeniach matematycznych (typowe dla środowisk AIX)
- Przetwarzaniu dużych zbiorów danych
- Aplikacjach real-time
różnica może być zauważalna. Jak zawsze z optymalizacjami – najpierw zmierz, potem optymalizuj. 🔧
Bibliografia
Pro tip dla adminów AIX: Możesz sprawdzić wersję swojego procesora Power używając komendy
prtconf | grep -i processor
. Dzięki temu będziesz wiedzieć, jaką wartość GOPPC64 możesz bezpiecznie użyć.