Raspbian 64-bit moduna geçiyor


52

Gelen bu sayfayı , resmi RPi3 duyuru devletler:

İndirilenler sayfamızdan yeni bir NOOBS veya Raspbian imajına ihtiyacınız olacak. Lansman sırasında, diğer Raspberry Pi cihazlarında kullandığımız 32 bit Raspbian kullanıcısını kullanıyoruz; önümüzdeki birkaç ay boyunca 64-bit moduna geçmenin bir değeri olup olmadığını araştıracağız.

Sorum şu: İşlemcinin 64 bit olduğu göz önüne alındığında , işletim sisteminin 64 bit olarak çalıştırılmasının her şekilde daha iyi olacağı açık değil mi? Neyi kaçırıyorum?


9
Bir keresinde DEC / Alpha'da (uzun zaman önce) 32bit'ten 64bit OSF'ye yazılım taşıyan bir şirkette çalıştım. Kod temeli zaten 64 bit uyumlu olduğundan, yalnızca düz bir yeniden derleme. Tam sayı ve işaretçilerdeki ekstra bellek tüketiminden% 10 performans elde edildi. Bu, performansın üçlü basamak mhz ve çift (belki düşük üçlü) basamak hafızasında ölçüldüğü günlerde geri döndü. 4 + GB ram olmadan, mutlaka iyi bir fikir değildir.
Chris K,

6
64-bit ilk Pi'ye göre daha fazla bellek ile öder.
Thorbjørn Ravn Andersen

2
X86 tabanlı sistemlerde buna karar vermenin zorluğu bir hibrit abi'ye bile izin verdi: en.wikipedia.org/wiki/X32_ABI , 32bit pointer ve 64bit cpu registerları kullanıyor.
PlasmaHH

1
@ ChrisKaminski ama ARM ve x86 farklı. 32 - 64 bit arasında gittiklerinde, kayıt sayısını iki katına çıkarırlar ve çoğu durumda kodun daha hızlı çalışmasını sağlayan komut setinin bazı yönlerini yeniden tasarlarlar. İnternette çok sayıda kıyaslama görebilirsiniz
phuclv

@ rsaxvc yani bu yorumuma ne ekler? Ben "ARM dedi ve ... x86" 64 bit gidiş o mimarileri DEC / Alpha veya SPARC, MIPS gibi diğer mimarileri aksine uygulamanın performansını artırır söylemek
phuclv

Yanıtlar:


62

İşlemcinin 64 bit olduğu göz önüne alındığında, işletim sistemini 64 bitte çalıştırmanın her şekilde daha iyi olacağı açık değil mi?

Hayır, aslında değil. Bazı açılardan, 64 bit işletim sistemi çalıştıran olabilir Ahududu Pi'nin performansını bozabilir.

64 bit'in faydaları :

64 bit işlemci / işletim sistemi kullanmanın iki temel avantajı, cihazın 4 GB RAM'den daha fazlasını kaldırabilmesi ve doğal olarak 2^32bir bignum kütüphanesine ihtiyaç duyulmadan daha büyük tamsayıları işleyebilmesidir .

Ahududu Pi'nin 4 GB'dan fazla RAM'i yok. 1 GB RAM’de, iki ana avantajın ilki tamamen kaybettiniz. İkinci faydaya gelince, insanların yüzde kaçı vakıf için ikinci bir işletim sistemini desteklemenin mantıklı olduğu kadar dev rakamlar kullanıyor? Olduğu gibi, RPI yazılım yöntemlerini kullanarak çok büyük rakamlar kullanabilir, ancak bu alanda sürekli olacaksanız, yine de daha iyi donanım kullanmanız gerekiyor gibi görünüyor.

64 bit ile ilgili sorunlar :

Daha büyük bir sayı saklamak için yeteneği sihir tarafından verilmez. Aksine, bellek nesnelerinin boyutunun arttırılması gerekir. C (ve C ++) bu bir değiştirmek anlamına intiçin int64_t. Bu otomatik olarak yapılmaz, bu nedenle vakıf hakkındaki yorumlar iki dalı korumak istememektedir.

