Можем ли мы запустить Linux в чем-то быстрее, чем ОЗУ?

4391
Ziggy

Это, возможно, глупый вопрос, и может быть результатом недоразумения. Я сейчас изучаю процессоры и память в частности. Я только что читал о том, насколько быстрее SRAM, чем DRAM, но дороже. SRAM очень дорогой: я немного покупал и нашел SRAM-карту с батарейным питанием на 16 МБ примерно за 400 долларов.

Недавно друг упомянул, что он запускает Puppy Linux в оперативной памяти, и что это быстро. Я заметил, однако, что крошечное ядро ​​Linux может быть даже меньше ... всего 8 МБ! Это заставило меня задуматься: можем ли мы запустить Linux в SRAM? Этот вопрос даже правильно сформулирован?

Погуглить этот вопрос оказалось неэффективным, но он поднял еще больше вопросов. Можно ли запустить Linux в L3 Cache? Intel Core i7 может иметь кэш L3, достаточно большой, чтобы вместить 8 МБ ... но я делаю категорическую ошибку? В чем разница между этим и встроенным Linux?

Вот в чем вопрос: можем ли мы запустить Linux в SRAM или L3 Cache? Есть ли что-нибудь быстрее? Как быстро мы можем linux !?

г.

20
Встроенные Linux часто работают на оперативной памяти или энергонезависимой памяти. Встроенные Linux часто просто урезаны для работы только на определенном оборудовании или используют некоторые менее распространенные параметры ядра, такие как низкая задержка Journeyman Geek 11 лет назад 3
Интересно, есть ли практическое применение для этого вопроса? Robert Niestroj 11 лет назад 2
+1 за использование «linux» в качестве глагола (в последнем предложении)! Vorac 11 лет назад 4

6 ответов на вопрос

20
Hennes

Linux, or any other OS does not know how the RAM works. As long as the memory controller is properly configured (e.g. refresh rates set for non-SRAM) then the OS does not care is it runs on plain dynamic memory (plain RAM), fast page mode RAM (FP RAM, from the C64-ish times), Extended data out mode RAM (EDO), synchronious RAM (SDRAM), any of the double data rate SDRAMS (DDR 1/2/3) whatever.

All of those support reading and writing from random places. All will work.

Now cache is a bit different. You do not have to write to it for the contents to change. That will get in the way. Still, it is somewhat usable. I know that coreboot uses the cache as a sort of memory during boot, before the memory controller is properly configured. (For the details, check out the videos from the coreboot talks during FOSDEM 2011).

So in theory yes, you could use it.

BUT: For practical tasks a system with 1 GB 'regular' 'medium speed' memory will perform a lot better than with only a few MB super fast memory. Which means you have three choices:

  1. Build things the normal 'cheap' way. If you need more speed add a few dozen extra computers (all with 'slow' memory)
  2. Or build a single computer with a dozen times the price and significantly less then a dozen times the performance.

Except in very rare cases the last is not sensible.

Многие ЦП поддерживают режим «кэш-память-ОЗУ» через регистры, специфичные для модели ЦП (MSR). Также обратите внимание, что SRAM потребляет больше энергии, чем DRAM, и это также является конструктивным фактором. Если кэш процессора был достаточно большим или ядро ​​достаточно маленьким, вы можете включить этот режим кэширования как оперативной памяти и сохранить его выполнение полностью в SRAM на процессоре. У вас будет ограниченный объем оперативной памяти для запуска программ и т. Д. потому что AFAIK cache-as-RAM и обычный режим не будут работать одновременно. Хотя я могу ошибаться по этому поводу. Даже если бы это было так, большая часть скорости процессора в наши дни связана с использованием кеша L2, L3. LawrenceC 11 лет назад 5
@Hennes, разве Linux заботится только об (отображенных) адресах памяти? Alvin Wong 11 лет назад 0
SDRAM - это синхронная D (динамическая) RAM, тогда как SRAM - статическая RAM. Я не знаю, на кого вы хотели сослаться в первом абзаце, и у меня нет представителя, чтобы делать «тривиальные» правки, но, возможно, вы могли бы это исправить? Кроме этого, хороший ответ. a CVn 11 лет назад 0
Я не против уточнить, но я не уверен, что вы хотите уточнить. Можете ли вы добавить это в комментарии, и я отредактирую это. Hennes 11 лет назад 0
Когда я впервые прочитал этот комментарий, я увидел: «Linux или любая другая ОС умирает, не зная, как работает ОЗУ». Ваш срыв хорош: я думаю, у меня не было иллюзий, что это будет "лучше". Мне просто интересно, можно ли это сделать. Ziggy 11 лет назад 0
8
MSalters

