Raspbian passa alla modalità a 64 bit


53

In questa pagina , l'annuncio ufficiale di RPi3 afferma:

Avrai bisogno di un'immagine recente di NOOBS o Raspbian dalla nostra pagina di download. Al momento del lancio, stiamo utilizzando la stessa area utente Raspbian a 32 bit che utilizziamo su altri dispositivi Raspberry Pi; nei prossimi mesi esamineremo se è utile passare alla modalità a 64 bit.

La mia domanda è, dato che il processore è a 64 bit, non è ovvio che l'esecuzione del sistema operativo a 64 bit sarà migliore in ogni modo? Cosa mi sto perdendo?


9
Una volta ho lavorato per un'azienda che portava software da 32 bit a 64 bit OSF su DEC / Alpha (molto tempo fa). Solo una ricompilazione diretta, poiché la base di codice era già conforme a 64 bit. 10% di prestazioni colpite dal consumo di memoria aggiuntivo in numeri interi e puntatori. Ciò avveniva nei giorni in cui le prestazioni venivano misurate in memorie a tre cifre mhz e doppie (forse a tripla bassa). Senza avere 4 + GB di RAM a bordo, non è necessariamente una buona idea.
Chris K,

6
64-bit paga prima con più memoria di quella del Pi.
Thorbjørn Ravn Andersen,

2
Su sistemi basati su x86 la difficoltà di decidere ciò ha persino lasciato ad un ibrido abi: en.wikipedia.org/wiki/X32_ABI che utilizza puntatori a 32 bit e registri cpu a 64 bit.
PlasmaHH,

1
@ChrisKaminski ma ARM e x86 sono diversi. Quando passano da 32 a 64 bit, raddoppiano il numero di registri e riprogettano alcuni aspetti del set di istruzioni che rendono il codice più veloce nella maggior parte dei casi. Puoi vedere molti benchmark su Internet
phuclv,

@rsaxvc quindi cosa aggiunge questo al mio commento? Ho detto "ARM e x86" per dire che in quelle architetture che vanno a 64 bit migliorano le prestazioni dell'applicazione a differenza di altre architetture come DEC / Alpha o Sparc, MIPS ...
phuclv

Risposte:


63

dato che il processore è a 64 bit, non è ovvio che l'esecuzione del sistema operativo a 64 bit sarà migliore in tutti i modi?

No in realtà, non lo è. In un certo senso, l'esecuzione di un sistema operativo a 64 bit potrebbe deteriorare le prestazioni del Raspberry Pi.

Vantaggi di 64 bit :

I due principali vantaggi dell'utilizzo di un processore / sistema operativo a 64 bit è che il dispositivo può gestire più di 4 GB di RAM e gestire in modo nativo numeri interi più grandi che 2^32senza la necessità di una libreria bignum.

Il Raspberry Pi non ha più di 4 GB di RAM. Con 1 GB di RAM, hai perso completamente il primo dei due vantaggi principali. Per quanto riguarda il secondo vantaggio, quale percentuale di persone sta effettivamente utilizzando un numero sufficiente di numeri giganti che ha senso per la fondazione supportare un intero secondo sistema operativo? Così com'è, l'RPi può usare numeri enormi attraverso metodi software, ma sembra che se vuoi essere costantemente in quel regno, devi comunque usare hardware migliore.

Problemi con 64 bit :

La capacità di memorizzare un numero maggiore non è garantita dalla magia. Piuttosto, la dimensione degli oggetti di memoria deve essere aumentata. In C (e C ++) questo significa cambiare un intin int64_t. Questo non viene fatto automaticamente, quindi i commenti sulla fondazione non vogliono mantenere due rami.

Inoltre, molte applicazioni semplicemente non offrono vantaggi (per la maggior parte degli utenti) quando vengono eseguite in modalità 64 bit. Si noti che la maggior parte dei browser Web, MS Office e tutta una serie di altri software popolari sono ancora spediti e gestiti in modo a 32 bit. Sicuramente puoi mettere le mani su una versione a 64 bit di MS Office, ma è usata raramente.

Se l'applicazione / il sistema operativo è scritto per sfruttare un'architettura a 64 bit, l'applicazione utilizzerà più memoria, semplicemente perché variabili e puntatori occupano più spazio. Di solito si tratta di un compromesso relativamente piccolo per le macchine che trarranno vantaggio dai vantaggi. Nel nostro caso, abbiamo pochissimi vantaggi e pochissima RAM.