Ek olarak, çoğu uygulama 64 bit modunda çalıştırıldığında (çoğu kullanıcı için) bir fayda sağlamaz. Çoğu web tarayıcısının, MS Office'in ve diğer popüler yazılımların tüm ana bilgisayarlarının hala 32 bitlik bir şekilde sevk edildiğini ve bakım yapıldığını unutmayın. Ellerinizi 64 bitlik bir MS Office sürümünden edinebileceğinizden emin olun, ancak nadiren kullanılır.

Eğer uygulama / işletim sistemi 64 bit mimariden yararlanmak için yazılmışsa, uygulamanız daha fazla bellek kullanacak, çünkü değişkenler ve işaretçiler daha fazla yer kaplıyor. Genellikle bu, avantajlardan faydalanacak makineler için nispeten küçük bir işlemdir. Bizim durumumuzda çok az avantajımız ve çok az RAMimiz var.

Ayrıca not :

Sadece 64 bit bir makinede çalışıyor olmanız, uygulamanın 32 bit olarak çalışmadığı anlamına gelmez. Windows, iki farklı yükleme yolları sağlayarak bu çok anlaşılır kılmakta C:\Program Filesve C:\Program Files (x86).

Peki, vakıf muhtemelen 64 bit destek sağlayacak mı? :

Aynı noktaya geri döndük, "Bazı insanlar fayda görebilir, ancak çoğunu yapmaz". 64 bit derleme sunan başka projeler de göreceksiniz, ancak temel çok hak edilmemiş (imo) bolluğa sahip olmadıkça, büyük olasılıkla olmayacak ve olmasın (imo). Ayrı bir 64 bit dal oluşturmak ve sürdürmek küçük bir çaba değildir ve dürüst olmak gerekirse, buna değmez.


7
C ve arkadaşlarınız hakkında konuştuğunuzu varsayarsak, <= int türündeki herhangi bir boyut aynı kalır. Linux adres modelinde olduğu gibi size_t ve işaretçiler de büyüklük gösterir. Ayrıca, hafıza haritalanmış G / Ç işlemleri yaparken önemli olan sanal adres alanının puanlarını tamamen kaçırıyorsunuz.

3
Fiziksel bellek miktarları ve sanal bellek arasında bir ayrım yapmak için gelişmiş değildir. Ayrıca yanlış bilgiyi yaymamak için de gelişmiş değildir. sizeof(char)her zaman birdir. Linux altında sizeof(short), sizeof(int), sizeof(float), sizeof(double)BITNESS ile değişmez. Bu iddialarınızda büyük bir fark var.

11
x64Bu cevabın kullanımı ile ilgili problemlerim var . x64kısaltmasıdır x86-64. Bu, "64 bit" ile eşanlamlı değildir . 64 bit ARM CPU'ları vardır AArch64.
Oli,


3
64 bit işletim sistemine geçmenin en büyük nedenini kaçırdınız. 19 Ocak 2038. 32 bit Linux bu zamanın son tarihlerini idare edemiyor. Düzeltme 64 bit Linux (ve 32 bit unix zamanını temel alan herhangi bir yazılımı yükseltme) oldukça uzun zaman oldu. 2038 şimdi 20 yıl uzakta, ancak küçük bir gömülü makine olan Raspberry Pi, gelecekte bu kadar çok kullanım potansiyeline sahip. Hiç kimse 1980'de Y2K sorununu ciddiye almadı.
Steve Sether

19

Bu durumun ARM ve Intel / AMD için farklı olduğunu belirtmekte fayda var. Bunun nedeni, x86_64'e geçişin, aynı zamanda, yalnızca 8 genel amaçlı sicile sahip olmaları nedeniyle sakat bırakılan ve 64-bit modunda ikiye katlanan, kötü yaşlanan mimariyi güncelleme fırsatı olarak da kullanılmasından kaynaklanıyordu. Bu nedenle, bir Intel / AMD sisteminin 64 bit moda geçilmesi, performansta önemli bir fark yaratan gerçek özelliklere olanak sağlaması anlamına gelir.

