Raspbianが64ビットモードに移行


52

、このページ、公式RPi3の発表は述べて:

ダウンロードページから最新のNOOBSまたはRaspbianイメージが必要です。起動時には、他のRaspberry Piデバイスで使用しているのと同じ32ビットRaspbianユーザーランドを使用しています。今後数か月にわたって、64ビットモードに移行する価値があるかどうかを調査します。

私の質問は、プロセッサが64ビットであることを考えると、64ビットでOSを実行することがあらゆる点で優れていることは明らかではないでしょうか?私は何が欠けていますか?


9
私はかつてDEC / Alphaでソフトウェアを32ビットから64ビットOSFに移植する会社で働いていました(ずっと前)。コードベースはすでに64ビットに準拠していたため、単純に再コンパイルするだけです。整数とポインターの余分なメモリ消費による10%のパフォーマンスヒット。これは、パフォーマンスが3桁のmhzおよび2桁(低3桁)のメモリで測定されていた時代にさかのぼります。4GB以上のRAMを搭載していない場合、必ずしも良い考えではありません。
クリスK

6
64ビットは最初に、Piよりも多くのメモリを使用します。
トールビョーンラヴンアンデルセン

2
x86ベースのシステムでは、これを決定するのが難しいため、32ビットポインターと64ビットCPUレジスタを使用するハイブリッドabiであるen.wikipedia.org/wiki/X32_ABIにすらなりました。
PlasmaHH

1
@ChrisKaminskiですが、ARMとx86は異なります。32ビットから64ビットに移行すると、レジスタの数が2倍になり、ほとんどの場合にコードの実行を高速化する命令セットのいくつかの側面が再設計されます。インターネットで多くのベンチマークを見ることができます
-phuclv

@rsaxvcだからそれは私のコメントに何を追加しますか?「ARM x86」と言って、64ビットを使用するアーキテクチャでは、DEC / AlphaやSparc、MIPSなどの他のアーキテクチャとは異なり、アプリケーションのパフォーマンスが向上すると言いました
...-phuclv

回答:


62

プロセッサが64ビットであることを考えると、64ビットでOSを実行することがあらゆる点で優れていることは明らかではないでしょうか。

いいえ、実際は違います。いくつかの点で、64ビットオペレーティングシステムを実行すると、Raspberry Piのパフォーマンス低下する可能性があります。

64ビットの利点

64ビットプロセッサ/オペレーティングシステムを使用する2つの主な利点は、デバイスが4 GBを超えるRAMを処理でき2^32、bignumライブラリを必要とせずに、より大きな整数をネイティブに処理できることです。

Raspberry Piには4 GB以上のRAMはありません。1 GBのRAMで、2つの主要な利点のうち最初の利点を完全に失います。2番目の利点については、2番目のオペレーティングシステム全体をサポートするのに理にかなっている十分な数の人々が実際に使用しているのは何パーセントですか?現状では、RPiはソフトウェア手法で膨大な数を使用できますが、その領域に一貫してアクセスする場合は、とにかくより良いハードウェアを使用する必要があるようです。

64ビットの問題

より大きな数を格納する機能は、魔法によって許可されていません。むしろ、メモリオブジェクトのサイズを増やす必要があります。C(およびC ++)では、これをに変更するintことを意味しint64_tます。これは自動的には行われないため、基盤に関するコメントは2つのブランチを維持することを望んでいません。

さらに、多くのアプリケーションは、64ビットモードで実行した場合、ほとんどのユーザーに利点を提供しません。ほとんどのWebブラウザー、MS Office、およびその他の一般的なソフトウェアのホストはすべて、32ビット方式で出荷および保守されています。確かに64ビットリリースのMS Officeを手に入れることができますが、めったに使用されません。

アプリケーション/オペレーティングシステムが64ビットアーキテクチャを利用するように記述されている場合、変数とポインターがより多くのスペースを占有するため、アプリケーションはより多くのメモリを使用します。通常、これは特典の恩恵を受けるマシンの比較的小さなトレードオフです。この例では、特典とRAMが非常に少なくなっています。

また注意事項

64ビットマシンで実行しているからといって、アプリケーションが32ビットで実行されているわけではありません。Windowsは、二つの異なるインストールパスを持っていることによって、これは非常に明確になり、C:\Program FilesそしてC:\Program Files (x86)

それで、財団は64ビットのサポートを提供するでしょうか?

「一部の人々は利益を見るかもしれませんが、ほとんどの人はそうではないでしょう」という同じポイントに戻りました。確かに64ビットビルドを提供する他のプロジェクトを見ることができますが、基盤が多くの(imo)フラックを取得しない限り、おそらく(imo)しないでしょう。別の64ビットブランチを作成して維持することは小さな努力ではなく、正直なところ、それだけの価値はありません。