Da notare anche :

Solo perché sei in esecuzione su un computer a 64 bit, non significa che l'applicazione non sia in esecuzione a 32 bit. Windows lo rende molto chiaro avendo due diversi percorsi di installazione C:\Program Filese C:\Program Files (x86).

Quindi, la fondazione probabilmente fornirà supporto a 64 bit? :

Siamo tornati allo stesso punto di "Alcune persone potrebbero vedere benefici, ma la maggior parte no". Vedrai sicuramente altri progetti che offrono build a 64 bit, ma a meno che la fondazione non abbia un sacco di flack immeritato (imo), probabilmente non lo faranno e non dovrebbero (imo). Creare e mantenere un ramo separato a 64 bit non è un piccolo sforzo e, onestamente, non sembra valerne la pena.


7
Supponendo che tu parli di C e degli amici, la dimensione di qualsiasi tipo <= int rimane la stessa. size_t e i puntatori aumentano di dimensioni, come potrebbe durare a lungo nel modello di indirizzo di Linux. Inoltre, ti perdi completamente i punti dello spazio di indirizzi virtuali, il che è importante quando esegui I / O con memoria.

3
Non è avanzato per fare una distinzione tra quantità di memoria fisica e memoria virtuale. Non è inoltre avanzato il fatto di non propagare disinformazione. sizeof(char)è sempre uno. Sotto Linux, sizeof(short), sizeof(int), sizeof(float), sizeof(double)non variano con bitness. Questo ha una grande differenza nelle tue affermazioni.

11
Ho dei problemi con l'uso di x64questa risposta. x64è un'abbreviazione di x86-64. Questo NON è sinonimo di "64 bit". Le CPU ARM a 64 bit lo sono AArch64.
Oli,

6
Esistono più professionisti a 64 bit di quelli elencati. C'è un vantaggio prestazionale in ARM64 , en.wikipedia.org/wiki/64-bit_computing#Pros_and_cons
phuclv,

3
Hai perso il motivo principale per passare a un sistema operativo a 64 bit. 19 gennaio 2038. Linux a 32 bit non è in grado di gestire le date oltre questa volta. La correzione è stata Linux a 64 bit (e l'aggiornamento di qualsiasi software basato sul tempo unix a 32 bit) per un bel po 'di tempo. Il 2038 è ormai passato 20 anni, ma Raspberry Pi, essendo una piccola macchina integrata, ha un potenziale per essere utilizzato così lontano in futuro. Nessuno ha preso sul serio il problema Y2K neanche nel 1980.
Steve Sether,

20

Vale la pena notare che la situazione è diversa per ARM e Intel / AMD. Questo perché il passaggio a x86_64 è stato anche usato come un'opportunità per aggiornare l'architettura gravemente obsoleta, sostanzialmente paralizzata dal fatto di avere solo 8 registri di uso generale - e raddoppiata in modalità a 64 bit. Quindi, passare da un sistema Intel / AMD alla modalità a 64 bit significa anche abilitare funzionalità reali che fanno una differenza significativa nelle prestazioni.

ARM non ha questo problema per cominciare (sebbene AArch64 aggiunga i registri, le architetture a 32 bit non erano affamate per loro), quindi i vantaggi sono fondamentalmente memoria più indirizzabile e supporto nativo per numeri interi di grandi dimensioni - molto meno di un grande affare, e forse contrastato dal rovescio della medaglia (più memoria utilizzata per tutto).

(A parte questo, per questo motivo, c'è stato del lavoro nella creazione di un abi "x32" per Intel / AMD Linux , mantenendo i miglioramenti della CPU ma usando i puntatori a 32 bit.)


5
Anche se AArch32 ha già più registri di x86, AArch64 lo fa meglio perché ora ci sono SP e PC separati. Prima di avere al massimo 14 registri di uso generale. Hai anche un set di istruzioni meglio progettato Esistono vantaggi prestazionali rispetto alle istruzioni ARM64 , ARM (Aarch64) a 64 bit Aumenta le prestazioni dal 15 al 30% rispetto alle istruzioni ARM (Aarch32) a 32 bit
phuclv


Sarà interessante vedere i benchmark sul Pi3 (in particolare con le attività del mondo reale).
Mattdm,

6

Sono sicuro che ci sono già persone che eseguono Debian Aarch64 (ARMv8) su Pi 3; non sarebbe certamente così difficile per molte persone ( vedi qui per alcuni indizi su ciò potrebbe funzionare) 1 sebbene per la maggior parte degli utenti sia probabilmente un po 'allungato.

Tuttavia, se Raspbian e / o la Foundation non escono con una versione a 64 bit, vedrai sempre più persone con blog, ecc., Che spiegano come gestirne uno e ottenere comunque le chicche di cui hai bisogno.


Ora c'è una versione Fedora aarch64 per Pi 3.


1. Ci saranno alcune complicazioni con le /opt/vccose a 32 bit , non sono sicuro di quanto sia sormontabile; c'erano le librerie compatibili a 32 bit per x86-64 ma Aarch64 ... forse no.


1
raspbian.org/RaspbianFAQ#What_is_Raspbian.3F afferma (parlando di Raspbian): la porta è necessaria perché la versione ufficiale di Debian wheezy armhf è compatibile solo con versioni dell'architettura ARM successive a quella usata su Raspberry Pi (CPU ARMv7-A e superiore, rispetto alla CPU ARMv6 del Raspberry Pi). È ancora vero con l'RPi3?
zundi

@sandy Penso che sia 1) Relativamente antico; 2) Da allora confuso e / o non corretto, dato che l'armhf Debian è compilato con hard float, ecco a cosa serve l'hf, rispetto a un altro debian per ARMv4 / 5 che penso sia stato il primo utilizzato su e che ISA non ha hanno galleggianti duri (penso che nemmeno 6 abbiano fatto fino a un certo punto, ma è stato così per la maggior parte del tempo, ovvero ARM1176JZ (F) -S). Quindi c'è solo una versione di Raspbian, periodo, ARMv6 con supporto hardware in virgola mobile, l'unica differenza tra i modelli A / B / + / 0 e il 2 è il kernel utilizzato, presumibilmente così anche con il 3.
goldilocks

