題:
Raspbian會遷移到64位嗎?
zundi
2016-03-11 19:17:55 UTC
view on stackexchange narkive permalink

本頁中,RPi3官方公告指出:

您將需要從我們的下載頁面中獲取最近的NOOBS或Raspbian圖像。在發佈時,我們使用的是與其他Raspberry Pi設備相同的32位Raspbian用戶區。在接下來的幾個月中,我們將研究遷移到64位模式是否有價值。

我的問題是,鑑於處理器是64位,不是嗎?很明顯,以64位方式運行操作系統在各個方面都會更好嗎?我想念什麼?

我曾經在一家將DEC / Alpha上的軟件從32位OSF移植到64位OSF的公司工作(很久以前)。由於代碼庫已經符合64位標準,因此可以直接進行重新編譯。整數和指針會增加內存消耗,從而降低10%的性能。那時回溯到以三位數的兆赫茲和兩位(也許是低三位數)內存衡量性能的時代。如果沒有板載4GB以上的RAM,則不一定是個好主意。
與Pi相比,首先使用64位將獲得更大的內存。
在基於x86的系統上,很難決定是否採用混合abi:https://en.wikipedia.org/wiki/X32_ABI,它使用32位指針和64位cpu寄存器。
@ChrisKaminski但ARM和x86不同。當它們從32位變為64位時,它們使寄存器數量加倍,並重新設計了指令集的某些方面,這些方面使代碼在大多數情況下運行得更快。您可以在互聯網上看到很多基準
@rsaxvc那麼,這對我的評論有什麼補充?我說“ ARM **和** x86”的意思是,在那些體系結構中,與DEC / Alpha或Sparc,MIPS等其他體系結構相比,採用64位可以提高應用程序的性能。
我仍然認為這裡沒有這個問題的答案。每個人都在談論無關的內容。
八 答案:
Jacobm001
2016-03-11 22:17:43 UTC
view on stackexchange narkive permalink

假設處理器是64位的,不是很明顯以64位運行OS會在各個方面都更好嗎?

實際上不是,不是。在某些方面,運行64位操作系統 可能會降低Raspberry Pi的性能。

64位的優點

使用64位處理器/操作系統的兩個主要好處是,該設備可以處理超過4 GB的RAM,並且可以自然地處理大於 2 ^ 32 的整數,而無需使用bignum庫。

在撰寫本文時,Raspberry Pi的RAM不超過4 GB(注意:截至2020年8月,RPi 4的RAM為2至8 GB)。在1 GB的RAM上,您已經完全失去了兩個主要好處中的第一個。至於第二個好處,實際上有多少百分比的人使用了足夠大的數字以使基金會支持整個第二個操作系統?照原樣,RPi可以通過軟件方法使用大量軟件,但是如果您要在那個領域保持一致,則無論如何都需要使用更好的硬件。

問題64位

魔術沒有授予存儲更大數字的能力。而是,需要增加存儲對象的大小。在C(和C ++)中,這意味著將 int 更改為 int64_t 。這不是自動完成的,因此有關基礎的註釋不希望維護兩個分支。

此外,許多應用程序在64位模式下運行時(對於大多數用戶而言)根本沒有提供任何好處。請注意,大多數Web瀏覽器,MS Office以及大量其他流行軟件仍以32位的方式提供和維護。當然,您可以使用64位版本的MS Office,但很少使用。

如果編寫應用程序/操作系統以利用64位體系結構,則您的應用程序將使用更多的內存,僅因為變量和指針佔用了更多的空間。通常,對於要從特權中受益的機器來說,這是一個相對較小的折衷。在我們的例子中,我們的特權很少,而RAM卻很少。計算機,並不意味著該應用程序未以32位運行。 Windows通過具有兩個不同的安裝路徑( C:\ Program Files C:\ Program Files(x86))使這一點非常清楚。

那麼,基金會可能會提供64位支持嗎?

我們回到了同一點,“有些人可能會看到好處,但大多數人不會。”您肯定會看到其他提供64位構建的項目,但是除非基金會獲得很多不當(imo)漏洞,否則它們可能不會也不應(imo)。創建和維護一個單獨的64位分支並不是一件容易的事,老實說,這似乎並不值得。

