Raspbian переходить в 64-бітний режим


52

На цій сторінці в офіційному оголошенні RPi3 зазначено:

Вам знадобиться недавнє зображення NOOBS або Raspbian на нашій сторінці завантажень. При запуску ми використовуємо ту саму 32-розрядну програму Raspbian, яку ми використовуємо на інших пристроях Raspberry Pi; протягом наступних кількох місяців ми будемо досліджувати, чи є цінність для переходу в 64-бітний режим.

Моє запитання, враховуючи, що процесор має 64 біти, чи не очевидно, що запуск ОС у 64 бітах буде краще всіляко? Що я пропускаю?


9
Я колись працював у компанії, яка переносила програмне забезпечення від 32-бітного до 64-бітного OSF на DEC / Alpha (давно). Просто пряма перекомпіляція, оскільки база даних вже сумісна з 64 бітами. 10% -на ефективність від додаткового споживання пам’яті в цілих числах та покажчиках. Це було ще в ті часи, коли продуктивність вимірювали в трицифровому МГц і подвійних (можливо, низькотритрічних) пам'яті. Не маючи 4 + ГБ оперативної пам’яті на борту, не обов'язково гарна ідея.
Кріс К

6
64-бітний спочатку окупається з більшою кількістю пам'яті, ніж у Pi.
Thorbjørn Ravn Andersen

2
У системах на базі x86 складність вирішити це навіть дозволила гібридному abi: en.wikipedia.org/wiki/X32_ABI, який використовує 32-бітові покажчики та 64-бітні регістри процесора.
ПлазмаHH

1
@ChrisKaminski, але ARM та x86 різні. Коли вони переходять від 32 до 64 біт, вони подвоюють кількість регістрів і переробляють деякі аспекти набору інструкцій, завдяки чому в більшості випадків код працює швидше. В Інтернеті ви можете побачити чимало орієнтирів
phuclv

@rsaxvc так що це додає до мого коментаря? Я сказав "ARM та x86", щоб сказати, що в таких архітектурах 64 біт покращує продуктивність програми на відміну від інших архітектур, таких як DEC / Alpha або Sparc, MIPS ...
phuclv

Відповіді:


62

враховуючи, що процесор має 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-бітової гілки не є малим починанням, і, чесно кажучи, просто не здається цього вартим.


7
Якщо припустити, що ви говорите про C та друзів, розмір будь-якого типу <= int залишається однаковим. size_t та покажчики збільшуються в розмірі, як це може тривати за адресною моделлю Linux. Ви також повністю пропускаєте точки віртуального адресного простору, що важливо, коли ви пам’ятаєте карту пам’яті вводу / виводу.

3
Розробити між фізичними обсягами пам’яті та віртуальною пам’яттю не доцільно. Також не вдосконалено, щоб не поширювати дезінформацію. sizeof(char)завжди одне. Під Linux sizeof(short), sizeof(int), sizeof(float), sizeof(double)не змінюються в залежності від розрядності. Це має велику різницю у ваших претензіях.

11
У мене є проблеми із використанням x64у цій відповіді. x64є абревіатурою x86-64. Це НЕ синонім "64 біт". 64-бітні процесори ARM є AArch64.
Олі-

6
Є 64-розрядні плюси, ніж ви перераховували. Чи є перевага для продуктивності ARM64 , en.wikipedia.org/wiki/64-bit_computing#Pros_and_cons
phuclv

3
Ви пропустили найбільшу причину переходу на 64-бітну ОС. 19 січня 2038 р. 32-бітний Linux не може обробити дати, що минули цього разу. Виправлення було 64-бітним Linux (і оновлення будь-якого програмного забезпечення на основі 32-бітного часу Unix) протягом досить тривалого часу. 2038 року вже 20 років, але Raspberry Pi, будучи невеликою вбудованою машиною, має певний потенціал, який можна використовувати в майбутньому. Ніхто насправді теж не сприймав проблему Y2K серйозно.
Стів Сетер

19

Варто зазначити, що ситуація в ARM та Intel / AMD різна. Це тому, що перехід на x86_64 був також використаний як можливість оновити архітектуру, яка погано старіє, в основному покалічивши лише 8 реєстрів загального призначення - і подвоївшись у 64-бітному режимі. Таким чином, перехід системи Intel / AMD в 64-бітний режим також означає реалізацію реальних функцій, які суттєво різняться у продуктивності.

ARM не має цієї проблеми для початку (хоча AArch64 додає регістри, 32-розрядні архітектури не голодували за них), тому переваги в основному є більш безпосередньо адресованою пам'яттю та підтримкою великого цілого числа - набагато менше великої угоду, і, можливо, протидіяти її зворотній стороні (більше пам'яті використовується для всього).

(Окрім цього, з цієї причини було проведено певну роботу зі створення "x32" abi для Intel / AMD Linux , збереження покращення процесора, але використання 32-бітних покажчиків.)