7
Cや友人について話すと仮定すると、<= int型のサイズは同じままです。Linuxのアドレスモデルでは長くなる可能性があるため、size_tとポインターのサイズは増加します。また、メモリマップドI / Oを行う場合に重要な仮想アドレススペースのポイントを完全に見逃します。

3
物理メモリ量と仮想メモリを区別することは高度ではありません。また、誤った情報を広めないように高度化されていません。sizeof(char)常に1です。Linuxでは、sizeof(short)sizeof(int)sizeof(float)sizeof(double)bit化によって変化することはありません。それはあなたの主張に大きな違いがあります。

11
x64この回答での使用に問題があります。x64はの略語ですx86-64。これは「64ビット」と同義ではありません。64ビットARM CPUはAArch64です。
オリ

6
あなたがリストしたよりも多くの64ビットのプロがいます。ARM64にパフォーマンス上の利点はありますかen.wikipedia.org
wiki / 64

3
64ビットOSに移行する最大の理由を見逃しました。2038年1月19日。32ビットLinuxは、これ以降の日付を処理できません。修正は、かなり長い間64ビットLinux(および32ビットUNIX時間に基づいたソフトウェアのアップグレード)でした。2038年は20年先ですが、小型の組み込みマシンであるRaspberry Piは、これまでに使用される可能性があります。1980年にY2K問題を真剣に受け止めた人はいませんでした。
スティーブセザー

19

ARMとIntel / AMDでは状況が異なることに注意してください。それは、x86_64への切り替えが、経年劣化のあるアーキテクチャを更新する機会としても使用されていたためです。したがって、Intel / AMDシステムを64ビットモードに切り替えることは、パフォーマンスを大幅に向上させる実際の機能を有効にすることも意味します。

ARMには最初からこの問題はありません(AArch64はレジスタを追加しますが、32ビットアーキテクチャはそれらに飢えていませんでした)。そのため、利点は基本的に直接アドレス可能なメモリとネイティブのビッグ整数サポートです。対処し、おそらくマイナス面(すべてに使用するメモリを増やす)によって相殺されます。

(余談ですが、この理由から、Intel / AMD Linux向けに「x32」のabiを作成し、CPUの機能強化を維持しながら32ビットポインターを使用する作業がいくつかありました。)


5
AArch32にはすでにx86よりも多くのレジスタがありますが、SPとPCが別々になったため、AArch64の方が優れています。最大14個の汎用レジスタを使用する前。あなたは、より良い設計された命令セットもを持っているARM64にそこにパフォーマンス上の利点です64ビットのARM(Aarch64)命令は、32ビットのARM(Aarch32)命令に比べ15〜30%のパフォーマンスを向上
phuclv


Pi3のベンチマークを見るのは面白いでしょう(特に実際のタスクで)。
mattdm

6

Pi 3ですでにDebian Aarch64(ARMv8)を実行している人がいると確信しています。それは確かに多くの人々のため難しいことではないでしょう(ここで見ることかもしれない作業についてのいくつかの手がかりのために)1用がほとんどのユーザー、それはおそらく、ストレッチのビットです。

ただし、Raspbianおよび/またはFoundationが64ビットバージョンを提供しない場合、ブログなどを使用する人が増えて、ブログの実行方法を説明しながら、必要なグッズを入手できます。


現在、Pi 3用のFedora aarch64リリースがあります。


1. 32ビットの/opt/vcものにはいくつかの問題がありますが、それがどれほど克服できるかわかりません。以前はx86-64用の32ビット互換ライブラリがありましたが、Aarch64 ...はそうではないかもしれません。


1
raspbian.org/RaspbianFAQ#What_is_Raspbian.3Fの状態(Raspbianについて話しています):正式なDebian wheezy armhfリリースは、Raspberry Pi(ARMv7-A CPU以上、Raspberry PiのARMv6 CPUと比較)。これはRPi3でもまだ正しいですか?
-zundi

@sandy 1)比較的古いと思います。2)Debian armhfはハードフロートでコンパイルされているため、混乱および/または修正されていない、それがhfの目的です。対ARMv4 / 5用の別のdebianがあり、最初に使用されたと思いますハードフロートがあります(特定のポイントまでは6もしなかったと思いますが、ほとんどの場合、そのようになっています(別名ARM1176JZ(F)-S))。そうRaspbianの1つのバージョンのみ、期間、ハードウェア浮動小数点サポートしているARMv6があると、A / B / + / 0モデルと2との間の唯一の違いは、3とそうもおそらく、使用カーネルである
びき