2
... "armel" è il Debian non hf usato prima di Raspbian.
Riccioli d'oro

@sandy quella frase è stata scritta ai tempi di pi1, quindi quando dice pi significa quello che ora chiameremmo pi1. Ci sono terze parti che rilasciano immagini debh armhf per il pi2 (e presumibilmente pi3) ma per ora l'RPF ha deciso di rimanere con un'immagine per tutte le schede.
Peter Green

5

Come parte della pubblicità di lancio, ho visto che una preoccupazione riguarda lo sforzo richiesto per mantenere due basi di codice separate (32 e 64 bit). il video di lancio di Adafruit PI3 menzionava anche che il passaggio a un processore a 64 bit riguardava più la velocità di clock che aumentava il nuovo chip fornito che l'uso della modalità a 64 bit.


Ho pensato che il codice sarebbe stato lo stesso, ma il compilatore avrebbe avuto il compito di ottimizzare il codice finale per sfruttare l'architettura. È relativamente facile creare una nuova build? Ad esempio, eseguire Debian a 64 bit?
zundi

@sandy Easy dipende dal tuo livello di abilità ed esperienza. Qual è il caso d'uso che ne ha bisogno ora?
Steve Robillard,

Nessuno in particolare, volendo solo massimizzare le prestazioni di cui RPi3 è capace.
zundi

@sandy La fondazione ha affermato che la sostituzione del Pi3 non arriverà rapidamente come il Pi3 ha seguito il Pi2 (circa 1 anno). Potrebbero utilizzare lo switch a 64 bit per un aumento delle prestazioni senza richiedere nuovo hardware - Nota che questa è tutta una speculazione da parte mia.
Steve Robillard,

4

Affrontando l'affermazione che i programmi nativi a 64 bit sono più grandi (più memoria per dati e puntatori) e che non ci sono vantaggi evidenti per un sistema operativo a 64 vs 32 bit su ARMv8 con meno di 4 GB di RAM, desidero aumentare alcuni punti.

Ci sono alcune differenze significative nel modo in cui le cose vengono fatte in ARMv7 (e prima) e ARMv8, dal punto di vista architettonico, che rendono l'esecuzione ARMv8 più efficiente. Alcuni di questi provengono da percorsi di dati interni più ampi, altri dall'eliminazione di casi speciali e da una pipeline molto più profonda). Queste stesse modifiche rendono ARMv8 migliore nell'esecuzione del codice ARMv7 (32 bit).