假設您談論C和朋友,則任何類型<= int的大小均保持不變。在Linux的地址模型下,size_t和指針的大小會增加。您還完全錯過了虛擬地址空間,這在執行內存映射的I / O時很重要。
我不知道為什麼我不願意在這篇文章中提到虛擬地址。我覺得可能有點先進。無論如何,虛擬尋址不會改變應用程序從根本上佔用更多空間來運行的事實。我也覺得* C和朋友*的假設對於這個話題是相當安全的。
區分物理內存量和虛擬內存並不先進。它也不會傳播錯誤信息。 sizeof(char)始終為1。在Linux下,sizeof(short),sizeof(int),sizeof(float),sizeof(double)不會隨位而變化。那在你的主張上有很大的不同。
@LarsViklund好的,很公平...我假設如果我們正在努力使用64位構建,那是因為我們正在談論64位數字類(如在`int64_t`中)。
關於標記,請注意*標記不得用於表示技術上的錯誤或完全錯誤的答案*。
我在這個答案中使用`x64`有問題。 x64是x86-64的縮寫。這不是“ 64位”的同義詞。 64位ARM CPU是AArch64。
@Oli:實際上是一個好點……我不習慣在ARM系統中考慮64位系統。一個習慣消失了。現在已修復。
@Ghanima相當公平,我認為“以上都不是”適用。
@Jacobm001我不確定ARM,但在x86上可能早在x86-64(2003)引入PAE(1995)之前就使用64位PA,因此至少有一些先例可以將位定義集中在VA上, PA同樣,許多應用程序自由使用虛擬內存,因此如果使用mmap編寫應用程序,則可能會限製文件大小。
不同之處不僅在於寄存器等,大小或地址空間;還在於也許更重要的是,每一代ISA都應提高性能-儘管顯然在Piv 2上ARMv7代碼與Raspbian中使用的ARMv6(版本)之間的性能差異可以忽略不計。但是,如果他們保持不變,那麼它將比硬件落後兩代。我確信有人會以一種或另一種方式解決它。
@LarsViklund你錯了。雖然按標準,`sizeof(char)`必須始終為1,但實際上實現是[可以自由使用*任何*實際大小來存儲char類型的](http://stackoverflow.com/a/2215454/1151724)。
@goldilocks我的發言被錨定在現實中,在那裡,因為PDP和PR1ME沒有人使用了奇字節。如果您想兜售與所涉及的平台(AArch64)完全無關的規範的創新解釋,則有更好的選擇。
64位專業人士比您列出的更多。 [ARM64是否具有性能優勢](http://stackoverflow.com/q/26840776/995714),https://en.wikipedia.org/wiki/64-bit_computing#Pros_and_cons
@LưuVĩnhPhúc:我的目標不是列出所有可能的好處;我只是想給出一個高層次的概述。
@Jacobm001如果您有興趣了解使用Aarch64的一些實際性能優勢,我已經編寫了一個開放源代碼性能測試,該測試主要證明了GCC(64位)版本比32位版本好多少。對於普通用戶而言,最有用的好處是使用附加寄存器的編譯器可以提高性能(更寬/更大的地址空間並不是什麼大好處)。 Github倉庫在這裡:https://github.com/bitbank2/gcc_perf
對於64位系統,特別是對於服務器和無頭系統,有一個“殺手級應用”:mmap(2)。如果您的Pi正在處理大數據集,例如從OG Sense HAT收集的原始累積數據,則可能會發現能夠將整個數據集加載到虛擬內存空間中(無論您的物理內存是否可以容納它) ,虛擬內存操作系統可以為您交換物理內存中的數據),可以使編程更加容易。
您錯過了遷移到64位OS的最大原因。 2038年1月19日。32位Linux無法處理此時間之後的日期。該修復程序已經在64位Linux(並基於32位Unix時間升級任何軟件)上存在了一段時間。現在距離2038年已經有20年了,但是作為小型嵌入式計算機的Raspberry Pi在將來到現在仍具有一定的應用潛力。在1980年,也沒有人真正重視Y2K問題。
僅僅因為操作系統將int用作int64_t,並不一定意味著操作系統會浪費我們的內存。程序員始終可以選擇使用int32_t。因此它將停止任何使用。實際上,現在已不建議在嵌入式系統中使用INT。我不確定這個答案是否能說明為什麼64位OS不會是有益的。
mattdm
2016-03-11 23:49:12 UTC
view on stackexchange narkive permalink

值得注意的是,ARM和Intel / AMD的情況有所不同。那是因為切換到x86_64還被用作更新嚴重老化的體系結構的機會,該體系結構由於只有8個通用寄存器而受到嚴重破壞,並且在64位模式下增加了一倍。因此,將Intel / AMD系統切換到64位模式還意味著啟用真正的功能,這些功能會在性能上產生重大差異。

ARM並沒有遇到這個問題(儘管AArch64添加了寄存器, 32位體系結構並沒有挨餓),因此,好處基本上是可直接尋址的內存和對本機大整數的支持-少了很多大事,而且可能被缺點(更多的內存用於所有功能)抵消了。 / p>

(由於這個原因,在為Intel / AMD Linux創建“ x32” abi方面已經做了一些工作,保留了CPU增強功能,但使用了32位指針)

儘管AArch32已經比x86具有更多的寄存器,但AArch64卻做得更好,因為現在有單獨的SP和PC。在您最多擁有14個通用寄存器之前。您還具有設計更好的指令集[ARM64是否有性能優勢](http://stackoverflow.com/q/26840776/995714),[64位ARM(Aarch64)指令將性能提高了15%至30% 32位ARM(Aarch32)指令](http://www.cnx-software.com/2016/03/01/64-bit-arm-aarch64-instructions-boost-performance-by-15-to-30-與32位手臂aarch32指令比較/#ixzz42eodFeJQ)
[為什麼ARM的64位體系結構既對開發人員又對用戶有利?](http://www.androidauthority.com/arms-64-bit-architecture-is-good-for-developers-407346/),[Ubuntu 32位,32位PAE,64位內核基準測試](https://www.phoronix.com/scan.php?page=article&item=ubuntu_32_pae&num=3)
看到Pi3上的基準測試(特別是在實際任務中)會很有趣。
goldilocks
2016-03-11 21:21:49 UTC
view on stackexchange narkive permalink

我確定在Pi 3上已經有運行Debian Aarch64(ARMv8)的人了;對於許多人來說,肯定不會那麼難(請參閱此處,以獲取一些可能的線索) 1 sup>,儘管對於大多數用戶而言,

但是,如果Raspbian和/或Foundation沒有提供64位版本,您將越來越多地看到擁有博客的人,等等,解釋瞭如何運行一個博客。


Pi 3現在有 Fedora aarch64版本


1。 32位的 / opt / vc 東西會帶來一些麻煩,我不確定這是多麼可克服。曾經有x86-64的32位compat庫,但Aarch64 ...也許不是。 sup>

http://www.raspbian.org/RaspbianFAQ#What_is_Raspbian.3F指出(談論Raspbian):*該端口是必需的,因為Debian wheezy armhf官方發行版僅與ARM體系結構版本兼容,而不是與之前版本中使用的版本兼容。 Raspberry Pi(ARMv7-A和更高版本的CPU,而Raspberry Pi的ARMv6 CPU)。* RPi3是否仍然適用?
我認為@sandy是1)比較古老; 2)此後感到困惑和/或未糾正,因為Debian armhf是使用硬浮點編譯的,這就是hf的作用,而ARMv4 / 5還有另一個debian,我認為這是第一個在Linux上使用的,而ISA沒有具有強浮點數(我認為直到某個點都沒有6,但是在大多數時候都是這樣,又名ARM1176JZ(F)-S)。因此,只有一個版本的Raspbian,period,ARMv6具有硬件浮點支持,A / B / + / 0模型和2之間的唯一區別是所使用的內核,大概3也是如此。
...“ armel”是Raspbian之前使用的非hf Debian。
@sandy認為,情感是在pi1時代寫的,所以當它說pi時,意味著我們現在將其稱為pi1。有第三方發布pi2(以及預先推薦的pi3)的debian armhf圖像,但是rpf決定暫時在所有主板上使用一個圖像。
Steve Robillard
2016-03-11 19:21:40 UTC
view on stackexchange narkive permalink

在發布會的發布中,我看到它提到,一個問題是維護兩個單獨的代碼庫(32位和64位)需要付出的努力。 Adafruit PI3 Launch視頻還提到,遷移到64位處理器更多的是關於新芯片提供的時鐘速度提高,而不是使用64位模式。

我以為代碼是相同的,但是編譯器將負責優化最終代碼以利用該體系結構。進行新構建相對容易嗎?假設要以64位元運行Debian?
@sandy Easy將取決於您的技能水平和經驗。現在需要什麼用例?
沒有特別的要求,只是想最大限度地發揮RPi3的性能。
@sandy基金會表示,Pi3的更換不會像Pi3跟Pi2一樣快(大約1年)。他們可能會使用切換到64位的性能來提高性能,而不需要新的硬件-請注意,這全都是我的猜測。
Daniel Glasser
2016-05-19 19:04:22 UTC
view on stackexchange narkive permalink

要解決這樣一個斷言,即64位本機程序更大(用於數據和指針的更多內存),並且ARMv8上RAM小於4GB的64位與32位OS沒有明顯的好處,我希望提出了幾點。

在體系結構上,ARMv7(及之前)和ARMv8的處理方式存在一些顯著差異,這些差異使ARMv8的執行效率更高。其中一些來自更廣泛的內部數據路徑,一些來自特殊情況的消除,以及更深層次的渠道)。這些相同的更改使ARMv8更好地運行了ARMv7(32位)代碼。