2
...「armel」は、Raspbian以前に使用されていた非hf Debianです。
goldilocks

@sandyは、そのセンテンスはpi1の日に書かれたものです。したがって、piと言うときは、pi1と呼ぶものを意味します。pi2(およびpresumablly pi3)のdebian armhfイメージをリリースするサードパーティがありますが、RPFは今のところすべてのボードで1つのイメージを使用することにしました。
ピーターグリーン

5

ローンチ宣伝の一環として、2つの別個のコードベース(32ビットと64ビット)を維持するために必要な努力が1つの懸念であると述べました。また、Adafruit PI3 Launchビデオでは、64ビットプロセッサへの移行は、64ビットモードを使用することよりも、提供される新しいチップのクロック速度を上げることに関するものであると述べました。


コードは同じだと思いましたが、最終的なコードを最適化してアーキテクチャを活用するのはコンパイラが担当します。新しいビルドを作成するのは比較的簡単ですか?たとえば、Debianを64ビットで実行するには?
ズンディ

@sandy Easyは、あなたのスキルレベルと経験に依存します。今これを必要とするユースケースは何ですか?
スティーブロビラード

特に、RPi3の性能を最大限に引き出したいだけではありません。
ズンディ

@sandy財団は、Pi3の交換はPi3がPi2に続いて(約1年)ほど早く行われないと述べています。新しいハードウェアを必要とせずにパフォーマンスバンプのために64ビットへの切り替えを使用する場合があります-これはすべて私の推測であることに注意してください。
スティーブロビラード

4

64ビットアドレス指定は、1 GBを超えるメモリがない場合でも役立ちます。

大きなファイルをメモリマップできるため、ポインタがあり、OSに透過的にI / Oを実行させることができます。I / Oを行う別の方法。大きなファイルでこれを行うには、64ビットのアドレス指定が必要です。

私がそれが有用だと思う別の例は、スワップスペースを使用して、プロセスに2GB以上のアドレススペースを持たせることです。最近、大量のストレージと破損したファイルシステムを備えた32ビットNASで問題が発生しました。キャッシュオプションがオンになっていても、fsckプロセスはメモリを使い果たしました。スワップスペースを追加しても問題を解決できませんでした。32ビットアドレススペースがハード制限でした。そのため、32ビットバイナリを使用して、この大きな破損したファイルシステムでfsckを実行する方法はありませんでした。64ビットのバイナリといくつかのスワップスペースがあれば、実行されていたはずです。


3

64ビットネイティブプログラムが大きく(データとポインター用のメモリが多い)、4 GB未満のRAMを搭載したARMv8上の64ビットと32ビットOSに顕著な利点がないという主張に対処するために、ポイント。

ARMv7(およびそれ以前)とARMv8でのアーキテクチャー上の処理方法には、ARMv8の実行をより効率的にするいくつかの大きな違いがあります。これには、より広い内部データパスによるもの、特殊なケースの排除、およびより深いパイプラインによるものがあります)。これらの同じ変更により、ARMv7(32ビット)コードの実行でARMv8が改善されます。

ネイティブ64ビットアプリケーションは64ビットポインターを使用し、 'size_t'は64ビットなので、それらを使用する要素は大きくなります。残りのデータは同じサイズのままになる傾向があります。ただし、これの重要性は、実行可能イメージのサイズにとってはわずかです。

64ビットネイティブが本当に優れている場合(大きな整数や浮動小数点のことを気にしない場合)は、より大きな仮想アドレス空間を持っています。

  • OSは仮想アドレス空間をより多くの大きなセクションに分割することができ、共有リソースの管理を容易にしたり、異なるレベルの特権間でコンテキストスイッチをより合理化したりすることができます。
  • スワッピングを有効にすると、物理メモリの制限を超えて、より大きなプロセスを実行できます(これは実際には32ビットでも同様ですが、64ビットではそれほど制限されません)

OSが現在これを利用しているかどうかに関係なく、メインストリームが32ビットから遠ざかるにつれて、違いが生まれます。

ネイティブの64ビットAArch64カーネルに移行するための最良の議論は移植性だと思います。主流のデスクトップはほとんど64ビットプロセッサに移行しました。 32ビットから64ビットへの移植よりも。ユーザー空間では、32ビットアプリケーションと64ビットアプリケーションを並行して実行できます。マルチアーチライブラリをインストール済みであれば、32ビットから64ビットに移植する必要はありません。案件。64ビットOSを使用すれば、より多くのソフトウェアを選択できます。