ARM'in başlaması gereken bir sorun yok (AArch64 kayıtları eklese de, 32 bit mimariler onlar için açlıktan ölmüyordu), bu nedenle faydalar temel olarak daha doğrudan adreslenebilir bellek ve yerel büyük tamsayı desteğidir - büyük ölçüde daha az anlaşma ve belki dezavantajıyla karşı karşıya (her şey için daha fazla bellek kullanılmış).

(Bir kenara, bu nedenle, Intel / AMD Linux için "x32" abi oluşturma , CPU geliştirmelerini sürdürme, ancak 32-bit işaretçiler kullanma konusunda bazı çalışmalar yapıldı .)


5
AArch32'nin zaten x86'dan daha fazla kaydı olmasına rağmen, AArch64 daha iyi yapıyor çünkü artık ayrı SP ve PC var. En çok 14 genel amaçlı kayıt yaptırmadan önce. Ayrıca daha iyi bir dizayn talimat kümesine sahip ARM64 performans avantajı var mı , 64-bit ARM (Aarch64) Talimatlar 32 bit ARM (Aarch32) Talimatlar karşılaştırıldığında 15 ila 30% oranında Performansını Artıracak
phuclv


Pi3'te kıyaslama yapmak ilginç olacaktır (özellikle gerçek dünyadaki görevlerle).
mattdm

6

Pi 3'te Debian Aarch64 (ARMv8) kullanan insanlar olduğundan eminim; birçok kişi için (kesinlikle o zor olmaz burada bakın bu işe yarayabilir hakkında bazı ipuçları için) 1 için her ne kadar çoğu kullanıcı bir streç biraz olasılıkla gerçek değildir.

Bununla birlikte, eğer Raspbian ve / veya Vakıf 64-bit sürümüyle çıkmazsa, blogları, vb. Olanları giderek daha iyi hale getirecek, bir tanesinin nasıl çalıştırılacağını ve ihtiyaç duyduğunuz halleri nasıl alacağınızı açıklayacaksınız.


Pi 3 için şimdi bir Fedora aarch64 sürümü var .


1. 32 bitlik /opt/vcşeylerle ilgili bazı komplikasyonlar olacak , bunun ne kadar üstesinden gelinebileceğinden emin değilim; x86-64 için 32-bit uyumlu lib'ler vardı ama Aarch64 ... belki değil.


1
raspbian.org/RaspbianFAQ#What_is_Raspbian.3F durumları (Raspbian hakkında konuşmak): Liman, resmi Debian wheezy armhf sürümünün yalnızca ARM mimarisinin sürümleriyle uyumlu olduğundan, Ahududu Pi (ARMv7-A CPU’larda kullanılandan daha sonra) ve daha yüksek, Ahududu Pi'nin ARMv6 işlemcisi vs). Bu hala RPi3 ile doğru mu?
zundi

@sandy Bence bu 1) Nispeten eski; 2) O zamandan beri şaşırmış ve / veya düzeltilmemiş, çünkü Debian armhf sert yüzdürme ile derlendiğinden, hf bunun için, yani ARMv4 / 5 için ilk kullanılan ve ISA'nın kullanmadığını düşündüğü başka bir debian var. sert yüzdürme (sanırım ne belli bir noktaya kadar 6 yaptım, ama çoğu zaman böyle oldu, yani ARM1176JZ (F) -S). Yani Raspbian, dönemi, donanım kayan nokta desteğine sahip ARMv6'nın yalnızca bir sürümü var, A / B / + / 0 modelleri ile 2 arasındaki tek fark, muhtemelen 3 ile aynı şekilde kullanılan çekirdek.
goldilocks

2
... "armel" Raspbian’dan önce kullanılan hf olmayan Debian’dır.
goldilocks