本地64位應用程序確實使用64位指針,而“ size_t”是64位,因此使用那些指針的元素的確變大了。其餘數據將趨於保持相同大小。但是,這對於可執行映像的大小而言意義不大。

64位本機真正令人眼前一亮的地方(如果您不關心大整數和浮點數的話)具有更大的虛擬空間。地址空間:

  • 操作系統可以將虛擬地址空間劃分為更多和更大的部分,從而可以更輕鬆地管理共享資源,在不同特權級別之間進行更簡化的上下文切換,等等。
  • 如果啟用了交換功能,則可以運行更多和更大的進程,而超出了物理內存限制(實際上在32位中也是如此,但在64位中則較少)

無論操作系統當前是否在利用此優勢,隨著主流版本從32位移開,它將有所作為。

我認為移植到本地64位AArch64內核的最佳論據是可移植性:主流台式機已移至大多數64位處理器,並且我看到更多采用64位的軟件包,並將此類代碼移植回32位。位比從32位移植到64位更難。在用戶空間中,假設已經安裝了多體系結構庫,則能夠並排運行32位應用程序和64位應用程序,因此不需要將32位應用程序移植到64位應用程序物。 64位操作系統只會為您提供更多的軟件選擇。

我並不是說為Raspberry PI 3生成64位內核很容易-存在重大差異,需要在以下地方進行更改在較低級別,並非所有設備驅動程序都是64位乾淨的(尤其是ARM特定GPU的驅動程序)。 Raspberian可能仍將是32位操作系統,但我認為(從長遠來看)它是短視的。