5
Незважаючи на те, що AArch32 вже має більше регістрів, ніж x86, AArch64 робить це краще, тому що зараз є окремі SP та PC. Перед вами максимум 14 реєстрів загального призначення. У вас також є більш розроблений набір інструкцій Чи є перевага для виконання ARM64 , 64-розрядних інструкцій ARM (Aarch64) Підвищення продуктивності на 15 - 30% порівняно з 32-розрядними інструкціями ARM (Aarch32)
phuclv


Буде цікаво побачити орієнтири на Pi3 (особливо з реальними завданнями).
mattdm

6

Я впевнений, що на Pi 3 вже є люди, які працюють Debian Aarch64 (ARMv8); Для багатьох людей це, звичайно, не буде таким важким ( дивіться тут деякі підказки про те, що це може спрацювати) 1, хоча для більшості користувачів це, мабуть, трохи розтягує.

Однак якщо Raspbian та / або Фонд не вийдуть із 64-розрядною версією, ви все частіше побачите людей, що мають блоги тощо, пояснюючи, як запустити та все-таки отримати потрібні смаколики.


Зараз для Pi 3 випущено Fedora aarch64 .


1. З 32-розрядними /opt/vcречами будуть деякі ускладнення , я не впевнений, наскільки це переможливо; там раніше були 32-бітні компактні лісти для x86-64, але Aarch64 ... можливо, ні.


1
raspbian.org/RaspbianFAQ#What_is_Raspbian.3F заявляє (йдеться про Raspbian): Порт необхідний, тому що офіційний випущений програвач Debian wheezy armhf сумісний лише з версіями архітектури ARM, пізнішими, ніж ті, які використовуються на Raspberry Pi (процесори ARMv7-A) і вище, порівняно з процесором ARMv6 програми Raspberry Pi). Це все ще вірно з RPi3?
зунді

@sandy Я думаю, що це 1) відносно давній; 2) Плутати та / або не виправляти з тих пір, оскільки Debian armhf компілюється з жорстким плаваючим сигналом, саме для цього і hf, порівняно, є ще один debian для ARMv4 / 5, який, на мою думку, був першим, що використовувався в програмі ISA і не мають жорсткі поплавці (я думаю, що до 6-го до певного моменту вони не зробили 6, але це було більшою частиною часу, так само ARM1176JZ (F) -S). Отже, існує лише одна версія Raspbian, періоду, ARMv6 з апаратною підтримкою з плаваючою точкою, єдиною різницею між моделями A / B / + / 0 і 2 є ядро, яке використовується, імовірно, так само з 3.
goldilocks

2
... "armel" - це не-hf Debian, який використовувався до Raspbian.
золотинки

@sandy, що сенсація була написана в дні pi1, тому, коли вона каже pi, це означає те, що ми зараз би називали pi1. Є треті сторони, які випускають зображення debian armhf для pi2 (і, мабуть, pi3), але rpf вирішили поки що дотримуватися одного зображення для всіх плат.
Пітер Грін

5

У рамках рекламного розголосу про запуск я зазначив, що однією проблемою є зусилля, необхідні для підтримки двох окремих баз коду (32 та 64 біт). У відеозаписі Adafruit PI3 Launch також згадувалося, що перехід на 64-бітовий процесор був скоріше пов'язаний із збільшенням частоти тактової швидкості нового мікросхеми, ніж із використанням режиму 64 біт.


Я думав, що код буде таким самим, але компілятор буде відповідальний за оптимізацію кінцевого коду, щоб скористатися архітектурою. Чи порівняно легко зробити нову конструкцію? Скажіть, запустити Debian у 64 бітах?
зунді

@sandy Easy залежатиме від вашого рівня кваліфікації та досвіду. Який випадок використання потребує цього зараз?
Стів Робільярд

Ніхто, зокрема, просто бажаючи збільшити продуктивність, на яку RPi3 здатний.
зунді

@sandy Фонд сказав, що заміна Pi3 не відбудеться так швидко, як Pi3 пішов за Pi2 (приблизно 1 рік). Вони можуть використовувати перемикач на 64-бітовий для покращення продуктивності, не вимагаючи нового обладнання - Зауважте, це все міркування з мого боку.
Стів Робільярд

4

64-розрядна адресація може бути корисною, навіть якщо у вас немає більше 1 ГБ пам'яті.

Це дозволяє проводити карту пам'яті великих файлів, тому у вас є вказівник і дозволяйте ОС робити введення / виведення прозоро. Просто ще один спосіб здійснення вводу-виводу. Вам потрібно 64-бітну адресацію для великих файлів.

Інший приклад, де я бачу, що це може бути корисним, - це дозволити процесам мати більше 2 Гб адресного простору, використовуючи простір підкачки. Нещодавно у мене виникла проблема з 32-розрядним NAS з великою кількістю пам’яті та пошкодженою файловою системою. Процес fsck закінчився пам'яттю, навіть із включеними параметрами кешування. Додавання простору swap не могло вирішити проблему, 32-бітний адресний простір був жорстким обмеженням там. Тож просто не було можливості запустити fsck на цій великій пошкодженій файловій системі з 32-розрядним двійковим файлом. З 64-бітним двійковим та деяким місцем обміну, він би запустився.