@sandy o kitance pi1 günlerinde yazılmıştır, bu yüzden pi dediği zaman şimdi pi1 dediğimiz anlamına gelir. Pi2 için debian armhf imgeleri yayınlayan üçüncü taraflar var (ve muhtemelen pi3) ancak rpf şimdilik tüm panolar için tek bir resimle bağlantı kurmaya karar verdi.
Peter Green

5

Lansman tanıtımının bir parçası olarak, bir kaygının iki ayrı kod tabanı (32 ve 64 bit) sağlama çabası olduğunu belirtti. Adafruit PI3 Launch videosunda ayrıca 64bit işlemciye geçmenin saat hızını artırmak konusunda 64bit modunu kullanmaktan daha fazla olduğunu belirtti.


Kodun aynı olacağını düşünmüştüm, ancak derleyicinin mimariden yararlanmak için son kodu optimize etmekle sorumlu olacağını düşündüm. Yeni bir yapı oluşturmak nispeten kolay mı? Diyelim ki Debian'ı 64 bitte çalıştırmak?
zundi

@sandy Easy, beceri seviyenize ve deneyiminize bağlı olacaktır. Şimdi buna ihtiyaç duyan kullanım durumu nedir?
Steve Robillard

Özellikle hiçbiri, RPI3'ün yapabileceği performansı maksimize etmek istiyor.
zundi

@sandy Vakıf, Pi3'ün değiştirilmesinin Pi3'ün Pi2'yi takip ettiği kadar hızlı gelmeyeceğini söyledi (yaklaşık 1 yıl). Yeni bir donanıma gerek duymadan bir performans artışı için anahtarı 64bit’e kullanabilirler - Tüm bunların benim açımdan spekülasyon olduğunu unutmayın.
Steve Robillard

4

64 bit adresleme, 1GB'tan fazla belleğiniz olmasa bile yararlı olabilir.

Büyük dosyaları bellek eşlemenizi sağlar, böylece bir göstericiniz vardır ve işletim sisteminin I / O'yu şeffaf bir şekilde yapmasına izin verir. G / Ç yapmanın başka bir yolu. Büyük dosyalarda bunu yapmak için 64 bit adrese ihtiyacınız var.

Bunun yararlı olabileceğini düşündüğüm bir başka örnek de, takas alanı kullanarak işlemlerin 2GB'tan fazla adres alanına sahip olmasını sağlamak. Son zamanlarda çok fazla depolama alanı olan 32 bit NAS'ta ve hasarlı bir dosya sisteminde bir sorun yaşadım. Önbellekleme seçenekleri açıkken bile fsck işlemi yetersiz kaldı. Takas alanı eklemek sorunu çözemedi, 32-bit adres alanı oradaki zor sınırdı. Yani bu büyük hasarlı dosya sisteminde fsck'i 32-bit bir ikili ile çalıştırmanın bir yolu yoktu. 64-bit bir ikili ve biraz takas alanı ile, çalışacaktı.


3

64 bit yerel programların daha büyük olduğu (veri ve işaretçiler için daha fazla bellek) ve 4 GB RAM'den daha az olan ARMv8'deki 64'e 32 bit işletim sistemine kayda değer bir fayda olmadığı iddiasını ele alarak, birkaç tane artırmak istiyorum. puan.

ARMv8'in yürütülmesini daha verimli kılan ARMv7 (ve öncesi) ve ARMv8'de işlerin nasıl yapıldığına dair bazı önemli farklılıklar vardır. Bunlardan bazıları daha geniş iç veri yollarından, bazıları özel durumların ortadan kaldırılması ve daha derin bir boru hattından kaynaklanmaktadır). Bu aynı değişiklikler, ARMv8'in ARMv7 (32 bit) kodunu çalıştırmada daha iyi olmasını sağlar.