Le applicazioni native a 64 bit usano puntatori a 64 bit e 'size_t' è 64 bit, quindi gli elementi che usano quelle diventano più grandi. Il resto dei dati tenderà a rimanere della stessa dimensione. Il significato di questo è minore, tuttavia, per la dimensione delle immagini eseguibili.

Dove il nativo a 64 bit brilla davvero (se non ti interessano cose di grandi numeri interi e in virgola mobile) sta avendo uno spazio di indirizzi virtuale più grande:

  • Il sistema operativo è in grado di dividere lo spazio degli indirizzi virtuali in sezioni sempre più grandi, consentendo una gestione più semplice delle risorse condivise, cambi di contesto più snelli tra diversi livelli di privilegi e così via.
  • Se hai abilitato lo scambio, puoi eseguire processi sempre più grandi, superando i limiti di memoria fisica (questo è vero anche a 32 bit, ma sei meno limitato a 64 bit)

Indipendentemente dal fatto che il sistema operativo ne approfitti attualmente, farà la differenza quando il mainstream si allontana da 32 bit.

Penso che l'argomento migliore per passare a un kernel AArch64 nativo a 64 bit sia la portabilità: il desktop mainstream si è spostato principalmente su processori a 64 bit e sto vedendo più pacchetti che assumono 64 bit e il porting di tale codice su 32 bit è più difficile rispetto al porting da 32 a 64 bit. Nello spazio utente, sei in grado di eseguire applicazioni a 32 bit e applicazioni a 64 bit fianco a fianco, supponendo che tu abbia installato le librerie multi-arch, quindi non è necessario eseguire il porting da 32 a 64 bit dove non importa. Un sistema operativo a 64 bit ti offrirà semplicemente la più ampia selezione di software.

Non sto dicendo che produrre un kernel a 64 bit per Raspberry PI 3 sia facile: ci sono differenze significative che richiedono modifiche a basso livello, non tutti i driver di dispositivo sono puliti a 64 bit (in particolare i driver per GPU specifiche ARM). È possibile che Raspberian rimanga un sistema operativo a 32 bit, ma credo che (a lungo raggio) sia miope.

Un singolo supporto di avvio (scheda SD, ad esempio) può contenere entrambe le versioni del sistema operativo a 64 e 32 bit e il software di avvio secondario (u-boot, arm-boot e altri) può determinare quale caricare. La parte più difficile è userland - il file system dovrebbe essere multi-arch, anche su sistemi a 32 bit in cui le cose a 64 bit saranno inutili. Lo affronterei con uno script o un'utilità che potrebbe essere eseguita dopo l'avvio iniziale per rimuovere le librerie e gli eseguibili di programma non necessari solo su sistemi a 32 bit.


Forse abbiamo bisogno di un ABI x32 per ARM. Quindi possiamo avere piccoli puntatori e tutti i registri.
rsaxvc,

4

L'indirizzamento a 64 bit può essere utile anche se non si dispone di più di 1 GB di memoria.

Ti consente di mappare in memoria file di grandi dimensioni, quindi hai un puntatore e lascia che il sistema operativo esegua l'I / O in modo trasparente. Solo un altro modo di fare I / O. Per eseguire questa operazione su file di grandi dimensioni è necessario un indirizzamento a 64 bit.

Un altro esempio in cui vedo che può essere utile è consentire ai processi di avere più di 2 GB di spazio degli indirizzi, utilizzando lo spazio di swap. Di recente ho avuto un problema su un NAS a 32 bit con molta memoria e un filesystem danneggiato. Il processo fsck ha esaurito la memoria, anche con le opzioni di memorizzazione nella cache attivate. L'aggiunta di spazio di swap non ha potuto risolvere il problema, lo spazio degli indirizzi a 32 bit era il limite rigido lì. Quindi non c'era proprio modo di eseguire fsck su questo grande filesystem danneggiato con un binario a 32 bit. Con un binario a 64 bit e un po 'di spazio di swap, sarebbe stato eseguito.


2