Raspberry PI 3用の64ビットカーネルの作成は簡単だと言っているわけではありません。低レベルでの変更が必要な大きな違いがあります。Raspberianは32ビットOSのままである可​​能性がありますが、(長期的には)近視眼的であると思います。

単一のブートメディア(たとえば、SDカード)には、64ビットバージョンと32ビットバージョンの両方のOSを含めることができ、セカンダリブートソフトウェア(u-boot、arm-boot、およびその他)はどちらをロードするかを決定できます。難しい部分はユーザーランドです。64ビットのデータが役に立たない32ビットシステムであっても、ファイルシステムはマルチアーチである必要があります。32ビットのみのシステムで不要なライブラリとプログラム実行可能ファイルを削除するために、初期ブート後に実行できるスクリプトまたはユーティリティを使用して、これに対処します。


おそらくARM用のx32 ABIが必要です。その後、小さなポインタとすべてのレジスタを使用できます。
rsaxvc

2

既存の回答は64ビットアーチの問題を非常によくカバーしていますが、アップグレードの利点についてはあまり述べられていません。だから、ここで私が最近発見した2つです:

  • PHPがUnixタイムスタンプを処理するとき、32ビットアーチの整数サイズは、2038年の特定の日を超えることができないように、日付の上限を設定します。これはタイムスタンプを処理するすべての言語の問題だと思います。(ありがたいことに、PHPのDateTimeなど、Unixタイムスタンプを使用しないほとんどの日付処理サブシステムは、特に古いCPUでもこの問題によって制限されないように設計されています)。
  • Mongoはこのアーキテクチャで2G未満のサイズのデータ​​ベースに制限されており、32ビットビルドは間もなく廃止されます。マニュアルから:

    MongoDB 3.2以降、32ビットバイナリは非推奨になり、将来のリリースでは使用できなくなります。

    LinuxおよびWindows用の32ビットビルドは存在しますが、実稼働展開には適していません。32ビットビルドは、WiredTigerストレージエンジンもサポートしていません。


奇妙なことに、これはプラットフォームによって異なります。通常は整数サイズではなく、「C」ライブラリのtime_tのサイズです。32ビットプラットフォームでも、CPU時間のオーバーヘッドを伴う64ビットのtime_tを使用できますが、多くの32ビットプラットフォームは、バイナリ互換性の問題があるため、まだ使用していません。
rsaxvc

@rsaxvc、興味深い、ありがとう。したがって、PHPを再コンパイルすることで64ビットの時間処理を取得できますか、それとも基盤となるCライブラリの変更も必要ですか?前者は私の能力の範囲内ですが、後者については確信がありません-私もRas [bian自身の全体を再コンパイルすることを考えていましたが、そうするための簡単な指示はまだありません。
2016

Linuxの場合、カーネル、libc、およびアプリケーションにパッチを適用する必要があります。それはおそらく価値がありません。少し読んだ後、OpenBSD(RPiのno)time_tは5.5以降64ビットです。Visual Studio 2005以降を使用する32ビットWindowsでは、time_tは64ビットです。
rsaxvc

@rsaxvc:わかった、ありがとう。64ビットOSが利用可能になるのを待つのは理にかなっているのだろうか-数か月前のニュース記事で差し迫っていたようだ:-)
。...-

-4

これについての私の考え:ARMプロセッサがメモリをどのようにアドレスするかは正確にはわかりませんが、以前にプログラムした複数のCPUアーキテクチャ(SPARC / Alpha / i386 / AMD64 / X86_64)からこれを伝えることができます:共有メモリとアドレス指定を使用する場合「実際の」仮想アドレスポインターによって、64ビットへの移行は簡単ではありません。memcpyは本来の動作を行いますが、64ビットではデータが次のように格納されることを考慮する必要があります(ビットを逆方向に):

HGFEDCBA
HGFEDCBA
HGFEDCBA

まだ32ビットでは次のようになります。

ABCD
ABCD
ABCD

したがって、32ビットでは、たとえばjpegをRAMに格納すると、ヘッダーバイトを読み取るか、エッジ検出を行うことができます。しかし、64ビットアーキテクチャでは、これが変わります。

32ビット:

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

64ビット:

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

5
エンディアンネスはワードサイズとは関係ありません。ちなみに、多くのアーキテクチャでは、プログラマーはエンディアンを選択できます(ARMを含む)!また、「64ビット」は、対象のアーキテクチャに応じてまったく異なる結果をもたらす可能性があり、アーキテクチャ間で比較したり、アーキテクチャ間で類似性を引き出すことは困難です。
ボブ

1
i =-が有効だとは思わない。
rsaxvc
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.