Yerel 64 bit uygulamalar 64 bit işaretçiler kullanır ve 'size_t' 64 bittir, bu yüzden bunları kullanan elemanlar büyür. Verilerin geri kalanı aynı boyutta kalma eğiliminde olacaktır. Bununla birlikte, bunun önemi, yürütülebilir görüntülerin boyutuna göre küçüktür.

64 bit yerel'in gerçekten parladığı yerde (büyük tam sayı ve kayan nokta öğeleriyle ilgilenmiyorsanız) daha büyük bir sanal adres alanına sahip:

  • İşletim sistemi, sanal adres alanını daha fazla ve daha büyük bölümlere bölerek paylaşılan kaynakların daha kolay yönetilmesine, farklı yetki seviyeleri arasında daha düzenli bağlam geçişlerine ve benzerlerine izin verebilir.
  • Değişimi etkinleştirdiyseniz, fiziksel bellek sınırlarını aşarak daha fazla ve daha büyük işlemler gerçekleştirebilirsiniz (bu aslında 32 bit için de geçerlidir, ancak 64 bit'de daha az sınırlıdır).

İşletim sisteminin şu anda bundan faydalansa da faydalanmasa da, ana akım 32 bit'ten uzaklaştıkça fark yaratacaktır.

Yerel bir 64 bit AArch64 çekirdeğine taşınmanın en iyi argümanının taşınabilirlik olduğunu düşünüyorum: Ana bilgisayar masaüstü çoğunlukla 64 bit işlemcilere taşındı ve 64 bit kabul eden daha fazla paket görüyorum ve bu kodu 32 bit'e geri yüklemek daha zor 32 ila 64 bit arasında taşıma yerine. Kullanıcı alanında, çoklu-arşiv kitaplıklarını kurduğunuzu varsayarak, 32-bit uygulamaları ve 64-bit uygulamaları yan yana çalıştırabilirsiniz, bu nedenle 32-64 bit bağlantı noktasına gerek duymazsınız Önemli olmak. 64 bit işletim sistemi size daha geniş bir yazılım yelpazesi sunar.

Ahududu PI 3 için 64 bit çekirdek üretmenin kolay olduğunu söylemiyorum - düşük seviyede değişiklik gerektiren önemli farklılıklar var, tüm aygıt sürücüleri 64 bit temiz değil (özellikle ARM'e özgü GPU'lar için sürücüler). Raspberian’ın 32 bit işletim sistemi olarak kalacağı olabilir, ancak (uzun vadede) kısa görüşlü olduğuna inanıyorum.

Tek bir önyükleme ortamı (örneğin, SD kart) işletim sisteminin hem 64 hem de 32 bit sürümlerini içerebilir ve ikincil önyükleme yazılımı (u-boot, arm-boot ve diğerleri) hangisinin yükleneceğini belirleyebilir. En zor kısım kullanıcı alanıdır - dosya sistemi 64 bitlik öğelerin işe yaramayacağı 32 bit sistemlerde bile çok katmanlı olmalıdır. Gereksiz kütüphaneleri kaldırmak için ilk açılıştan sonra çalıştırılabilecek bir betik veya yardımcı programla ve sadece 32 bit sistemlerde program çalıştırılabilirleriyle ilgilenirim.


Belki de ARM için x32 ABI'ye ihtiyacımız var. O zaman küçük işaretçilere ve tüm kayıtlara sahip olabiliriz.
rsaxvc

2

Mevcut cevaplar 64 bitlik bir kemerin problemlerini çok iyi kapsıyor, fakat yükseltme konusunda çok fazla avantaj olmadığını görmüyorum. Yani, işte son zamanlarda keşfettiğim iki tane:

  • PHP, Unix zaman damgalarını işlediğinde, 32 bitlik bir kemerdeki tamsayı büyüklüğü tarihler üzerinde bir üst sınır belirler, böylece 2038'de belirli bir günün ötesine geçemezler . Bunun zaman damgalarını işleyen tüm diller için bir sorun olacağını umuyorum. (Neyse ki, PHP'nin DateTime gibi Unix zaman damgalarını kullanmayan tarih işleme alt sistemlerinin çoğu, özellikle eski CPU'larda bile bu sorunla sınırlı kalmayacak şekilde tasarlanmıştır).
  • Mongo, bu kemer üzerinde 2G'nin altındaki veritabanlarıyla sınırlıdır ve 32 bit sürümlerin kullanımdan kaldırılması yakında. Gönderen kılavuzda :

    MongoDB 3.2'den başlayarak, 32 bit ikili dosyalar kullanımdan kaldırıldı ve gelecek sürümlerde kullanılamayacak.

    Her ne kadar 32 bit Linux ve Windows için mevcut olsa da, üretim dağıtımları için uygun değildir. 32 bit sürümler ayrıca WiredTiger depolama motorunu desteklemez.


Tuhaf bir şekilde, bu platformunuza bağlıdır. Genellikle tamsayı büyüklüğü değil, 'C' kütüphanesindeki time_t büyüklüğü 32-bit platformlarda bile, bazı CPU zaman yükü ile 64-bit bir time_t kullanmak mümkündür, ancak bunu yaparken ikili bir uyumluluk sorunu olduğu için pek çok 32-bit platform henüz bunu yapmaz.
rsaxvc

@rsaxvc, ilginç, teşekkürler. Öyleyse PHP'yi yeniden derleyerek 64-bit zaman işleme alabilir miyim, yoksa altta yatan C kütüphanelerinin de değiştirilmesini mi gerektirir? İlki benim yeteneğimde olacaktı, ama ikincisi hakkında emin olamadım - Ras'ın tamamını [kendim de bianla] yeniden derlemeye başlamıştım, ancak bunu yapmak için basit bir talimat yok gibi görünüyor (yine de).
halfer

Linux için çekirdeği, libc'yi ve uygulamanızı düzeltmeniz gerekir. Muhtemelen buna değmez. Biraz okuduktan sonra, OpenBSD (RPI'de yok) time_t 5.5'ten beri 64 bit. 32-bit Windows üzerinde Visual Studio 2005 veya daha yeni bir time_t kullanarak 64-bit.
rsaxvc

