Odnosząc się do twierdzenia, że 64-bitowe programy macierzyste są większe (więcej pamięci na dane i wskaźniki) oraz że nie ma zauważalnych korzyści dla 64-bitowego systemu operacyjnego na ARMv8 z mniej niż 4 GB pamięci RAM, chciałbym podnieść kilka zwrotnica.
Istnieją pewne znaczące różnice w sposobie działania w architekturze ARMv7 (i wcześniejszych) i ARMv8, które zwiększają wydajność wykonywania ARMv8. Niektóre z nich pochodzą z szerszych wewnętrznych ścieżek danych, inne to eliminacja szczególnych przypadków i znacznie głębszy potok). Te same zmiany sprawiają, że ARMv8 lepiej działa z kodem ARMv7 (32 bity).
Natywne 64-bitowe aplikacje używają 64-bitowych wskaźników, a 'size_t' ma 64 bity, więc elementy, które je wykorzystują, stają się większe. Pozostała część danych będzie miała ten sam rozmiar. Znaczenie tego jest jednak niewielkie w stosunku do wielkości plików wykonywalnych.
Tam, gdzie naprawdę świeci 64-bitowy natywny (jeśli nie obchodzi Cię duża liczba całkowita i liczba zmiennoprzecinkowa), ma większą wirtualną przestrzeń adresową:
- System operacyjny jest w stanie podzielić wirtualną przestrzeń adresową na coraz większe sekcje, umożliwiając łatwiejsze zarządzanie zasobami współdzielonymi, usprawnione przełączanie kontekstu między różnymi poziomami uprawnień i tak dalej.
- Jeśli włączyłeś zamianę, możesz uruchamiać coraz więcej procesów, przekraczając limity pamięci fizycznej (jest to prawdą również w 32 bitach, ale masz mniej ograniczeń w 64 bitach)
Niezależnie od tego, czy system operacyjny korzysta z tego, czy nie, robi to różnicę, ponieważ główny nurt odchodzi od wersji 32-bitowej.
Myślę, że najlepszym argumentem przemawiającym za przejściem do natywnego 64-bitowego jądra AArch64 jest przenośność: główny pulpit został przeniesiony głównie do 64-bitowych procesorów, i widzę więcej pakietów, które zakładają 64 bity, a przeniesienie takiego kodu z powrotem do 32 bitów jest trudniejsze niż portowanie od 32 do 64 bitów. W przestrzeni użytkownika możesz uruchamiać 32-bitowe aplikacje i aplikacje 64-bitowe obok siebie, zakładając, że zainstalowałeś biblioteki wieloskalowe, więc nie jest wymagane portowanie od 32 do 64 bitów tam, gdzie nie materia. 64-bitowy system operacyjny zapewni po prostu większy wybór oprogramowania.
Nie twierdzę, że tworzenie 64-bitowego jądra dla Raspberry PI 3 jest łatwe - istnieją znaczne różnice, które wymagają zmian na niskim poziomie, nie wszystkie sterowniki urządzeń są 64-bitowe czyste (szczególnie sterowniki dla GPU specyficznych dla ARM). Możliwe, że Raspberian pozostanie 32-bitowym systemem operacyjnym, ale wierzę, że (w długim zasięgu) jest krótkowzroczny.
Jeden nośnik rozruchowy (na przykład karta SD) może zawierać zarówno 64-bitową, jak i 32-bitową wersję systemu operacyjnego, a dodatkowe oprogramowanie rozruchowe (u-boot, arm-boot i inne) może określić, który z nich załadować. Najtrudniejszą częścią jest obszar użytkownika - system plików musiałby być wieloskalowy, nawet w systemach 32-bitowych, w których 64-bitowe pliki będą bezużyteczne. Rozwiązałbym to za pomocą skryptu lub narzędzia, które można uruchomić po pierwszym uruchomieniu, aby usunąć niepotrzebne biblioteki i pliki wykonywalne programów w systemach tylko 32-bitowych.