單個引導媒體(例如SD卡)可以同時包含64位和64位操作系統。操作系統和32位版本,以及輔助引導軟件(u-boot,arm-boot和其他引導軟件)可以確定要加載哪個。更難的部分是用戶空間-文件系統必須是多體系結構,即使在32位系統上,如果64位的東西將是無用的。我將用一個腳本或實用程序解決這個問題,該腳本或實用程序可以在初次啟動後運行,以刪除僅32位系統上不需要的庫和程序可執行文件。

也許我們需要用於ARM的x32 ABI。然後我們可以有小的指針和所有的寄存器。
GTC
2016-09-02 06:26:48 UTC
view on stackexchange narkive permalink

即使您的內存不足1GB,也可以使用64位尋址。

它允許您對大型文件進行內存映射,因此您有了一個指針並讓操作系統透明地進行I / O。進行I / O的另一種方式。需要對大型文件執行64位尋址。

另一個我認為有用的示例是允許進程具有2GB以上的地址空間,使用交換空間。我最近在具有大量存儲空間和損壞的文件系統的32位NAS上遇到問題。即使打開了緩存選項,fsck進程也會用完內存。添加交換空間無法解決問題,那裡的32位地址空間是硬限制,因此無法在如此大的損壞下運行fsck具有32位二進製文件的文件系統。如果使用64位二進製文件和一些交換空間,它將可以運行。