3

Звертаючись до твердження про те, що 64-бітні вбудовані програми є більшими (більше пам’яті для даних та покажчиків) і що у 64-бітної ОС на ARMv8 немає помітних переваг з меншим 4 Гб оперативної пам’яті, я хочу піднести кілька бали.

Існують деякі суттєві відмінності в тому, як це робиться в 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-бітна ОС просто збирається розширити вибір програмного забезпечення.

Я не кажу, що створити 64-бітове ядро ​​для Raspberry PI 3 досить просто - є суттєві відмінності, які потребують змін на низькому рівні, не всі драйвери пристроїв 64-бітні чисті (особливо драйвери для специфічних графічних процесорів ARM). Можливо, Raspberian залишиться 32-бітовою ОС, але я вважаю, що (у довгостроковій перспективі) це недалекоглядний.

Один завантажувальний носій (наприклад, SD-карта) може містити як 64, так і 32-бітні версії ОС, а додаткове програмне забезпечення для завантаження (u-boot, arm-boot та інші) може визначати, яку з них завантажити. Більш жорстка частина - це userland - файлова система повинна бути багатохарактерною навіть у 32-бітних системах, де 64-бітний матеріал буде марний. Я би вирішив це за допомогою сценарію або утиліти, яку можна запустити після початкового завантаження для видалення непотрібних бібліотек та програмних виконуваних файлів у 32-бітних системах.


Можливо, нам потрібен X32 ABI для ARM. Тоді ми можемо мати невеликі вказівники та всі регістри.
rsaxvc

2

Існуючі відповіді дуже добре висвітлюють проблеми 64-бітної арки, але я не бачу багатьох заявлених переваг оновлення. Отже, ось я нещодавно відкрив два:

  • Коли PHP обробляє часові позначки Unix, розмір цілого числа в 32-бітовій арці встановлює верхню межу для дат, так що вони не можуть перевищувати конкретного дня 2038 року . Я думаю, це проблема для всіх мов, які обробляють часові позначки. (На щастя, більшість підсистем обробки дат, які не використовують часові позначки Unix, такі як DateTime PHP, розроблені спеціально, щоб не обмежуватись цією проблемою навіть на старих процесорах).
  • Mongo обмежений розміром баз даних розміром 2G на цій арці, і 32-бітні збірки незабаром будуть застарілі. З посібника :

    Починаючи з MongoDB 3.2, 32-розрядні двійкові файли застаріли, і вони не будуть доступні в майбутніх випусках.

    Хоча 32-бітні версії існують для Linux та Windows, вони непридатні для виробничих розгортань. 32-бітні збірки також не підтримують двигун зберігання даних WiredTiger.


Дивно, це залежить від вашої платформи. Зазвичай це не цілий розмір, а розмір time_t у бібліотеці "C". Навіть на 32-бітних платформах можливо використовувати 64-розрядний time_t з деякими накладними витратами на час процесора, але багато 32-розрядні платформи ще не роблять цього, оскільки при цьому виникає проблема бінарної сумісності.
rsaxvc

@rsaxvc, цікаво, дякую. Тож чи можу я отримати 64-бітну обробку часу шляхом перекомпіляції PHP, чи вимагатиме також модифікації базових бібліотек С? Перший був би в межах моїх можливостей, але не впевнений у другому - я розмірковував над тим, щоб перекомпілювати весь Рас [біан і сам, але, мабуть, немає простих вказівок зробити це (поки що, все одно).
півзахисник

для Linux вам потрібно буде виправити ядро, libc та свою програму. Мабуть, не варто. Після деякого читання OpenBSD (немає на RPi) time_t стає 64-розрядною з 5.5. У 32-бітних Windows, що використовують Visual Studio 2005 або новіший time_t, це 64-розрядна версія.
rsaxvc

@rsaxvc: добре, дякую. Цікаво, чи є сенс мені чекати появи 64-бітної ОС - це звучало неминуче в кількох новинних статтях від декількох місяців тому ....:-)
половина

-4

Мої думки з цього приводу: Хоча я не знаю точно, як процесор ARM адреси пам'яті, я можу вам сказати це з попередніх декількох архітектур процесора, які я запрограмував (SPARC / Alpha / i386 / AMD64 / X86_64): під час використання спільної пам'яті та адреси за своїм "реальним" вказівником віртуальної адреси переміщення на 64-бітний не є тривіальним. Хоча memcpy робить те, що має робити, потрібно враховувати, що в 64 бітах дані зберігаються так (біт назад):

HGFEDCBA
HGFEDCBA
HGFEDCBA

але в 32 бітах це виглядає приблизно так:

ABCD
ABCD
ABCD

Так, у 32 бітах, коли ви зберігаєте скажімо jpeg в оперативній пам’яті, ви можете читати його байти заголовка або виконувати виявлення ребер без проблем в лінійному режимі * скажімо, перейшовши байт на байт вперед. Але в 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.