На этой странице официальное объявление RPi3 гласит:
Вам понадобится свежее изображение NOOBS или Raspbian со страницы загрузок. При запуске мы используем то же 32-битное пользовательское пространство Raspbian, которое мы используем на других устройствах Raspberry Pi; в течение следующих нескольких месяцев мы рассмотрим, имеет ли смысл переход в 64-битный режим.
Мой вопрос: учитывая, что процессор 64-битный, не очевидно ли, что запуск ОС в 64-битной версии будет лучше во всех отношениях? Чего мне не хватает?
Ответы:
Нет на самом деле, это не так. В некотором смысле, запуск 64-битной операционной системы может ухудшить производительность Raspberry Pi.
Преимущества 64 бит :
Двумя основными преимуществами использования 64-разрядного процессора / операционной системы является то, что устройство может обрабатывать более 4 ГБ ОЗУ и обрабатывать целые числа большего размера, чем
2^32
без необходимости использования библиотеки bignum.Raspberry Pi не имеет более 4 ГБ оперативной памяти. При 1 ГБ ОЗУ вы полностью утратили первое из двух основных преимуществ. Что касается второго преимущества, то какой процент людей фактически использует достаточно гигантские цифры, так что для фонда имеет смысл поддерживать целую вторую операционную систему? Таким образом, RPi может использовать огромные числа с помощью программных методов, но, похоже, если вы собираетесь постоянно находиться в этой области, вам все равно нужно использовать лучшее оборудование.
Проблемы с 64 бит :
Возможность хранить большее количество не предоставляется магией. Скорее, размер объектов памяти должен быть увеличен. В C (и C ++) это означает изменение
int
наint64_t
. Это не делается автоматически, поэтому комментарии о том, что фонд не хочет поддерживать две ветви.Кроме того, многие приложения просто не дают преимущества (для большинства пользователей) при работе в 64-битном режиме. Обратите внимание, что большинство веб-браузеров, MS Office и целый ряд других популярных программ все еще поставляются и обслуживаются 32-битным способом. Конечно, вы можете получить 64-разрядную версию MS Office, но она используется редко.
Если приложение / операционная система написано так, чтобы использовать преимущества 64-битной архитектуры, ваше приложение будет использовать больше памяти просто потому, что переменные и указатели занимают больше места. Обычно это относительно небольшой обмен на машины, которые выиграют от льгот. В нашем случае у нас очень мало перков и очень мало оперативной памяти.
Также примечание :
То, что вы работаете на 64-битной машине, не означает, что приложение не работает как 32-битное. Windows делает это очень ясно, имея два разных пути установки,
C:\Program Files
иC:\Program Files (x86)
.Таким образом, фонд, скорее всего, предоставит 64-битную поддержку? :
Мы вернулись к той же точке: «Некоторые люди могут увидеть выгоду, но большинство не увидят». Вы наверняка увидите другие проекты, предлагающие 64-битные сборки, но если фонд не получит много незаслуженного (imo) флекса, они, вероятно, не будут и не должны (imo). Создание и поддержка отдельной 64-битной ветки - это не малое усилие, и, честно говоря, просто оно того не стоит.
источник
sizeof(char)
всегда один. Под Linuxsizeof(short)
,sizeof(int)
,sizeof(float)
,sizeof(double)
не меняются в зависимости от разрядности. Это имеет большое различие в ваших требованиях.x64
в этом ответе.x64
это сокращение отx86-64
. Это НЕ синоним слова "64 бит". 64-битные процессоры ARM естьAArch64
.Стоит отметить, что ситуация отличается для ARM и Intel / AMD. Это связано с тем, что переход на x86_64 также использовался как возможность обновить устаревшую архитектуру, которая в основном ограничена наличием только 8 регистров общего назначения - и удвоилась в 64-битном режиме. Таким образом, перевод системы Intel / AMD в 64-битный режим также означает использование реальных функций, которые существенно влияют на производительность.
ARM не имеет этой проблемы с самого начала (хотя AArch64 добавляет регистры, 32-разрядные архитектуры не нуждались в них), поэтому преимущества в основном заключаются в более прямой адресации памяти и собственной поддержке большого целого числа - гораздо меньше большого сделка, и, возможно, противодействует недостатком (больше памяти используется для всего).
(Кроме того, по этой причине была проделана некоторая работа по созданию abi x32 для Intel / AMD Linux , с сохранением улучшений ЦП, но с использованием 32-битных указателей.)
источник
Я уверен, что уже есть пользователи Debian Aarch64 (ARMv8) на Pi 3; это, конечно, будет не так сложно для многих людей ( см. здесь некоторые подсказки о том, что может сработать) 1, хотя для большинства пользователей это, вероятно, немного натянуто.
Однако, если Raspbian и / или Foundation не выпустят 64-битную версию, вы все чаще будете видеть людей с блогами и т. Д., Объясняющими, как их запускать, и при этом получать нужные вам вкусности.
Сейчас есть релиз Fedora aarch64 для Pi 3.
1. У 32-битных
/opt/vc
вещей будут некоторые сложности , я не уверен, насколько это преодолимо; Раньше были 32-битные библиотеки совместимости для x86-64, но Aarch64 ... возможно, нет.источник
В рамках публикации о запуске я упомянул, что одной из проблем является необходимость поддержки двух отдельных баз кода (32 и 64 бит). В видео-запуске Adafruit PI3 также упоминалось, что переход на 64-битный процессор был связан скорее с увеличением тактовой частоты нового чипа, чем с использованием 64-битного режима.
источник
Обращаясь к утверждению, что 64-битные собственные программы больше (больше памяти для данных и указателей), и что нет никаких заметных преимуществ для 64-битной и 32-битной ОС на ARMv8 с менее чем 4 ГБ ОЗУ, я хотел бы поднять несколько точки.
В архитектуре ARMv7 (и ранее) и ARMv8 есть некоторые существенные различия, которые делают выполнение ARMv8 более эффективным. Отчасти это связано с более широкими внутренними путями данных, а некоторые - устранением особых случаев и более глубоким конвейером). Эти же изменения делают ARMv8 лучше при запуске кода ARMv7 (32-разрядного).
Родные 64-битные приложения используют 64-битные указатели, а size_t - 64-битные, поэтому элементы, использующие их, становятся больше. Остальная часть данных будет иметь тенденцию оставаться прежнего размера. Однако значение этого незначительно для размера исполняемых образов.
Там, где 64-битная версия действительно сияет (если вам не нужны большие числа и числа с плавающей запятой), имеет большее виртуальное адресное пространство:
Независимо от того, использует ли ОС в настоящее время это преимущество или нет, это будет иметь значение, поскольку основной поток отходит от 32-разрядных.
Я думаю, что лучшим аргументом для перехода на собственное 64-битное ядро AArch64 является переносимость: основной рабочий стол перешел в основном на 64-битные процессоры, и я вижу больше пакетов, которые предполагают 64-битные, и портировать такой код обратно на 32-битные труднее чем портирование от 32 до 64 бит. В пользовательском пространстве вы можете запускать 32-битные и 64-битные приложения одновременно, при условии, что вы установили многоархивированные библиотеки, поэтому нет необходимости портировать 32-64-битные порты там, где это не так. дело. 64-битная ОС просто предоставит вам более широкий выбор программного обеспечения.
Я не говорю, что производство 64-битного ядра для Raspberry PI 3 легко - есть значительные различия, которые требуют изменений на низком уровне, не все драйверы устройств чистые 64-битные (особенно драйверы для специфичных для ARM графических процессоров). Может быть, Raspberian останется 32-битной ОС, но я считаю, что (в долгосрочной перспективе) она близорука.
Один загрузочный носитель (например, SD-карта) может содержать как 64-, так и 32-разрядные версии ОС, а дополнительное загрузочное программное обеспечение (u-boot, arm-boot и другие) может определить, какой из них загрузить. Более сложная часть - пользовательский интерфейс - файловая система должна быть многоархитивной, даже в 32-битных системах, где 64-битные компоненты бесполезны. Я бы обратился к этому с помощью скрипта или утилиты, которые можно было запустить после начальной загрузки, чтобы удалить ненужные библиотеки и исполняемые файлы программы только на 32-битных системах.
источник
64-разрядная адресация может быть полезна, даже если у вас не более 1 ГБ памяти.
Он позволяет вам отображать в памяти большие файлы, поэтому у вас есть указатель, и операционная система позволяет прозрачно выполнять операции ввода-вывода. Просто еще один способ сделать ввод / вывод. Вам нужна 64-битная адресация для больших файлов.
Другой пример, где, как мне кажется, это может быть полезно, - это позволить процессам иметь более 2 ГБ адресного пространства, используя пространство подкачки. Недавно у меня была проблема на 32-битном NAS с большим объемом памяти и поврежденной файловой системой. Процесс fsck исчерпал память, даже с включенными параметрами кэширования. Добавление пространства подкачки не могло решить проблему, 32-разрядное адресное пространство было жестким ограничением. Так что просто не было возможности запустить fsck на этой большой поврежденной файловой системе с 32-битным двоичным файлом. С 64-битным двоичным файлом и некоторым пространством подкачки он бы запустился.
источник
Существующие ответы очень хорошо охватывают проблемы 64-битной арки, но я не вижу много заявленных преимуществ обновления. Итак, вот два, которые я недавно обнаружил:
Mongo ограничен базами данных размером менее 2G для этой арки, и 32-разрядные сборки скоро будут устаревшими. Из руководства :
источник
:-)
Мои мысли по этому поводу: хотя я не знаю точно, как процессор ARM обращается к памяти, я могу сказать вам это по предыдущим архитектурам с несколькими ЦП, которые я запрограммировал (SPARC / Alpha / i386 / AMD64 / X86_64): при использовании общей памяти и адресации с помощью своего «реального» указателя виртуального адреса переход на 64-битную систему не является тривиальным. Хотя memcpy делает то, что должен, вы должны принять во внимание, что в 64 битах данные хранятся примерно так (бит назад):
все же в 32 битах это выглядит так:
Итак, в 32 битах, когда вы сохраняете, скажем, JPEG в оперативной памяти, вы можете читать байты заголовка или выполнять обнаружение фронта без каких-либо проблем линейным образом * скажем, переходя от байта к байту вперед. Но в 64-битной архитектуре это меняется:
32bit:
64bit:
источник