halfer
2016-07-11 14:09:08 UTC
view on stackexchange narkive permalink

現有的答案很好地解決了64位拱門的問題,但是我看不到升級的許多優點。因此,這是我最近發現的兩個:

  • 當PHP處理Unix時間戳時,32位arch中的整數大小設置了日期上限,因此它們不能超過在2038年的某一天。我希望這是所有處理時間戳的語言的問題。 (值得慶幸的是,大多數不使用Unix時間戳的日期處理子系統,例如PHP的DateTime,都是經過專門設計的,即使在較舊的CPU上也不受此問題的限制。)
  • Mongo僅限於數據庫該拱門的大小不到2G,並且很快將棄用32位版本。從手冊

    從MongoDB 3.2開始,不贊成使用32位二進製文件,並且在以後的版本中將不可用。

    儘管32 Linux和Windows存在位構建,它們不適合生產部署。 32位版本也不支持WiredTiger存儲引擎。

奇怪的是,這取決於您的平台。它通常不是整數大小,而是“ C”庫中time_t的大小。即使在32位平台上,也可以使用帶有CPU時間開銷的64位time_t,但是許多32位平台仍未這樣做,因為這樣做存在二進制兼容性問題。
@rsaxvc,很有趣,謝謝。那麼我可以通過重新編譯PHP獲得64位時間處理嗎,還是需要修改底層C庫?前者將在我的能力範圍之內,但我不確定後者-我也在考慮重新編譯整個Ras [bian],但似乎沒有任何簡單的說明可以這樣做。
對於Linux,您需要修補內核,libc和應用程序。這可能不值得。經過一番讀後,OpenBSD(在RPi上沒有)time_t從5.5開始是64位。在使用Visual Studio 2005或更高版本的32位Windows上,time_t為64位。
@rsaxvc:好,謝謝。我不知道等待64位操作系統是否對我有意義-幾個月前的幾則新聞聽起來似乎迫在眉睫....::)
bobx
2016-03-14 15:37:57 UTC
view on stackexchange narkive permalink

我的想法:儘管我不確切知道ARM處理器如何尋址內存,但是我可以從我以前在(SPARC / Alpha / i386 / AMD64 / X86_64)上編程過的多個CPU體系結構中告訴您這一點:通過“真正的”虛擬地址指針進行內存和尋址,轉移到64位並非易事。儘管memcpy可以完成預期的工作,但您需要考慮的是,數據以64位這樣存儲(向後存儲):

  HGFEDCBAHGFEDCBAHGFEDCBA  

還用32位,看起來像這樣:

  ABCDABCDABCD  

因此,當您在RAM中存儲一個jpeg時,您可以讀取其32位標頭字節,或進行邊緣檢測,而不會出現任何線性問題,例如通過逐字節向前移動。但在64位體系結構中,此更改為:

32位:

  for(i = 0; i< img_length / 4; i ++) {address = shm_start + i;對於(c = 0; c< 4; c ++){字節=((*地址>> c)& 15)}}  

64位:

  for(i =-; i< img_length / 8; i ++){address = shm_start + i; for(c = 7; c> = 0; c--){字節=((*地址>> c)& 15)}}  
字節序與字長無關。哎呀,許多架構都允許程序員選擇字節序,包括ARM!而且,“ 64位”可能會因所討論的體系結構而產生完全不同的結果,並且很難在各種體系結構之間進行比較或試圖在它們之間繪製相似性。
我認為我=-是無效的。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...