Le risposte esistenti coprono molto bene i problemi di un arco a 64 bit, ma non vedo molti vantaggi dichiarati dell'aggiornamento. Quindi, ecco due che ho scoperto di recente:

  • Quando PHP gestisce i timestamp Unix, la dimensione intera in un arco a 32 bit imposta un limite superiore per le date, in modo tale che non possano andare oltre un determinato giorno nel 2038 . Mi aspetto che questo sia un problema per tutte le lingue che gestiscono i timestamp. (Per fortuna, la maggior parte dei sottosistemi di gestione delle date che non utilizzano i timestamp di Unix, come DateTime di PHP, sono progettati specificamente per non essere limitati da questo problema anche su CPU meno recenti).
  • Mongo è limitato a database di dimensioni inferiori a 2G su questo arco e le build a 32 bit saranno presto deprecate. Dal manuale :

    A partire da MongoDB 3.2, i binari a 32 bit sono obsoleti e non saranno disponibili nelle versioni future.

    Sebbene le build a 32 bit esistano per Linux e Windows, non sono adatte per le distribuzioni di produzione. Le build a 32 bit inoltre non supportano il motore di archiviazione WiredTiger.


Stranamente, questo dipende dalla tua piattaforma. Di solito non è la dimensione intera, ma la dimensione di time_t nella libreria 'C'. Anche su piattaforme a 32 bit, è possibile utilizzare un time_t a 64 bit con un certo sovraccarico di tempo della CPU, ma molte piattaforme a 32 bit non lo fanno ancora, poiché si verifica un problema di compatibilità binaria.
rsaxvc,

@rsaxvc, interessante, grazie. Quindi potrei ottenere una gestione del tempo a 64 bit ricompilando PHP o richiederebbe anche la modifica delle librerie C sottostanti? Il primo sarebbe nelle mie capacità, ma non sono sicuro del secondo: stavo meditando di ricompilare l'intero Ras [anche io, ma non sembra esserci alcuna semplice istruzione per farlo (eppure, comunque).
halfer

per Linux, avresti bisogno di patchare il kernel, libc e la tua applicazione. Probabilmente non ne vale la pena. Dopo alcune letture, OpenBSD (no su RPi) time_t è a 64 bit dal 5.5. Su Windows a 32 bit che utilizza Visual Studio 2005 o successivo time_t è a 64 bit.
rsaxvc,

@rsaxvc: va bene, grazie. Mi chiedo se abbia senso aspettare che sia disponibile un sistema operativo a 64 bit - sembrava imminente su alcuni articoli di alcuni mesi fa ....:-)
Halfer

-4

I miei pensieri su questo: anche se non so esattamente come un processore ARM affronti la memoria, posso dirti questo dalle precedenti architetture multiple della CPU che ho programmato su (SPARC / Alpha / i386 / AMD64 / X86_64): quando uso memoria condivisa e indirizzamento con il suo "reale" puntatore di indirizzo virtuale, il passaggio a 64 bit non è banale. Sebbene memcpy faccia quello che dovrebbe fare, devi considerare che in 64 bit i dati sono memorizzati in questo modo (bit all'indietro):

HGFEDCBA
HGFEDCBA
HGFEDCBA

ma a 32 bit sembra così:

ABCD
ABCD
ABCD

Quindi, a 32 bit quando memorizzi un jpeg nella RAM, puoi leggere i suoi byte di intestazione o eseguire il rilevamento dei bordi, senza alcun problema in modo lineare * dire andando avanti byte per byte. Ma in un'architettura a 64 bit questo cambia:

32bit:

for (i=0; i< img_length/4; i++) 
{ 
    address=shm_start+i; 
    for (c=0; c< 4; c++) 
    { 
        byte=((*address >> c) & 15) 
    } 
}

64bit:

for (i=-; i< img_length/8; i++) 
{ 
    address=shm_start+i; 
    for (c=7; c>=0; c--) 
    { 
        byte=((*address >> c) & 15) 
    } 
}

5
L'endianness non ha nulla a che fare con la dimensione della parola. Diamine, molte architetture consentono al programmatore di selezionare l'endianness, incluso ARM! Inoltre, "64-bit" può avere conseguenze completamente diverse a seconda dell'architettura in questione, ed è difficile confrontare tra architetture o provare a disegnare somiglianze tra di loro.
Bob

1
Non credo che i = - sia valido.
rsaxvc,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.