Yes, you can, and this is in fact how it's already done, automatically. The most frequently used parts of RAM are copied in cache. If your total RAM usage is smaller than your cache size (as you suppose), the existing caching mechanism will have copied everything in RAM.

The only time when the cache would then be copied back to normal RAM is when the PC goes to S3 sleep mode. This is necessary because the caches are powered down in S3 mode.

Не все могут / будут скопированы. Для структуры кэш-памяти Intel / x86: если у меня кэш-память 256 КБ и кэш-память 1024 КБ, я могу прочитать адрес 0. Он будет сохранен в кеше в расположении 0. Затем я смогу прочитать адрес 1 и он будет сохранен в кеше в расположении 1 Однако, если я прочитаю адрес из (256Kib + 1), он также будет храниться по адресу 1 в кеше. Кэш использует дополнительную (метку) SRAM, чтобы указать, какой из этих двух элементов хранится. Это означает, что чтение с кратных размеров кэшей не будет работать хорошо. (Обратите внимание, что это будет редкая вещь и обычно может быть проигнорировано). Hennes 11 лет назад 1
Это проницательно! Зачем мне неуклюже складывать то, что я считаю важным, в кэш-память L3, если я могу позволить армии гениев определить оптимальную вещь и запрограммировать процессор для этой оптимальной вещи. Правильно? Ziggy 11 лет назад 0
3
Marc Lehmann

Многие процессоры позволяют использовать кэш в качестве оперативной памяти. Например, большинство новых процессоров x86 могут конфигурировать определенные регионы как обратную запись с чтением без заполнения при чтении через MTRR. Это может использоваться для обозначения области адресного пространства как - эффективно - кеш-памяти.

Будет ли это полезно, другой вопрос - это заблокирует ядро ​​в ОЗУ, но в то же время уменьшит эффективный размер кэша. Также могут быть побочные эффекты (такие как отключение кэширования для остальной части системы), которые замедляют процесс.

1
Phil Hannent

"can we run linux in L3 Cache?"

No, Cache is there for a specific job of holding program data and instructions ready for when the processor is going to need them. You'll find the operating system in the cache anyway because its constantly being used. Loading all the OS into cache isn't efficient since you are not using every code path in the kernel at once.

"can we run linux in SRAM?"

Certainly you could use battery backed SRAM as your boot partition, you could then used the embedded flag of execute in place. That might lead to faster boot times and slightly faster operations. However a major factor is the bandwidth between the L3 Cache and where the kernel is (a boot drive or RAM).

"Is there anything faster? How fast can we linux!?"

Generally hardware manufacturers and operating systems developers are working to make processing as fast as possible. However your question is very general, do you want to speed up boot times, optimize file system access, speed up computations or something else. Once you have a more specific question you can certainly start to find the bottleneck and remove it. Your SRAM drive would certainly speed up your boot process. Getting to a GUI in 3 seconds would be very cool to see.

1
Rich Homolka

Back in the days of 486es there used to be machines where all of the RAM was SRAM. This is back when 8MB was a lot, but seems to match your constraints. I'm sure 8MB of SRAM is much cheaper now than back then.

So, you could run Linux in SRAM if the machine was made that way. It's not a theoretical; it's been done.

But, not in Cache. Cache is wired differently, and more importantly addressed differently. You can't address it the same. Chunks are mapped in differently, not as a continuous chunk. And the contents aren't necessarily what you see on disk - newer Intel chips do a sort of Just in time "compiling" (more of a CISC=>RISC-micro-op re-encoding) where the micro-ops are the things that end up in cache. In short, what's in cache isn't your program, but a changed view of it, so you couldn't use it as a memory representation of your program any more.

The question is why. Other than "because I can" there's not a lot of reason for this. The Cache system gets you most of the speed benefit with a lot less of the cost. And remember cost isn't just dollars.... SRAM takes more transistors, which means more electricity.

1
Max

"Можем ли мы запустить Linux в L3 Cache?"

Нет, это невозможно, поскольку кэш-память не имеет прямой / линейной адресации.
Из-за того, как кэш-память спроектирована, реестр счетчика программ ЦП (IP) не может указывать на местоположение в кэш-памяти.

Кэш ЦП имеет свою собственную «ассоциативность», и эта ассоциативность определяет способ, которым «нормальная» память «отображается» в кэш-памяти. Эта особенность кэш-памяти является одной из причин, по которой кэш-память так быстро работает.