@rsaxvc: Tamam, teşekkür ederim. 64-bit işletim sistemi için beklememin mantıklı gelip gelmediğini merak ediyorum - birkaç ay öncesine ait birkaç haber makalesinde yakında geliyordu ....:-)
halfer

-4

Bu konudaki düşüncelerim: Bir ARM işlemcinin hafızayı nasıl hedeflediğini tam olarak bilmeme rağmen, bunu size programladığım önceki çoklu CPU mimarilerinden söyleyebilirim (SPARC / Alpha / i386 / AMD64 / X86_64): paylaşılan hafıza ve adresleme kullanırken "gerçek" sanal adres işaretçisiyle, 64 bit'e geçiş önemsiz değildir. Memcpy ne yapması gerekiyorsa yapsa da, 64 bitte verilerin böyle saklandığını dikkate almanız gerekir (geriye doğru bit):

HGFEDCBA
HGFEDCBA
HGFEDCBA

henüz 32 bit olarak şöyle görünür:

ABCD
ABCD
ABCD

Bu nedenle, RAM'de bir jpeg sakladığınızda 32 bitte, başlık baytlarını okuyabilir veya kenar saptamasını, doğrusal bir şekilde herhangi bir sorun yaşamadan yazabilirsiniz *. Ancak 64 bit mimaride bu değişiyor:

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
Endianness'in kelime büyüklüğü ile ilgisi yok. Heck, birçok mimar programcının ARM de dahil olmak üzere endianness'i seçmesine izin verir! Ayrıca, "64 bit" söz konusu mimariye bağlı olarak tamamen farklı sonuçlar doğurabilir ve mimariler arasında karşılaştırma yapmak veya aralarında benzerlikler çizmeye çalışmak zordur.
Bob

1
Ben = - geçerli olduğunu sanmıyorum.
rsaxvc
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.