В защиту swap'а [в Linux]: распространенные заблуждения

https://chrisdown.name/2018/01/02/in-defence-of-swap.html
  • Перевод
Прим. перев.: Эта увлекательная статья, в подробностях раскрывающая предназначение swap в Linux и отвечающая на распространённое заблуждение на этот счёт, написана Chris Down — SRE из Facebook, который, в частности, занимается разработкой новых метрик в ядре, помогающих анализировать нагрузку на оперативную память. И начинает он своё повествование с лаконичного TL;DR…



TL;DR


  • Swap — достаточно важная часть хорошо функционирующей системы. Без него сложнее достичь разумного управления памятью.
  • Swap нужен не столько для срочного получения памяти, сколько для ровного и эффективного высвобождения памяти. Использовать его в качестве «срочной памяти» в общем случае очень вредно.
  • Отключение swap не спасает от проблемы дискового ввода/вывода при конкуренции за память — дисковый I/O просто перемещается с анонимных страниц на файловые. Это не только может быть менее эффективным, поскольку остаётся меньший пул страниц, доступных для высвобождения, но и само по себе может способствовать появлению этой высокой конкуренции.

Предисловие


Работая над улучшением и использованием cgroup v2, я успел поговорить со многими инженерами об их отношении к управлению памяти, особенно о поведении приложения под нагрузкой и об эвристическом алгоритме операционной системы, используемым «под капотом» для управления памятью.

Повторяющейся темой этих обсуждений стал swap. Тема swap активно оспаривается и плохо понимается даже теми, кто проработал с Linux долгие годы. Многие воспринимают его как нечто бесполезное или очень вредное — мол, это пережиток прошлого, когда памяти было мало и диски являлись необходимым злом, предоставляющим столь нужное пространство для подкачки. И до сих пор, все последние годы, я достаточно часто наблюдаю споры вокруг этого утверждения: немало дискуссий провёл и я сам с коллегами, друзьями, собратьями по индустрии, помогая им понять, почему swap — это по-прежнему полезная концепция на современных компьютерах, имеющих гораздо больше физической памяти, чем в былые времена.

Широкое недопонимание существует и насчёт предназначения swap'а: многие люди видят в нём лишь «медленную дополнительную память» для использования в критических ситуациях, но не понимают его вклад в адекватное функционирование операционной системы в целом при нормальной нагрузке.

Многие из нас слышали такие распространённые фразы о памяти: «Linux использует слишком много памяти», «swap должен быть вдвое больше размера физической памяти» и т.п. Эти заблуждения легко развеять и их обсуждения стали более точными в последние годы, однако миф о «бесполезном» swap гораздо больше завязан на эвристику и таинство, которые не поддаются объяснению с простой аналогией, — для его обсуждения требуется более глубокое понимание управления памятью.

Эта публикация в основном нацелена на тех, кто администрирует Linux-системы и заинтересован в том, чтобы услышать аргументы против отсутствия/слишком малого объёма swap или работы с vm.swappiness, выставленным в 0.

Введение


Сложно говорить, почему наличие swap'а и перемещение в него страниц памяти — хорошо при нормальной работе, не разделяя понимание некоторых базовых нижележащих механизмов в управлении памятью в Linux, поэтому давайте убедимся, что говорим на одном языке.

Типы памяти


В Linux существует множество различных типов памяти, и у каждого из этих типов есть свои свойства. Понимание их особенностей — ключ к пониманию, почему swap важен.

Например, есть страницы («блоки» памяти, обычно по 4k), ответственные за хранение кода для каждого процесса, запущенного на компьютере. Есть также страницы, ответственные за кэширование данных и метаданных, относящихся к файлам, к которым обращаются эти программы для ускорения своих обращений в будущем. Они являются частью страничного кэша [page cache], и далее я буду на них ссылаться как на файловую [file] память.

Есть также страницы, которые отвечают за распределение памяти, сделанное внутри этого кода, например, когда с malloc выделяется новая память для записи в неё или когда используется флаг MAP_ANONYMOUS в mmap. Это «анонимные» страницы — они так называются, потому что ничем не «поддерживаются», — и я буду ссылаться на них как на анонимную [anon] память.

Есть и другие типы памяти: разделяемая память, slab-память, память стека ядра, буферы и иные, — но анонимная память и файловая память известны лучше других и просты для понимания, поэтому именно они будут использоваться в примерах, которые, впрочем, равносильно применимы и к другим типам.

Память с высвобождением и без


В размышлениях о конкретном типе памяти одним из главных вопросов становится возможность её высвобождения. «Высвобождение» [reclaim] означает, что система может, без потери данных, удалить страницы этого типа из физической памяти.

Для некоторых типов страниц это сделать весьма просто. Например, в случае чистой [clean], т.е. немодифицированной, памяти страничного кэша мы просто кэшируем для лучшей производительности то, что уже есть на диске, поэтому можем сбросить страницу без необходимости в каких-либо специальных операциях.

Для некоторых типов страниц это возможно, но непросто. Например, в случае грязной [dirty], т.е. модифицированной, памяти страничного кэша мы не можем просто сбросить страницу, потому что на диске ещё нет произведённых модификаций. Поэтому необходимо или отказаться от высвобождения [reclamation], или перенести наши изменения обратно на диск перед тем, как сбрасывать эту память.

Для некоторых типов страниц это невозможно. Например, упомянутые раньше анонимные страницы могут существовать только в памяти и никаком ином резервном хранилище, поэтому их необходимо хранить здесь (т.е. в самой памяти).

О природе swap'а


Если поискать объяснения, зачем нужен swap в Linux, неизбежно находятся многочисленные обсуждения его предназначения просто как расширения физической RAM для критических случаев. Вот, например, случайный пост, который я вытащил из первых результатов в Google по запросу «what is swap»:

«По своей сути swap — это экстренная память; запасное пространство для случаев, когда система на какое-то время нуждается в большем количестве физической памяти, чем доступно в RAM. Она считается «плохой» в том смысле, что медленная и неэффективная, и если системе постоянно требуется использовать swap, очевидно, ей не хватает памяти. [..] Если у вас достаточно RAM для удовлетворения всех потребностей и вы не ожидаете её превышения, вы можете прекрасно работать и без swap-пространства».

Поясню, что я вовсе не обвиняю автора этого комментария за содержимое его поста — это «общеизвестный факт», признаваемый многими системными администраторами Linux и являющийся, пожалуй, одним из наиболее вероятных ответов на вопрос о swap'е. К сожалению, это вдобавок и неправильное представление о предназначении и использовании swap'а, особенно на современных системах.

Как я уже писал выше, высвобождение анонимных страниц «невозможно», поскольку анонимные страницы по своей природе не имеют резервного хранилища, к которому можно обратиться при удалении данных из памяти, — таким образом, их высвобождение приведёт к полной утере данных из соответствующих страниц. Однако… что будет, если мы смогли бы создать такое хранилище для этих страниц?

Вот именно для этого и существует swap. Swap — область хранения для этих, кажущихся «невысвобождаемыми» [unreclaimable], страниц, позволяющая отправлять их на устройство хранения по запросу. Это означает, что их можно начинать считать такими же доступными для высвобождения, как и их более простые в этом смысле друзья (вроде чистых файловых страниц), что позволяет эффективнее использовать свободную физическую память.

Swap — это преимущественно механизм для равного высвобождения, а не для срочной «дополнительной памяти». Не swap замедляет работу вашего приложения — замедление происходит из-за начала совокупной конкуренции за память.

Итак, в каких же ситуациях это «равное высвобождение» будет оправданно выбирать высвобождение анонимных страниц? Вот абстрактные примеры некоторых не самых редких сценариев:

  1. Во время инициализации долго выполняющаяся программа может выделить и использовать многие страницы. Эти же страницы могут использоваться в процессе завершения работы/очистки, но не требуются после «старта» (в понимании самого приложения) программы. Довольно распространённое явление для демонов, использующих крупные зависимости для инициализации.
  2. Во время нормальной работы программы мы можем выделить память, которая затем редко используется. Для общей же производительности системы может оказаться более разумным использовать память для чего-то более важного, чем выполнять значительный отказ страницы с выгрузкой данных этой страницы на диск.

Что происходит с использованием swap и без него


Давайте посмотрим на типовые ситуации и к чему они приводят при наличии и отсутствии swap. О метриках «конкуренции за память» я рассказываю в докладе про cgroup v2.

Без конкуренции или с малой конкуренцией за память


  • При наличии swap: мы можем положить в swap анонимную память, которая редко используется и нужна только в небольшой части жизненного цикла процесса. Это позволяет использовать данную память для улучшения коэффициента попаданий в кэш и других оптимизаций.
  • Без swap: не можем складывать в swap редко используемую анонимную память, поскольку она вынуждена храниться только в памяти. Не факт, что это сразу приведёт к проблеме, однако в некоторых рабочих нагрузках производительность может упасть из-за устаревших анонимных страниц, забирающих место у более важных задач.

С умеренной или высокой конкуренцией за память


  • При наличии swap: у всех типов памяти одинаковая вероятность высвобождения. Это означает большую вероятность успешного высвобождения страниц — мы можем высвобождать страницы, которые не будут быстро снова приводить к отказу (к пробуксовке [thrashing]).
  • Без swap: анонимные страницы ограничены памятью, т.к. не имеют альтернатив для хранения. Вероятность успешного долгосрочного высвобождения страниц ниже, поскольку оно доступно только для некоторых типов памяти. Риск пробуксовки страниц выше. Случайный читатель может подумать, что так всё равно будет лучше, поскольку не случится нагрузки на ввод/вывод диска, но это не так: мы попросту переносим disk I/O из-за swapping'а на сброс горячего страничного кэша и сегментов кода, которые нам скоро понадобятся.

При временных всплесках в потреблении памяти


  • При наличии swap: устойчивость к временным всплескам выше, однако в случае резкой нехватки памяти время между пробуксовкой и работой OOM killer может вырасти. Нам лучше видны причины нагрузки на память и мы можем более рационально повлиять на них, можем осуществить контролируемое вмешательство.
  • Без swap: OOM killer вызывается быстрее, поскольку анонимные страницы ограничены памятью и не могут быть высвобождены. Мы скорее столкнёмся с пробуксовкой, однако время между ней и OOMing'ом сократится. Будет лучше или хуже — зависит от конкретного приложения. Например, основанное на очередях приложение может захотеть потребовать такого быстрого перехода от пробуксовки к OOMing'у. Тем не менее, всё равно уже слишком поздно для полезных действий — OOM killer вызывается только в случаях резкой нехватки памяти. Вместо того, чтобы полагаться на такое поведение, в первую очередь лучше позаботиться о более оппортунистическом подходе (т.е. направленном на следование своим интересам — прим. перев.) к убиванию процессов при достижении состояния конкуренции за память.

Окей, я хочу системный swap, но как его настроить для конкретных приложений?


Вы же не думали, что в этой статье не будет упоминаний использования cgroup v2?

Очевидно, что общему эвристическому алгоритму тяжело не ошибаться всё время, поэтому важно иметь возможность дать необходимые инструкции ядру. Исторически единственной настройкой, которую можно было применить на системном уровне, являлась vm.swappiness. У неё две проблемы: vm.swappiness крайне сложно разумно применять, потому что она является лишь маленькой частью гораздо большей эвристической системы, и она применима лишь ко всей системе, но не к ограниченному набору процессов.

Можно также использовать mlock для фиксации страниц в памяти, но такой подход требует либо модификации кода программы и забав с LD_PRELOAD, либо ужасных танцев с отладчиком во время исполнения приложения. В языках, основанных на виртуальных машинах, всё это тоже не так-то хорошо работает, поскольку у вас обычно нет возможности контролировать распределение памяти и приходится делать mlockall, у которого нет точных настроек для тех страниц, что действительно важны.

В cgroup v2 есть определяемая на каждую cgroup настройка memory.low, которая позволяет сказать ядру отдавать предпочтение другим приложениям для высвобождения до достижения определённого порога используемой памяти. Нет гарантий, что ядро предотвратит swapping частей приложения, однако оно будет предпочитать высвобождение для других приложений в случае конкуренции за память. В нормальных условиях логика swap'а в ядре в целом достаточно хороша, так что разрешение оппортунистически выносить в swap страницы в общем случае повышает системную производительность. Пробуксовка swap'а в условиях сильной конкуренции за память не идеальна, но это скорее просто особенность ситуации нехватки памяти, чем проблема swapper'а. В ситуациях, когда давление на память начинает расти, вы обычно хотите быстрого завершения работы некритических процессов посредством их «самоубийства».

И в этом вопросе нельзя просто положиться на OOM killer. Потому что OOM killer вызывается только в самых критичных ситуациях, когда система уже оказалась в значительно нездоровом состоянии и, возможно, находилась в нём некоторое время. Необходимо самостоятельно и оппортунистически разрешить ситуацию ещё до того, как задумываться об OOM killer'е.

Тем не менее, выявить давление на память достаточно трудно с помощью традиционных счётчиков памяти в Linux. Нам доступно нечто, что каким-то образом относится к проблеме, однако скорее по касательной: потребление памяти, количество операций сканирования страниц и т.п. — и по одним этим метрикам очень трудно отличить эффективную конфигурацию памяти от той, что приводит к конкуренции за память. У нас есть группа в Facebook, возглавляемая Johannes'ом и работающая над новыми метриками, упрощающими демонстрацию давления на память, — это должно помочь нам в будущем. Больше информации об этом можно получить из моего доклада про cgroup v2, где я начинаю подробнее рассказывать об одной из метрик.

Тюнинг


Сколько же swap'а мне тогда нужно?


В общем случае минимальное количество swap-пространства, требуемого для оптимального управления памятью, зависит от количества анонимных страниц, которые привязаны к пространству памяти и к которым редко обращается приложение, а также от стоимости высвобождения этих анонимных страниц. Последнее — это в большей степени вопрос о том, какие страницы больше не должны удаляться, чтобы уступить место тем анонимным страницам, к которым редко обращаются.

Если у вас достаточно дискового пространства и свежее (4.0+) ядро, большее количество swap'а почти всегда лучше, чем меньшее. В более старых ядрах kswapd — один из процессов ядра, что отвечает за управление swap'ом, — исторически слишком усердствовал в перемещении памяти в swap, делая это тем активнее, чем больше swap'а было доступно. В последнее время поведение swapping'а при наличии большого swap-пространства значительно улучшили. Так что, если вы работаете с ядром 4.0+, большой swap не приведёт к чрезмерному swapping'у. В общем, на современных ядрах нормально иметь swap размером в несколько гигабайт, если такое пространство у вас есть.

Если же дисковое пространство ограничено, ответ в действительности зависит от компромисса, на который вы готовы пойти, и особенностей окружения. В идеале у вас должно быть достаточно swap'а, чтобы система оптимально функционировала при нормальной и пиковой (по памяти) нагрузке. Рекомендую настроить несколько тестовых систем с 2-3 Гб swap'а или более и понаблюдать, что происходит на протяжении недели или около того в разных условиях нагрузки (на память). Если на протяжении этой недели не случалось ситуаций резкой нехватки памяти, что означает недостаточную пользу такого теста, всё закончится занятостью swap'а небольшим количеством мегабайт. В таком случае, пожалуй, разумно будет иметь swap хотя бы такого размера с добавлением небольшого буфера для меняющихся нагрузок. Также atop в режиме логирования в столбце SWAPSZ может показать, страницы каких приложений попадают в swap. Если вы ещё не используете эту утилиту на своих серверах для логирования истории состояний сервера — возможно, в эксперимент стоит добавить её настройку на тестовых машинах (в режиме логирования). Заодно вы узнаете, когда приложение начало перемещать страницы в swap, что можно привязать к событиям из логов или другим важным показателям.

Ещё стоит задуматься о типе носителя для swap'а. Чтение из swap имеет тенденцию быть очень случайным, поскольку нельзя уверенно предсказать, у каких страниц будет отказ и когда. Для SSD это не имеет особого значения, а вот для вращающихся дисков случайный ввод/вывод может оказаться очень дорогим, поскольку требует физических движений. С другой стороны, отказы у файловых страниц обычно менее случайны, поскольку файлы, относящиеся к работе одного запущенного приложения, обычно менее фрагментированы. Это может означать, что для вращающегося диска вы можете захотеть сместиться в сторону высвобождения файловых страниц вместо swapping'а анонимных страниц, но, опять же, необходимо протестировать и оценить, как будет соблюдаться баланс для вашей рабочей нагрузки.

Для пользователей ноутбуков/десктопов, желающих использовать swap для перехода в спящий режим [hibernate], этот факт также необходимо учитывать, поскольку swap-файл тогда должен как минимум соответствовать размеру физической оперативной памяти.

Какой должна быть настройка swappiness?


Во-первых, важно понимать, что делает vm.swappiness. Это системная настройка (sysctl), смещающая высвобождение памяти в сторону анонимных страниц или файловых страниц. Для реализации используются два разных атрибута: file_prio (стремление высвобождать файловые страницы) и anon_prio (стремление высвобождать анонимные страницы). vm.swappiness обыгрывает эти атрибуты, становясь значением по умолчанию для anon_prio и вычитаясь из стандартного значения 200 в file_prio, то есть vm.swappiness = 50 равносильно значению anon_prio в 50 и file_prio в 150 (точные числа не играют роли — важен их вес относительно друг друга).

Это означает, что vm.swappiness — это по существу просто соотношение дорогой анонимной памяти, которую можно высвобождать и приводить к отказам, в сравнении с файловой памятью для вашего железа и рабочей нагрузки. Чем ниже значение, тем активнее вы сообщаете ядру, что редкие обращения к анонимным страницам дороги для перемещения в swap и обратно на вашем оборудовании. Чем выше это значение, тем вы больше говорите ядру, что стоимость swapping'а анонимных и файловых страниц одинакова на вашем оборудовании. Подсистема управления памятью будет по-прежнему пытаться решить, помещать в swap файловые или анонимные страницы, руководствуясь тем, насколько «горяча» память, однако swappiness склоняет подсчёт стоимости в пользу большего swapping'а или большего пропуска кэшей файловой системы, когда доступны оба способа. На SSD-дисках эти подходы практически равны по стоимости, поэтому установка vm.swappiness = 100 (т.е. полное равенство) может работать хорошо. На вращающихся дисках swapping может быть значительно дороже, т.к. в целом он требует случайного чтения, поэтому вы скорее всего захотите сместиться в сторону меньшего значения.

Реальность же в том, что большинство людей не имеют представления о том, чего требует их железо, поэтому настроить это значение, основываясь лишь на инстинкте, затруднительно — это вопрос, требующий личного тестирования с разными значениями. Можно также заняться анализом состава памяти вашей системы, основных приложений и их поведения в условиях небольшого высвобождения памяти.

Говоря о vm.swappiness, необходимо учитывать исключительно важное изменение недавнего времени, сделанное Satoru Moriya в vmscan в 2012 году: оно в значительной мере меняет поведение vm.swappiness = 0.

Этот патч по существу говорит, что при установке vm.swappiness = 0 мы донельзя настроены против сканирования (и высвобождения) любых анонимных страниц, пока не настало состояние высокой конкуренции за память. Как отмечалось ранее, в общем случае вы не захотите такого поведения, поскольку оно исключает равенство приоритетов высвобождения до моментов экстремального давления на память, что само по себе в действительности может и привести к этому экстремальному давлению. Поэтому vm.swappiness = 1 — минимальное значение, которое стоит выбирать, если вы не хотите активировать такое особое поведение для сканирования анонимных страниц, реализованное в патче.

Значение ядра по умолчанию — vm.swappiness = 60. В общем случае это неплохое значение для большинства рабочих нагрузок, но трудно иметь общее стандартное значение, которое подошло бы всем. Поэтому ценным дополнением к тюнингу, упомянутому в разделе «Сколько же swap'а мне тогда нужно?», станет тестирование систем с различными значениями vm.swappiness и наблюдение за метриками приложения и системы под большой нагрузкой (на память). В скором будущем, когда мы получим достойную реализацию определения refault в ядре (см. также «refault distance-based file cache sizing» — прим. перев.), вы сможете определять значение достаточно независимо от рабочей нагрузки, глядя на метрики «page refaulting» в cgroup v2.

Заключение


  • Swap — полезный инструмент для возможности равного высвобождения страниц памяти, но его назначение зачастую неправильно понимается, что приводит к его негативному восприятию в индустрии. Если вы будете использовать swap в том ключе, для которого он создан, то есть как средство увеличения равенства высвобождения, то обнаружите его полезной утилитой, а не какой-то проблемой.
  • Отключение swap не спасает от проблемы дискового ввода/вывода при конкуренции за память — дисковый I/O просто перемещается с анонимных страниц на файловые. Это не только может быть менее эффективным, поскольку остаётся меньший пул страниц, доступных для высвобождения, но и само по себе может способствовать появлению этой высокой конкуренции.
  • Swap может замедлить вызов OOM kill системой, поскольку является другим, более медленным, источником памяти для пробуксовки в ситуациях нехватки памяти. Но OOM killer используется ядром как последняя надежда, когда все другие возможности полностью исчерпаны. Сами эти возможности зависят от конкретной системы:
    • Вы можете изменить рабочую нагрузку на систему в соответствии со своими потребностями, в зависимости от локального (cgroup) или глобального давления на память. Это поможет избежать таких ситуаций, однако на протяжении всей истории Unix исчерпывающих метрик для измерения давления на память было недостаточно. Надежды возлагаются на скорое исправление ситуации с появлением refault detection.
    • Вы можете переместить высвобождение (и, таким образом, swapping) от определённых процессов (per-cgroup) с помощью memory.low, что обеспечит его доступность для критически важных демонов без полного отключения swap.

Флант

279,61

Специалисты по DevOps и высоким нагрузкам в вебе

Поделиться публикацией
Комментарии 139
    +14
    Честно говоря — вы меня не убедили. Отсутствие свопа в продакшене дает стабильную производительность приложения в любых условиях. Если какие-то страницы памяти не использовались сутки — скорость доступа будет также высока. И конечно варнинги на доступную память в мониторинге намного более просты и очевидны когда своп не используется. Я привык что если на ноде не хватает памяти — лучше что бы она выключилась(ООМ) чем тормозила.
      +1
      Это вообще-то перевод.
        +1
        Зависит от типа системы. Если это сервер с равномерной нагрузкой, которая использует меньше памяти, чем есть в системе — то своп в принципе не нужен. Если памяти впритык — то в свопе появляться смысл.

        Дело в том, что ядро не видит большой разницы между свопом и открытыми файлами. И если свопа нет, а память нужна — то сбрасываются файловые кеши, с которыми прямо сейчас кто-то мог работать. В результате даже при выключенном свопе мы наблюдаем высокое IO, будто система «свопится».
        Если своп есть, то туда вытесняются страницы к которым редко обращались, а файловый кеш остается на месте, что повышает среднюю производительность.
          +3
          И если свопа нет, а память нужна — то сбрасываются файловые кеши, с которыми прямо сейчас кто-то мог работать.
          Если бы только файловые кеши! Исполняемый код сбрасывается! А потом загружается. На машинке с каким-нибудь тяжёлым бинарником может дойти до того, что переключение на текстовую консоль будет час занимать (заметьте — без кавычек, я имею в виде не «очень долго», а буквально час времени от нажатия Ctrl+Alt+F1 до появления приглашения).
            +1
            десктоп с 1гб, mint, mate — дичайшие тормоза интерфейса после пары часов проигрывания музыки
            не час, конечно, но минут 10 переключался в консоль и ещё столько же создавал файл 256мб и делал в него swapon, после чего всё волшебным образом заработало
              0
              Так код — это точно такой же файловый кеш. Сделайте cat /proc/self/maps и увидите что исполняемый файл замаплен в адресное пространство процесса наравне со всеми остальными открытыми файлами.
                0
                Угу — но часто люди, обсуждающие «ненужность» свопа про это забывают. А это — ключевой момент. Даже если используется JIT — всё равно внушительная часть кода оказывается замаплена.
                –1
                > Исполняемый код сбрасывается!
                Тогда уже вопрос к тому, кто поскупился на память.
                Или дрючим диск, дёргая ФС, потому что кэша не хватает. Или дрючим диск, дёргая swap, потому что система опять всё засвопила. Ну или дрючим того, кто это проектировал.
                  +1
                  > Исполняемый код сбрасывается!
                  Тогда уже вопрос к тому, кто поскупился на память.
                  Это — уже совсем другая история. Если памяти — с избытком, то всё будет работать независимо от наличия свопа. Но это — нерационально, да и ошибки никто не отменял. И вот когда памяти мало — без свопа начинаются проблемы, так как задолго до того, как памяти не станет совсем и начнёт работать OOM-киллер из памяти будет выгружен почти весь код и не будет выгружены данные.

                  Система в такой конфигурации работает паршиво, вот и всё.
                0
                Почему вы считаете, что программист, который писал свою программу ошибся и хранит «ненужные» данные в памяти, а не подсасывает с диска по мере надобности и ОС лучше «знает» и выгружает «ненужные/неиспользуемые» страницы на диск?
                  +7
                  Так показывает практика. Прикладные программисты вообще плюют на использование ресурсов. На текущей работе уже бывали случаи когда великие планы смежников сделать все по быстрому на стандартных фреймворках обламывались тем фактом, что на целевой системе всего 4Гб памяти, причем эта память делиться между тремя виртуальными машинами и аппаратурой, которой вынь да положь непрерывный регион физической памяти.
                  А еще программисты делают ошибки и в их программах течет память. Например, у меня некоторое время подтекал Xorg и выжирал 16 Гб свопа.

                  Конечно же есть единицы, которые бережно относятся к ресурсам. Но вы же прекрасно знаете что сейчас доминирует мнение о том что одна планка памяти стоит дешевле для работы программиста. И поэтому вкладка gmail в браузере, отжирающая половину гигабайта — это норма. Как вы думаете, там действительно все 500мб — нужные данные?
                    0
                    Я думаю что да. Ради того чтобы страницы рендерилась 1 миллисекунду, я бы отдал еще 500 мб.
                      +2
                      Только с ростом объёма памяти растут накладные расходы на её обслуживание, на всех уровнях, от сборщика мусора в JS до ограничений кеша трансляции адресов. И бесконтрольное выжирание памяти только к тормозам и приводит. Конечно, есть задачи, которые всегда получают прирост скорости от увеличения памяти, но рендеринг страницы гмейла вряд ли входит в их число.
                        0
                        Так можно сказать и наоборот: вкладка занимает 20 мб, а вот если бы занимала бы 500, то тогда накладные расходы и все такое не дало бы прироста скорости.
                        И мне кажется что прирост скорости по сравнению с 10-летними браузерами доходит до порядка.

                        И да, на i7 с нормальной озу не думаю что обслуживать это проблема.
                          0
                          И да, на i7 с нормальной озу не думаю что обслуживать это проблема.
                          По-моему эта фраза говорит нечто строго противоположное предыдущему комментарию. На «i7 с нормальной ОЗУ» тормоза от того, что программа написана «рыхло» и потребляет кучу ресурсов меньше заметно, да — но это не значит, что оно работает быстрее.
                            0
                            > на i7 с нормальной озу
                            «Это не у нас хреновый код, а у вас компы слабые.»
                            Не надо так делать. С таким подходом получается фигня тормозная изнутри и уродливая снаружи.
                  0
                  Торможение даёт вам время. OOM — нет. Просто, если вместо метрик нагрузки у вас мониторится состояние (жива/мертва), то я даже не знаю… Надеюсь, это не какой-то важный, нужный людям сервис.
                    0
                    Просто, если вместо метрик нагрузки у вас мониторится состояние (жива/мертва), то я даже не знаю… Надеюсь, это не какой-то важный, нужный людям сервис.
                    Это нормальная ситуация при использовании autoscaling в облаке (автоматическое создание/уничтожение виртуальных серверов).
                    Например, есть 5 серверов (из них 4 обеспечивают нетормозную работу при текущей нагрузке, плюс 1 для горячей замены), и если один сервер по какому-то показателю оказывается «плох», то он просто прибивается. И запускается новый ему на замену.
                      0
                      Надеюсь, это не какой-то важный, нужный людям сервис.

                      А кто из людей вам важнее?
                      По моему опыту у владельцев ресурса, клиентов (например — покупателей рекламного трафика), администраторов и посетителей запросто могут быть различающиеся представления касательно ранжирования по важности.
                        0
                        Да, уж. Сейчас, когда многие компании могут годами работать без прибыли и развиваться, уже и не поймёшь что и кто является важным. Доступность сайта для клиентов является важной? А шут его знает. :)
                      0
                      >И конечно варнинги на доступную память в мониторинге намного более просты и очевидны когда своп не используется
                      Какую неочевидность в данном случае вносит своп? Ваша система мониторинга суммирует к свободной RAM своп?
                        0
                        Мы мониторим несколько метрик. Потребления памяти конкретного процесса(RAM и своп отдельно). И свободную рам память. Последняя метрика с алертом.
                        Неоднозначность — приложение может в любой момент решить использовать что-то старое и перенесет это из свопа в RAM. Резко и очень много.
                        Отдельный такой пик мы переживаем без проблем. Но если одновременно так сделают 2-3 процесса — пик слишком большой и активные процессы свопятся и тормозят.
                        При этом система стабильна по производительности и имеет запас свободной памяти в 20-30%
                        0
                        Отсутствие свопа в продакшене дает стабильную производительность приложения в любых условиях.


                        «Равномерную» производительность. Равномерную вплоть до стерильности, до микросекунд.
                        Но отнюдь не стабильность.
                        Стабильность как раз ниже — так как в случае нехватки памяти приложение просто «вылетит».
                        Swap — это «страховка» от подобных ситуаций. И это страховка чего-то стоит, разумеется, каких то затрат.
                        0
                        Много букв, но так и непонятно — если есть возможность докупить еще N gb памяти, можно ли и когда ставить swappiness в 0 (1)
                          +1
                          Память нужно докупать тогда, когда вас начинает доставать высокое IO. Включение свопа может ненамного отложить этот момент.
                            +1
                            Правильно включить своп и смотреть, когда он сильно наполняется. Если ДИНАМИКА плохая, надо докупать памяти.
                            А без свопа у вас просто РАЗ и упадет приложение.
                              0
                              От РАЗ есть мониторинг + часто лучше пусть падает, чем начнёт свопиться, что вызовет ещё уменьшение скорости обработки, нарастание своппинга и отзывчивость сервера превращается в «логинимся 30 минут». Я и такое ловил как-то.
                              Если постоянно отслеживается свободная память и потребление никогда не превышает 80% (остальное — всякие кэши, в том числе для этого нужен избыток памяти), то можно ли выключать swappiness и вообще своп.
                                0
                                Вы с деньгами никогда не работали? Большинство клиентов не устраивает падение сервиса считающего деньги(биллинги всякие) даже раз в год.
                                Нельзя, нельзя выключать своп у любой организации которая не песочница для детей. Люди очень волнуются даже когда посты пропадают на форуме.
                            0

                            Главным образом он не раскрыл тему проблем с управляемой памятью. Например у нас есть java машина, или мощная БД (Oracle, Postgres), которые обладают собственной логикой работы с памятью (особенно jdk) и которым попадание в swap крайне мешает. Собственно тот же Google давно на многих своих машинах отключил своп.

                              0
                              Чтобы Oracle, PostgreSQL, или JVM или что то еще не использовали swap в Linux, можно например сконфигурировать для них т.н. LargePages (в linux размер такой страницы 2Mб). Эти страницы в принципе не вытесняются из RAM в дисковый swap.
                              Выгоды использования LargePages:
                              — сегмент памяти находится в RAM и не вытесняется в swap — обращение к страницам в памяти быстрее
                              — ниже затраты CPU на адресацию страниц, поскольку при том же объеме сегмента в памяти, число страниц меньше (чем при использовании обычных 4К страниц)
                              — меньше размер PageTable для адресации сегмента из больших страниц
                              Enjoy.
                              Надо только чтобы приложение поддерживало использование этих LargePages. Например Oracle и PostgreSQL поддерживают. В Oracle такие страницы называются HugePages.
                                0
                                В Oracle такие страницы называются HugePages.

                                Важное уточнение. В Oracle только SGA кладется в большие страницы, а вот PGA нет.

                                  +1
                                  Да, HugePages у Oracle используются только для SGA.
                              +9
                              Всегда отключал своп на лине. Довольно редко, но периодически, ловил фриз системы на ноутах и десктопах, причем не важно сколько памяти — 4гб или 16, больше памяти — реже фризы.
                              C загруженной IDEA и запущенным Jetty с проектом открываешь очередную вкладку в браузере и на тебе — светодиод активности диска загорается и уже не гаснет, мышка начинает тормозить и секунд через 20 она встает и слышно только непрерывный хруст винта. Оомкиллер отдыхает, видимо ему самому не хватает памяти для запуска. Простоять так может долго, я больше получаса не ждал, еще не разу не отвисла.
                              Если застать момент, когда мышь начинает тормозить, и успеть переключиться в другую консоль, оттуда убить любую задачу и освободить тем самым пару гигов памяти, все начинает работать как ни в чем не бывало. Или же успеть по быстрому закрыть пару вкладок в браузере.
                              Через несколько лет таких мучений однажды обнаружил раздел со свопом — 2гб на рабочем ноуте, я его оказывается делал, на всякий случай ))). Включил своп — и, о чудо!, фризы пропали, точнее начинающийся фриз секунд через 5 сам по себе проходит.
                              Так что могу кратко и емко рассказать, как живет линукс без свопа — «хреново»!
                                0
                                Это какое-то приложение выжирает всю память, решить можно так:
                                echo 2 | sudo tee /proc/sys/vm/overcommit_memory
                                echo 80 | sudo tee /proc/sys/vm/overcommit_ratio

                                Это запретит одному приложению выжрать более 80% памяти.
                                  +1

                                  Вы тем самым вырубите возможность резервировать большие куски адресного пространства, чем создадите туеву гору проблем приложениям на языках с GC.

                                    0
                                    А зачем языкам с GC резервировать большие куски адресного пространства?
                                      +1

                                      Чтобы вся память была одним большим непрерывным куском. Так с ней банально удобнее работать, не надо держать дополнительные таблицы.


                                      В Win32 API для этих целей у VirtualAllocEx есть флаг MEM_RESERVE, который не выделяет память, а резервирует кусок адресного пространства. Потом из этого куска можно постранично выделять через MEM_COMMIT, который в свою очередь может отрапортовать о нехватке памяти.


                                      В Linux адекватного механизма для резервирования памяти я лично не увидел (возможно, есть какая-то магия с флагами mmap), вместо этого "выделяется" кусок памяти с оверкоммитом, а потом приходит злой дядя OOM-killer.

                                        0
                                        Это хорошо, если приходит OOM-killer. Плохо, когда есть огромный iowait, а киллера так никто и не видел, спит. Надежда на то, что без свопа протекающий фаерфокс будет пристрелен, очень быстро растворились в хрусте винта.
                                          +2
                                          Для mmap будет аналог PROT_NONE. Есть такая проблема, если кому-то нужен большой кусок виртуальной памяти. Это скорее по-быстрому определить кто виноват, если виновник известен, то уже можно уже setrlimit(RLIMIT_RSS), cgroup или починить потребление виновника.
                                          0
                                          А зачем языкам с GC резервировать большие куски адресного пространства?
                                          Правильный ответ: потому что идиоты. Или, мягче: «всем пофиг».

                                          Зарезервируйте себе память с PROT_NONE и, о чудо, overcommit вам мешать не будет. Но это ж думать надо!
                                        +1
                                        А вы сами это пробовали? На моём ноутбуке с 6 ГБ памяти вызов echo 2 | sudo tee /proc/sys/vm/overcommit_memory мгновенно убивает иксы. После перезагрузки они подняться не могут, если внести соответствующее изменение в конфиг. echo 80 | sudo tee /proc/sys/vm/overcommit_ratio (или даже 100) позволяет запустить иксы, но сессия юзера не загружается, падает и выкидывает обратно на логин.
                                          0
                                          Пробовал, но на 16гб рамы. Если это неприемлемо, и нужно большое адресное пространство кому-то, то этот метод не подойдет конечно.
                                        –3
                                        Лучше всего, когда своп по размеру равен оперативной памяти.
                                          +8
                                          Особенно на сервере с 120 ГБ SSD и 64 ГБ RAM, ага.
                                            0
                                            Если я не ошибаюсь, это поверье ходит где-то со времен Windows95. Можете привести какие-то аргументы, почему это «лучше всего»?
                                              0
                                              А разве тогда в моде не было от 1,5 до 3?
                                                0
                                                Хрен редьки не слаще. Но это еще ничего. Мне доказывали что swap обязательно нужен, потому что ОС некуда будет складывать дамп ядра. (С учетом того что отлаживать его никто не собирается)
                                                0
                                                Если я не ошибаюсь, это поверье ходит где-то со времен Windows95.

                                                Раньше.
                                                Я это видел на под-КОМКОНовском ХП в 1990г.
                                                Там было 1.3Г памяти и 2х1.3Г харда. Один хард был чисто для свопа во время работы и для аварийного дампа, если придется.
                                                Так мне тогда, по крайней мере, объясняли.
                                                Примерно тогда же я увидел Вин2.0 и совсем не мог понять, как оно может сделать мою жизню лучше…

                                                0
                                                Почему?
                                                  0
                                                  А чем именно лучше? Я всегда думал, что это некое ориентировочное значение, для тех ситуаций, когда заморачиваться с размером и тонкой настройкой нет желания или не хватает навыков.
                                                  +2

                                                  Когда-то описывал полезную в этих случаях комбинацию Alt-SysRq-F — принудительно запустить OOM-killer один раз. По умолчанию она (и многие другие сочетания с SysRq) запрещены по соображениях безопасности (по каким именно — нужно читать где-нибудь в первоисточнике), а вообще есть даже сочетание для того, чтобы уронить ядро в kernel panic. :) Это не в качестве замены свопу, а в дополнение (при наличии свопа иногда весьма полезное).

                                                    +1
                                                    Комбинации alt-sysrq знаю, но вот alt-sysrq-f каким-то образом пропустил. Век живи, век учись. Спасибо!
                                                      0

                                                      На всякий случай, вот документация. Там много всяких интересных штук, а вот про влияние на безопасность (локальный пользователь прибил lock screen и т.д.) нужно читать где-нибудь в другом месте. Кстати, при работе по ssh до magic sysrq key можно достучаться через /proc/sysrq-trigger, если права позволяют.

                                                    0

                                                    У меня точно такой же опыт, только если IDEA заменить на SublimeText, а Включил на Выключил. Т.е. со включенным свопом ни разу не дождался момента пока запустится OOM killer, и часто не успевал закрыть вкладок или убить какой-нибудь процесс до того, как всё повиснет намертво. Сейчас выбрал размер свопа порядка 256МБ с низким vm.swappiness — если и выжрет кто-то всю память, то как кончится своп его прибъют.
                                                    Так что по прочтении статьи, из разнобоя мнений в сети, и нашего с вами примера могу кратко и ёмко рассказать как живёт Линукс без свопа / со свопом — "Анонимус его разъеберёт"!

                                                      0
                                                      Так что по прочтении статьи, из разнобоя мнений в сети, и нашего с вами примера могу кратко и ёмко рассказать как живёт Линукс без свопа / со свопом — «Анонимус его разъеберёт»!
                                                      На самом деле всё просто: если свопа нет, то Linux живёт плохо. Но если своп есть и он кончается — тогда всё, просто караул, на проблемы выкинутого из-за нехватки памяти кода накладывается ещё и то, что часть данных ушла в своп, если система попала в такое состояние, то её можно хоть сразу выключать…
                                                        0

                                                        Если бы было всё просто, не было бы таких дискуссий на тему свопа в сети. В моём случае, когда свопа была ещё туева гора (8GB RAM + 8GB swap на HDD), но своп заполнялся где-то на 512MB-1GB, система начинала тормозить и в течение минуты висла совсем. На других системах включая сервера всю память мог сожрать какой-нибудь старый grep или sed, если ему случайно попадался большой файлик с монострокой, и хорошо, если ssh отваливался не сразу и успевали разобраться в чём дело и прибить его.

                                                          0
                                                          Тестил как-то спецсофтину для работы со спутниковыми снимками, там разрешения на терапиксели идут.
                                                          Так вот, при открытии снимка система висла минуты на 3 — все лишнее скидывалось в своп.
                                                          Попробовал запустить zramswap как промежуточный буфер между диском и памятью — все стало значительно лучше, тот же снимок открывался за секунды вместо минут.
                                                          Т.е. каким-то чудом простейший алгоритм сжатия спасает. Может пустые страницы вытесняются — хз.

                                                          Также в конфигах ядра встречал опцию сжатого дискового свопа. Тоже полезная штука — ценой ресурса цпу значительно ускоряет дисковый ввод-вывод при обращениях к свопу. Цимес в том, что когда система висит из-за этого ввода-вывода, цпу так и так простаивает, и выгодно пустить его на ускорение диска.
                                                          Но для ее включения нужно компилировать ядро, что очень неудобно на бинарных линуксах, которые везде и стоят.
                                                            0

                                                            Если имеется ввиду zswap (или его альтернатива zram, обычно используется когда нет возможности использовать дисковый своп), то большинство дистрибутивов позволяют включать его не просто без пересборки ядра, но и просто на лету. Например в доках Archlinux есть статья.
                                                            Или пример из жизни Ubuntu, строка из /etc/default/grub: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1 zswap.max_pool_percent=33 zswap.compressor=lz4"


                                                            Или что-то другое имеется ввиду?

                                                              +1
                                                              zram — сжатый диск в оперативке
                                                              zramswap — swap на таком диске
                                                              zswap — сжатый динамический кэш между оперативкой и диском
                                                              А при конфигурации ядра перед компиляцией встречался еще один параметр.
                                                              Насколько я понял, там смысл был в том, чтобы сжимать все страницы перед выгрузкой на диск, и на диске держать их в сжатом виде, просто ради ускорения ввода-вывода: например диск работает на скорости 30мб/с, а если складывать туда сжатые данные, с коэффициентом сжатия например 2, то при тех же 30мб/с физических, скорость выгрузки памяти выйдет уже 60мб/с, профит.
                                                              Если zswap не распаковывает страницы перед сбросом на диск, и на диске хранит в сжатом виде — получаем по сути то же самое. К тому же zswap еще и пропускает странички с большой энтропией, дабы не тратить ресурсы на явно несжимаемые данные.
                                                      0
                                                      У меня это и без свопа работает. Виновник хруста винта не кто-то, а именно Хром. Что он делает в данной ситуации, для меня до сих пор загадка. Вам еще повезло — успеваете переключиться в другую консоль, у меня мертвый фриз происходит через секунду-полторы после лагов мышки.
                                                        +1
                                                        Оомкиллер отдыхает, видимо ему самому не хватает памяти для запуска.
                                                        Ему не нужно время для запуска, он в ядре. Просто с его точки зрения — всё в порядке! Память-то есть, просто для кода её мало осталось… вот и гоняются странички туда-сюда.

                                                        Простоять так может долго, я больше получаса не ждал, еще не разу не отвисла.
                                                        У меня SSD. Обычно через 1.5-2 часа отвисает. Вернее как «отвисает»? Столько времени занимает переключение на текстовую консоль, а там — уже можно найти какое-нибудь приложение и убить его… но лучше включить свап.
                                                          0
                                                          Забавно, сам с такой проблемой 2 года провозился.
                                                            0
                                                            «Простоять так может долго, я больше получаса не ждал, еще не разу не отвисла.»
                                                            Ловил много раз, отпускало за 15 минут — 1.5 часа (не сохранено было много), проще действительно перезапустить.

                                                            «Так что могу кратко и емко рассказать, как живет линукс без свопа — «хреново»!»
                                                            Но у меня своп включен, сейчас там около 60 гб. Подвисания никуда не деваются, но когда добавил ещё 2 флэшки по 32 гига и сделал своп на них, стало гораздо меньше фризов. Смотрю ещё в сторону bcache. Жаль, что в лине нет штатно аналога ReadyBoost, он в винде реально помогает от лагов.
                                                              0
                                                              swap на intel octane вполне заменяет ready-boost. Но дорого.
                                                                0
                                                                пока была поддержка в ядре — использовал EnhanceIO. Сейчас, на рабочей станции, использую zfs с кешем на ssd (samsung 850 pro)
                                                                rpool ONLINE
                                                                mirror-0 ONLINE
                                                                ata-ST2000NM0011_Z1P01D61 ONLINE
                                                                ata-HGST_HUS724020ALA640_PN2134P6K564KX ONLINE
                                                                cache
                                                                zfscache ONLINE
                                                                для свопа сделал раздел на том же ssd (хотя это и неправильно)
                                                                еще установил zswap
                                                                тупки могут начинаться (при сбросе буферов), но фризов на минуты/часы ниразу не ловил
                                                                всего памяти 16Гб, DE — kde ()plasma-desktop: Установлен: 4:5.8.8-0ubuntu1~ubuntu16.04~ppa1)
                                                                постоянно открыт ФФ с туевойхучей вкладок, 2-е виртуалки (VirtualBox) по 2Гб на каждую, открываю IDEA (проекты небольшие, классов по 20), QupZilla-2.2.5.AppImage
                                                                под zfs —
                                                                cat /sys/module/zfs/parameters/zfs_arc_max
                                                                2147483648

                                                                zil на ssd не делал (т.к. он один)
                                                                0
                                                                >Жаль, что в лине нет штатно аналога ReadyBoost

                                                                Как это нет? Есть LVM cache, есть bcache. Кладёте кэш на ssd и вперёд.
                                                                0
                                                                Мда, странно. Я наоборот отключал своп — потому что когда забивается и своп и память система не раздупляется вообще. А OOM-killer на ноуте с SSD приходил обычно за минуту-другую.
                                                                Скорее всего низкая скорость случайного чтения/записи у вас, потому так долго тупит, пытаясь сбрасывать и считывать обратно кеш и пр.
                                                                +1
                                                                А что про zswap можно сказать?
                                                                  +1
                                                                  А zswap ортогонален этой статье.
                                                                  Грубо говоря, вместо возросшего io вы будете платить возросшей нагрузкой на процессор. В каких-то случаях это имеет смысл. В каких-то — не имеет.
                                                                  +2
                                                                  Ещё не забываем о том, что swap неплохо бы шифровать, а это иногда усложняет жизнь.
                                                                    +2
                                                                    А можете рассказать, как сделать OOM Killer более агрессивным? Например, в ситуации, когда приложение открыло/создало множество мелких файлов и держит их в памяти, при внезапной нехватке памяти ядро пытается высвободить эти файловые страницы, что вешает систему намертво со 100%-м дисковым I/O на несколько (десятков) минут. А ведь зачастую гораздо проще просто грохнуть само приложение с дальнешим его перезапуском.
                                                                      0

                                                                      Если у вас конкретный демон с таким поведением и systemd — посмотрите на опцию OOMScoreAdjust.

                                                                      0
                                                                      Выставляю на всех нагруженный серверах (web/sql) vm.swappiness = 20. Эмпирически пришел к тому, что это лучший компромисс, когда всё что нужно максимально в памяти, а в свап идёт только что-то, к чему обращение раз в пол года, условно говоря.
                                                                        +1
                                                                        Еще свап помогает продлить агонию в случае утечек памяти.
                                                                          0
                                                                          А нельзя выделить каждому приложению лимит памяти? Если превысил, то автоматический kill -9. А то получается как на Windows 3.1 — одно кривое приложение способно уложить всю систему.
                                                                          Или, как вариант, если свопимся больше секунды — то kill -9 самого жирного или быстрорастущего.
                                                                            0
                                                                            Посмотрите на cgroups. Но там, как всегда, куча нюансов, связанных с особенностями самого учета памяти в Linux и опоре некоторых приложений на файловый кэш (Elasticsearch, PostgreSQL).
                                                                              0
                                                                              Нельзя. есть такой механизм — overcommit, когда ОС обещает программе больше памяти, чем реально есть в расчёте на то, что программа эту память всю никогда не задействует. Программы подсели на эту иглу и просто просят тонны памяти, а при порезанном overcommit или выставленном ulimit просто не запускаются.
                                                                              0
                                                                              Судя по некоторым словам в интернете, смена физического положения страницы в памяти может происходить только через swap. Своими глазами видел хост с половиной памяти (из 64 Гбайт) под файловым кэшем и периодически приходящим сначала kswapd, а потом и OOMkiller-ом с постоянными жалобами на невозможность найти страницу order=2. «Фрагментация», — подумал Штирлиц и добавил от щедрот 16 Гбайт swap-а. OOM перестал.
                                                                                0
                                                                                Физическая память не может быть фрагментированной, потому что она выделяется одинаковыми блоками (страницами). Фрагментация бывает только при выделении неравными блоками.
                                                                                  +1
                                                                                  Не всегда. Ядру иногда бывают нужны именно физически последовательные блоки страниц, особенно в случае мультимедийных драйверов.

                                                                                  Так, например, стек ядра каждого потока — это от 8k, то есть две последовательные страницы памяти, на большей части архитектур.
                                                                                    0
                                                                                    В линуксе существует целый Contiguous Memory Allocator, выделяющий непрерывную физическую память большими кусками. Например, один кадровый буфер FullHD занимает минимум 8 мегабайт. А их надо минимум два, а лучше — три. И далеко не всякая аппаратура имеет DMA с поддержкой scatter-gather.
                                                                                    Плюс, большинство функций аллокации в ядре выделяют странички идущие непрерывно. Кроме vmalloc(), которым не советуют пользоваться, потому что он довольно дорогой.
                                                                                      0
                                                                                      В жёстких дисках место тоже одинаковыми блоками выделяется, а поди ж ты. www.kernel.org/doc/gorman/html/understand/understand009.html.
                                                                                    +1
                                                                                    За отключение свопа надо линейкой по рукам. Что там люди делают на своих личных машинах (где всякие Хромы и прочее непотребство крутится) это одно, а когда все облачные провайдеры предоставляют образы машин без свопа и в 99% случаев народ так с ними и работает это совершенно другая история.

                                                                                    Мой пример:

                                                                                    У одного из наших клиентов есть «очень серьезное приложение» (TM) написаное на RoR какими-то подрядчиками. Подрядчики эти уже больше года отказываются починить memory leak который случается стабильно раз в два дня и на большой скорости выжирает всю доступную память примерно за 5 минут, после чего ООМ убивал приложение.

                                                                                    До того как они к нам пришли за помощью оно (приложение) у них падало раза 3-4 на неделе на каждой из машин (10 серверов после HAproxy). Им критически важно чтобы для всех пользователей был 100% uptime (даже если за счет задержек в ответах). Времени среагировать просто нет (за 5 минут мы только первые сигналы увидим о том что память заканчивается).

                                                                                    Как временное решение — добавили своп 20ГБ на каждой из машин, vm.swappiness = 15.

                                                                                    Теперь у нас есть примерно 1 час чтобы среагировать на заканчивающуюся память. И больше времени для более стабильного решения.

                                                                                    В конце мы просто поставили unicorn-worker-killer gem и сконфигурировали его чтобы убивал worker процессы когда они отъедают больше чем X% памяти.

                                                                                    Так что медленный своп это в некоторых ситуациях скорее достоинство чем недостаток.
                                                                                      +2
                                                                                      А супервизор настроить? В systemd проставить restart=always? *много других вариантов как перезапускать убогое приложение убитое по oom.

                                                                                      В данном примере своп — весьма тухлый костыль и нет никакого смысла ругать провайдеров за расчет на нормальные приложения
                                                                                        0
                                                                                        Им критически важно чтобы для всех пользователей был 100% uptime (даже если за счет задержек в ответах)

                                                                                        И как systemd restart=always или supervisord тут поможет? Те сессии, которые были открыты когда OOM случился отвалятся с ошибкой. Правильный подход будет — убрать ноду из LB, дождаться когда на ноде 0 сессий, прибить приложение и перезапустить. Своп помог оттянуть время ООМ чтобы все это можно было провернуть. Да — не оптимально и вручную, но это именно то что нужно клиенту и дало нам достаточно времени чтобы найти постоянное решение (тот самый unicorn-worker-killer).
                                                                                          0
                                                                                          Ну это не решение проблемы, а все-таки костыль, пусть и более утонченный.
                                                                                          Учитывая отсутствие общего хранилища сессий и общей неготовности приложения к многонодовому исполнению я-бы сказал что в вашем частном случае своп как и воркер-киллер сделал медвежью услугу подрядчику который «расслабил булки» и продолжает получать деньги за предоставление некачественной услуги

                                                                                          FYI: Linux умеет в файловый swap, так-что мучиться с разметкой диска если «ну совсем нужен» не обязательно
                                                                                            0
                                                                                            Учитывая отсутствие общего хранилища сессий и общей неготовности приложения к многонодовому исполнению


                                                                                            1. Я где-то написал про HTTP сессии? В этом контексте это TCP сессии. Если приложение убит ООМ что с ними случится? И какие такие «общие хранилища» для TCP сессий вы предлагаете?
                                                                                            2. Как подрядчик будет «продолжать получать деньги за предоставление некачественной услуги» если подрядчик проект сделал и испарился. Работаем мы с клиентом, подрядчика этого мы в глаза не видели.
                                                                                            3. JFYI: Я вроде нигде и не писал про «мучиться с разметкой диска». В том конкретном случае мы просто # dd if=/dev/null of=/swapfile bs=1M count=$(1024*20). Быстро и просто.
                                                                                              0
                                                                                              1. TCP на RoR? Не буду спрашивать в чем принципиальная разница между сессиями кастомного tcp и http
                                                                                              2. Ну тут уж опять-же все утыкается в недобросовестного подрядчика
                                                                                              3. За что же облачного провайдера линейкой бить, если создание свопа никто не ограничил и проблемы это не вызвало? С другой стороны, отсутствие свопа позволило сразу обратить внимание проблему вместо «неуловимого джо» в виде непредсказуемых тормозов у клиентов
                                                                                                0
                                                                                                За что же облачного провайдера линейкой бить, если создание свопа никто не ограничил и проблемы это не вызвало

                                                                                                За то что учат всех что «no swap, no problems», хотя это далеко не так. Мой пример как раз и написан для того чтобы показать что своп это такой же инструмент, которым нужно знать как и когда пользоваться. Может они (облачные провайдеры) и хотят как лучше, но получается «как всегда». Точно также как они (облачные провайдеры) по-умолчанию отключают SElinux на всех своих образах, ну а как-же, половина интернетов отключают (потому что не знают как им пользоваться), вот мы им и поможем, заранее для них отключим.
                                                                                        +4
                                                                                        Подрядчики эти уже больше года отказываются починить memory leak
                                                                                        Как временное решение — добавили своп 20ГБ

                                                                                        Как там кофемашины говорят, "Опорожните поддон для капель"...

                                                                                        +1
                                                                                        Спор о swap мне напоминает спор слепых о том как выглядит слон. По-моему говорить о swap вне контекста задач, установленного ПО и аппаратной конфигурации сервера нет смысла. В одном случае swap необходим, в другом случае опасен.
                                                                                          0
                                                                                          Ещё стоит задуматься о типе носителя для swap'а

                                                                                          Сейчас я раскрою самый секретный лайфхак:

                                                                                          Расположите swap в zram!

                                                                                          Wait… oh shi~~~
                                                                                            +2
                                                                                            <irony>
                                                                                            — Слушай, Гена, давай я понесу чемоданы, а ты понесёшь меня…
                                                                                            — Это ты здорово придумал, Чебурашка!
                                                                                            </irony>
                                                                                            (с) habrahabr.ru/post/172137/#comment_5984189
                                                                                            +1
                                                                                            Судя по комментариям — люди хотят что бы все было быстро, и их устраивает что все при этом может время от времени падать.
                                                                                            А я как-то видел как в очень-очень большой компании скормили серверу очень много данных связанных с биллингом. И 300 гиг памяти оперативной просто сожрало. Потом начало жрать своп, и это кое-как успели отловить уже. И успев добавить на лету в своп (изначально 60 гиг, докидывали по 50, в итоге за 200 стало временно) смогли без падения докрутить то, что по новой было бы часов 10+.
                                                                                            В общем мне все это напомнило старый ролик «Mongo DB Is Web Scale».
                                                                                              0
                                                                                              а может кто-нибудь поделиться опытом?
                                                                                              у меня есть старая машина без возможности апгрейда и малым объёмом памяти (2GB).
                                                                                              чтобы хоть как-то жить, я включаю там z-ram (в 2 потока).
                                                                                              нужно ли что-то менять в настройках vm.swappiness (или ещё каких-то), чтобы система активнее использовала сжатую «память»?
                                                                                                0
                                                                                                в AWS все современные типы инстансов не имеет даже local storage чтобы swap на нём создать
                                                                                                  0
                                                                                                  Всегда создаю пару гигов свапа на серваках, так на всякий случай, а на ноутбуке «ВсегдаСоМной» держу чуть больше чем кол-во рамы ибо если батарейка садится а работа не закончена и нет рядом розетки то гибернация наше всё… печалит только что на ноуте 16 грам и это означает что на диске 16 гиг никогда не используемой памяти…
                                                                                                    +1
                                                                                                    Зачем для свопа выделяют отдельный дисковый раздел? Почему отказались от свопа в файл? Ведь изменить размер файла при необходимости очень просто, а переразбить диск — очень затруднительно.
                                                                                                      0

                                                                                                      Например, слышал, что раньше были особенности у как минимум одной из реализаций гибернации: записал в своп состояние памяти, выключился. Захотел включиться и считать память обратно — нужно бы вначале подмонтировать раздел со своп-файлом, но вот незадача: была проблема сделать так, чтобы ядро ну совсем-совсем ничего не исправляло на dirty-разделе — ведь тогда у "восстановленного" ядра будет неконсистентное представление о том, что сейчас на диске. Впрочем, частично ситуация изменилась ещё в декабре 2006 года, судя по логу. А ещё мне очень нравится big fat warning в начале этого файла...

                                                                                                        0
                                                                                                        одной из реализаций гибернации


                                                                                                        Гибернация сравнительно новая вещь — ей лет 15-20.
                                                                                                        А swap и соответствующему разделу — как бы не в 2 раза больше, 25-30.
                                                                                                        Так что не поэтому.
                                                                                                          0
                                                                                                          По моему винда работала сначала со своп-файлом и в каком то году(кажется, в висте) она освоила своп-разделы. Помню, сильно удивился, когда она во время установки стала требовать своп-раздел. Хотя в последних версиях, говорят, опять вернулись к своп-файлам, но если есть своп-раздел, то винда отдает предпочтение ему…
                                                                                                            +2
                                                                                                            своп-разделы

                                                                                                            Впервые о таком для винды слышу.
                                                                                                            Помню, сильно удивился, когда она во время установки стала требовать своп-раздел.

                                                                                                            ВЫ не путаете с разделом для загрузчика?
                                                                                                          0
                                                                                                          Я не раз читал подобное историческое объяснение, что своп-раздел был, потому что ОС чего то не умела: не умела выходить из гибернации, не умела выделять монолитный кусок диска, чтобы эффективней с ним работать… Всегда с ремаркой, что сейчас ОС это умеет. Скажем линукс с 3-ей версии без проблем работает со своп-файлом: и выходит из гибернации, и производительность та же, судя по бенчмаркам которые я видел(хотя они были посредственные)… При этом когда ставишь современные версии линукса, они просят создавать неудобный своп-раздел… Создается впечатление, что это какое то ритуальное поведение. Я с десяток админов озадалич этим вопросом — никто не знает. Может ли быть такое, что огромная куча компов(сотни миллионов?) по всему миру работают с неудобным своп-разделом только из за этого?
                                                                                                            0
                                                                                                            Примерно так. Однако тут забавная ситуация. Когда-то давно в своп-разделе был смысл. 10 лет назад — он пропал. А сегодня… снова появился.

                                                                                                            Фишка в чём: своп-раздел банально быстрее. Там нет фрагментации. Нет лишних seek'ов. На HDD — это очень заметно. На старых SSD — нет. А если учесть, что старые SSD были гораздо меньше современных… То да — вы были правы какое-то время.

                                                                                                            Современные SSD же, однако, настолько велики и быстры (та же история, что и с DRAM: скорость случайного доступа почти не меняется, зато пропускная способность растёт), что это снова актуально…
                                                                                                              0
                                                                                                              я читал, что ОС уже давно научились создавать своп-файл одним куском, так что никакой фрагментации и лишних seek'ов. Собственно приоритет на своп-раздеры в линуксе изначально был как раз потому что он этого не умел. Но с как минимум 3-ей версии ядра умеет из коробки.
                                                                                                                +1
                                                                                                                Не знаю чего там кто «умеет из коробки», но на больших файлах на ext2/ext3/ext4 фрагментация — неизбежность. Просто потому что формат файловой системы предполгает жёсткое разделение областей под inode и под данные.
                                                                                                        0
                                                                                                        Отключение swap не спасает от проблемы дискового ввода/вывода при конкуренции за память — дисковый I/O просто перемещается с анонимных страниц на файловые. Это не только может быть менее эффективным, поскольку остаётся меньший пул страниц, доступных для высвобождения, но и само по себе может способствовать появлению этой высокой конкуренции.

                                                                                                        Скажите это Chrome, который стучится к swap, пытаясь записать туда открытые вкладки, которые не используются!

                                                                                                          0
                                                                                                          Коллеги, все обсуждают своп на локальной машине, а посоветуйте по вашему опыту, какие настройки лучше использовать для VPS.

                                                                                                          Особенно интересует вариант виртуального сервера с небольшим количеством памяти. Если говорить ещё точнее — 384 МБ.

                                                                                                          OpenVZ, система — CentOS 7, используется достаточно шустрый SSD — 200-300 МБ/с на популярном тесте с помощью dd. По умолчанию swappiness = 10.
                                                                                                            0
                                                                                                            Не для VPS, но для компа с малой памятью — пробовал на RPi. Если сильная нехватка == требуется памяти > имеющейся RAM, я бы считал так:
                                                                                                            1. Обязательно zram на количество ядер, размер зависит от сжимаемости данных. 128 основной RAM (~1/3..1/4) оставить, 256*1.5=384 на все zram-ы, по количеству ядер, 1x384, 2x192 и т.п.
                                                                                                            2. vm.swappiness ставил 10, дичайшие фризы ловил, OOM не вызывался за разумное время от 10 минут до 2.5 часов в разных случаях. В статье говорится, что надо бы увеличивать. Буду пробовать 90.
                                                                                                            0
                                                                                                            Я достаточно давно обдумываю идею: устанавливать в компьютеры не только обычную RAM, но и специальную дешёвую SlowRAM. Пока что обдумываю, как бы это можно было реализовать; в первом приближении:
                                                                                                            1) Не гнаться за уменьшением размера транзистора. Но и слишком большим его делать нельзя — потребуется много кремния.
                                                                                                            2) Имеет смысл ставить в каждый чип по несколько кристаллов. Можно будет даже использовать чипы, в которых часть кристаллов дефектные.
                                                                                                            3) Можно подумать об отказе от FastPage. Но тут мне пока неясно.
                                                                                                            4) Данная память может вставляться в мат.плату или в пату расширения.

                                                                                                            Так вот, такой памяти д.б. много — в несколько раз больше, чем обычной. Использовать её можно для:
                                                                                                            1) swap-area;
                                                                                                            2) кэш диска;
                                                                                                            3) RAM-FS для временных файлов.

                                                                                                            И вопрос о свопинге на диск (HDD или SSD) отпадает.
                                                                                                              +1
                                                                                                              Я достаточно давно обдумываю идею: устанавливать в компьютеры не только обычную RAM, но и специальную дешёвую SlowRAM


                                                                                                              Уже очень много лет это реализовано.
                                                                                                              В качестве «SlowRAM» можно было использовать даже USB-Flash
                                                                                                                0
                                                                                                                И вопрос о свопинге на диск (HDD или SSD) отпадает.

                                                                                                                И чем это будет лучше хорошего SSD? Хотя были и устройства с оперативной памятью в качестве дисков.
                                                                                                                Но как по мне, намного лучше просто прибавить оперативки. А если не возможно — что ж, теперь есть опыт и знание того, что нужно брать устройства с поддержкой больших объёмов памяти.
                                                                                                                  0
                                                                                                                  И чем это будет лучше хорошего SSD? Хотя были и устройства с оперативной памятью в качестве дисков.


                                                                                                                  Да ничем.
                                                                                                                  Не массовый продукт — дорого.
                                                                                                                  Массовым не станет — ибо и так хватает оперативки.

                                                                                                                  В ситуациях когда не хватает — есть уже Intel Optane и т.п. habrahabr.ru/company/selectel/blog/345306
                                                                                                                    0
                                                                                                                    Во-первых, даже если продукт не массовый — практически все компоненты вполне массовые: медленную память делаем на старых станках, продлевая их жизнь.

                                                                                                                    Во-вторых, многие вещи изначально были не массовыми и дорогими — а потом внедрились и стали повсеместными. Да собственно, каждый новый процессор и каждый новый вид памяти проходил через это.

                                                                                                                    В-третьих, Вы сами дали ссылку на то, что моё предложение реализовали. Значит, это всё-таки актуально.
                                                                                                                      0
                                                                                                                      Во-первых, даже если продукт не массовый — практически все компоненты вполне массовые: медленную память делаем на старых станках, продлевая их жизнь.
                                                                                                                      Так это не работает. Быстрые «новые» чипы — дешевле, чем старые «медленные».

                                                                                                                      Исключение — когда вам этих чипов нужно мало (набор масок для современных техпроцессов стоит под $100 миллионов — и там неважно: сколько вы чипов хотите «испечь» — один или один миллион), но если у вас этой SlowRAM будет мало… то кому она, нафиг, будет нужна?

                                                                                                                      В-третьих, Вы сами дали ссылку на то, что моё предложение реализовали. Значит, это всё-таки актуально.
                                                                                                                      Актуально, да — но не SlowRAM, а скорее FastHDD… и производится оно по самым новым техпроцессам какие только бывают в природе (хотя фишка там не в нанометрах, а в 3D-компоновке)…
                                                                                                                        0
                                                                                                                        Быстрые новые чипы сейчас — дешевле, чем старые медленные чипы тогда. Но если бы старые чипы не сняли с производства — сейчас он бы были ещё дешевле.

                                                                                                                        Кроме того, в наше время есть новые чипы — быстрые и медленные. Я предлагаю для оперативной работы использовать быстрые чипы, а для свопинга ставить медленные чипы.

                                                                                                                        Так, стоп. Там упоминаются слова «in-memory database» и «memcached» — это совершенно точно относится к памяти, которая теряет содержимое при выключении питания. Если использовать SSD — то там лучше применять более другие методы работы с СУБД.
                                                                                                                          +1
                                                                                                                          Быстрые новые чипы сейчас — дешевле, чем старые медленные чипы тогда. Но если бы старые чипы не сняли с производства — сейчас он бы были ещё дешевле.
                                                                                                                          Нет, не были бы. В том-то и дело, что стоимость производства чипов в пересчёте на квадратный миллиметр почти не падает со временем. Новые чипы дешевле потому, что они меньше, всё остальное не так важно. В качестве курьёзного примера: «старые» неработающие процессоры (до Pentium Pro включительно) сейчас продаются на eBay по цене, превышающей стоимость самых дешёвых новых просто потому, что столько стоит имеющееся в них золото.

                                                                                                                          Как вы с этим собираетесь бороться? Переналаживая техпроцесс? Так проще его просто обновить и получить экономию ещё и за счёт геометрических размеров…

                                                                                                                          Так, стоп. Там упоминаются слова «in-memory database» и «memcached» — это совершенно точно относится к памяти, которая теряет содержимое при выключении питания.
                                                                                                                          То, что память не будет стираться при выключении питания — чему-то мешает? Полвека назад компьютеры могли использовать память, не теряющую данных при отключении питания, в качестве основной, а сейчас — не могут? Почему?

                                                                                                                          Если использовать SSD — то там лучше применять более другие методы работы с СУБД.
                                                                                                                          Потому что «так принято»? SSD выглядят в системе как «жёсткий диск» не потому что так лучше и удобнее, а просто потому что установить систему на раздел «жёсткого диска» установщик Ubuntu умеет, а в память-не-пропадающую-при выключении — нет. Так-то второе удобнее и правильнее.

                                                                                                                          Об этом ещё несколько лет назад говорили — а теперь вот и до реализации дошли…
                                                                                                                            0
                                                                                                                            стоимость производства чипов в пересчёте на квадратный миллиметр почти не падает со временем
                                                                                                                            Скорость доступа к памяти определяется массой параметров, среди которых — расстояние от процессора до памяти. Отсюда следует необходимость делать всё компактно, что вместе с ростом частоты создаёт проблемы с подачей питания и отводом тепла.

                                                                                                                            Цена кристалла зависит от площади нелинейно — ибо чем больше размер кристалла, тем выше вероятность заполучить там критический дефект. Отсюда следует, что уменьшением размера кристалла можно получить снижение себестоимости — но из-за «размазанности» время доступа станет больше.

                                                                                                                            А главное снижение себестоимости — за счёт того, что не надо делать новый станок, а можно продлить жизнь старого.

                                                                                                                            То, что память не будет стираться при выключении питания — чему-то мешает?
                                                                                                                            Если память не стирается — то её содержимое не надо никуда переписывать, а эту память надо использовать как постоянный носитель. Просто организовать там файловую систему; или просто разложить там таблицы, некоторые СУБД так умеют.

                                                                                                                            Потому что «так принято»?
                                                                                                                            Вообще-то, «принято» — именно хранить данные на носителе, а не «in-memory database» и «memcached».

                                                                                                                            SSD выглядят в системе как «жёсткий диск» не потому что так лучше и удобнее, а просто потому что установить систему на раздел «жёсткого диска» установщик Ubuntu умеет, а в память-не-пропадающую-при выключении — нет.
                                                                                                                            Вы фееричны.

                                                                                                                            SSD выглядят в системе как «жёсткий диск» потому, что если он будет выглядеть иначе, то надо будет заменять последнюю букву «D».

                                                                                                                            SSD — это блочное устройство. Оно блочное — ради того, чтобы иметь удобную работу с контрольной суммой блока (по той же причине сети работают с пакетами данных).

                                                                                                                            Далее — операционные системы ставятся не на диск, а на файловую систему. Это две немного совсем разные вещи.
                                                                                                                            Я не знаю про Ubuntu. Но FreeBSD умеет работать с файловой системой в памяти. Правда, я не знаю, умеет ли работать с ней загрузчик системы — но переписать загрузчик не очень сложно. Т.е. вопрос — точно не в установщике.
                                                                                                                              0
                                                                                                                              Цена кристалла зависит от площади нелинейно — ибо чем больше размер кристалла, тем выше вероятность заполучить там критический дефект. Отсюда следует, что уменьшением размера кристалла можно получить снижение себестоимости — но из-за «размазанности» время доступа станет больше.
                                                                                                                              Это стёб такой? Почему падает цена памяти с уменьшением размеров транзистора ясно даже первокласснику: потому что этой памяти на 300мм (когда-то 200мм и так далее пластину влазит больше). Всё. Все остальные эффекты — вторичны.

                                                                                                                              Да, при переходе на более тонкий техпроцесс цена обработки одной пластины растёт — но при достаточно больших тиражах это несущественно. Иначе бы никто и не переходил на новые техпроцессы, это в первую очередь для экономии делается и уже во вторую — для всего остального.

                                                                                                                              Если память не стирается — то её содержимое не надо никуда переписывать, а эту память надо использовать как постоянный носитель. Просто организовать там файловую систему; или просто разложить там таблицы, некоторые СУБД так умеют.
                                                                                                                              Да — так часто и делают. Но это не потому, что так лучше. Это потому что так проще.

                                                                                                                              Сейчас, потихоньку, наконец, от этого начинают отказываться…

                                                                                                                              Я не знаю про Ubuntu. Но FreeBSD умеет работать с файловой системой в памяти. Правда, я не знаю, умеет ли работать с ней загрузчик системы — но переписать загрузчик не очень сложно. Т.е. вопрос — точно не в установщике.
                                                                                                                              Кто-то сказал, что вопрос в установщике? Чтоб компьютер мог запустить систему не с блочного устройства, а с чего-то ещё нужно много чего менять — EFI, загрузчик, ядро, и многое другое.

                                                                                                                              Самое главное — исчезает страховка. Сейчас, если у вас ядро (или злоумышленник через дыру в ядре) испортило всё на счете в памяти вы просто перезагружаете системы — и, вуаля, все структуры в памяти «рисуются» заново. А если у вас просто всё находится в энергонезависимой памяти и никакого «диска», с которого это всё загружено нет — то многие решения становятся резко сомнительными.

                                                                                                                              Вы фееричны.
                                                                                                                              Вас мне никогда не переплюнуть.

                                                                                                                              SSD выглядят в системе как «жёсткий диск» потому, что если он будет выглядеть иначе, то надо будет заменять последнюю букву «D».
                                                                                                                              Я правильно вас понял? SSD не может выглядеть в системе как оперативная памяти потому что в этом случае аббревиатура SSD станет «врать»? О боги, кого это когда останавливало!

                                                                                                                              Читаем: Intel® Memory Drive Technology transparently integrates the SSD into the memory subsystem and makes it appear like DRAM to the OS and applications.

                                                                                                                              По-моему всё — прозрачнее некуда. С точки зрения OS и приложений «оно» выглядит как DRAM, а не как блочное устройство. Что не мешает «ему» называться Intel® Memory Drive Technology…

                                                                                                                              Маркетологам, в общем, плевать на такие мелочки как блочные/неблочные устройства.
                                                                                                                                0
                                                                                                                                Почему падает цена памяти с уменьшением размеров транзистора ясно даже первокласснику
                                                                                                                                Осталось объяснить, почему размер транзистора снижается скачкообразно, а цена на память снижается плавно. И при появлении транзисторов нового размера цена падает не сразу — т.е. и корреляция во времени довольно слабая, что как бы намекает на существование иной причины снижения цены, которая действует параллельно.

                                                                                                                                Да, при переходе на более тонкий техпроцесс цена обработки одной пластины растёт — но при достаточно больших тиражах это несущественно. Иначе бы никто и не переходил на новые техпроцессы, это в первую очередь для экономии делается и уже во вторую — для всего остального.
                                                                                                                                Переход на новый тех.процесс делается по многим причинам, в т.ч. ради снижения энергопотребления (оно же — тепловыделение) и для увеличения скорости (без снижения размера транзистора это невозможно).

                                                                                                                                Да — так часто и делают. Но это не потому, что так лучше. Это потому что так проще.
                                                                                                                                Я не понял, что именно проще. Если упоминается «in-memory database» и «memcached» — это ни разу не проще, а именно намного сложнее.

                                                                                                                                Кто-то сказал, что вопрос в установщике?
                                                                                                                                (Facepalm!!!)
                                                                                                                                Вы и сказали: «установить систему на раздел «жёсткого диска» установщик Ubuntu умеет».

                                                                                                                                Чтоб компьютер мог запустить систему не с блочного устройства, а с чего-то ещё нужно много чего менять — EFI, загрузчик, ядро, и многое другое.
                                                                                                                                Загружать (точнее, запускать) систему не с блочного устройства мог ещё древний убогий BIOS самых древних версий: он опрашивал UMB-блоки (я надеюсь, Вы хорошо подготовились к дискуссии и знаете, что это за блоки) на предмет наличия там определённой программы; и если находил — то запускал. А эти программы уже делали что хотели — загружались со SCSI-исков (BIOS тут ни при чём); загружались по сети (ой — ну совершенно не блочное устройство); или вообще ничего не загружали, а запускали ROM-BASIC.

                                                                                                                                Самое главное — исчезает страховка. Сейчас, если у вас ядро (или злоумышленник через дыру в ядре) испортило всё на счете в памяти вы просто перезагружаете системы — и, вуаля, все структуры в памяти «рисуются» заново. А если у вас просто всё находится в энергонезависимой памяти и никакого «диска», с которого это всё загружено нет — то многие решения становятся резко сомнительными.
                                                                                                                                Вы всё-таки решили переплюнуть меня по фееричности.

                                                                                                                                Энергонезависимую память надо «запирать на ключ» — т.е. после того, как туда залили нужное содержимое, её навдо блокировать от записи. Желательно аппаратно — так, чтобы программно разблокировать было в принципе невозможно. Т.е. — перемычкой. Или ещё лучше — записывать в однократно записываемое ПЗУ. Или — записывать в ПЗУ, которое можно переписать только на специальном программаторе (например, в компьютере в слот для такой памяти просто не заведён контакт «разрешить запись», а в программаторе он есть; или напряжение для записи нужно такое, какой в компьютере на этот слот не подаётся).

                                                                                                                                Вы же предлагаете записывать программы на диск — при том, что там программы можно поменять. Наверно, про компьютерные вирусы Вы не слышали так же, как про ROM-BASIC.

                                                                                                                                SSD не может выглядеть в системе как оперативная памяти потому что в этом случае аббревиатура SSD станет «врать»? О боги, кого это когда останавливало!
                                                                                                                                Ну, выть осмеянным — никому не приятно. Да и экономически это невыгодно.

                                                                                                                                Читаем: Intel® Memory Drive Technology transparently integrates the SSD into the memory subsystem and makes it appear like DRAM to the OS and applications.
                                                                                                                                Ну да — надстроили ещё один слой абстракции. Типичное быдлованское индусское решение, типичное для Intel.

                                                                                                                                С точки зрения OS и приложений «оно» выглядит как DRAM, а не как блочное устройство.
                                                                                                                                И это сразу снижает производительность, т.к. TRIM не используется. Впрлне типично для решений на базе уровней абстракции.
                                                                                                                                  +1
                                                                                                                                  Осталось объяснить, почему размер транзистора снижается скачкообразно, а цена на память снижается плавно.
                                                                                                                                  Это кто ж такой богатый, что может десятки миллирдов долларов выложить, чтобы сразу все линии обновить?

                                                                                                                                  Это в лабораториях новые транзисторы появляются «скачкообразно». Средний размер транзисторов в больших компаниях уменьшается очень плавно — за счёт одновременного сосуществования линий двух, а то и трёх поколений.

                                                                                                                                  А вот вот менее популярные чипы (скажем процессоры) — там и цена скачком падает при переходе на более мелкий техпроцесс.

                                                                                                                                  Переход на новый тех.процесс делается по многим причинам, в т.ч. ради снижения энергопотребления (оно же — тепловыделение) и для увеличения скорости (без снижения размера транзистора это невозможно).
                                                                                                                                  Не в случае с оперативкой. Много вы видели планок памяти с активным охлаждением? Да, такие бывают тоже — но никак не в массовых системах…

                                                                                                                                  Кто-то сказал, что вопрос в установщике?

                                                                                                                                  (Facepalm!!!)
                                                                                                                                  Вы и сказали: «установить систему на раздел «жёсткого диска» установщик Ubuntu умеет».
                                                                                                                                  Это уже за гранью добра и зла. А если я вас скажу, что круизный лайнер не может в Москве оказаться, потому что летать не умеет — вы скажите, что нужно к нему крылья приделать?

                                                                                                                                  Да, установщик Ubuntu в память-не-пропадающую-при выключении устанавливать систему не умеет. А Queen Elizabeth не умеет летать. И то и другое — правда.

                                                                                                                                  Но как бессмысленно приделывать крылья к Queen Elizabeth, так и не нужно менять установщик Ubuntu. Для Queen Elizabeth можно, в теории, прорыть канал (токо дорого очень), а для установщика — нужно серьёзно переделать весь компьютер.

                                                                                                                                  Загружать (точнее, запускать) систему не с блочного устройства мог ещё древний убогий BIOS самых древних версий: он опрашивал UMB-блоки (я надеюсь, Вы хорошо подготовились к дискуссии и знаете, что это за блоки) на предмет наличия там определённой программы; и если находил — то запускал. А эти программы уже делали что хотели — загружались со SCSI-исков (BIOS тут ни при чём); загружались по сети (ой — ну совершенно не блочное устройство); или вообще ничего не загружали, а запускали ROM-BASIC.
                                                                                                                                  Вы бы ещё про PDP-6 какую-нибудь вспомнили. Да, были времена, когда компьютерам блочное устройство не требовалость. А вот для EFI — так уже не умеет.

                                                                                                                                  Вы бы вместо того, чтобы рассуждать про технологии четвертьвековой давности, о которых все уже забыли давно, посмотрели на устройство современного компьюетра, что ли.

                                                                                                                                  Вы же предлагаете записывать программы на диск — при том, что там программы можно поменять.
                                                                                                                                  Это не я предлагают — это жизнь предлагает. То, что вы помните про ROM-Basic — это замечательно, но совершенно не помогает понять как можно использовать NVMM-память.

                                                                                                                                  Тут речь идёт не о ROM-Basic'е, извиняюсь, а о возврате старых добрых времён, когда никакие блочные устройства не были нужны.

                                                                                                                                  И это сразу снижает производительность, т.к. TRIM не используется. Впрлне типично для решений на базе уровней абстракции.
                                                                                                                                  Для ReRAM никакой TRIM не нужен. А NVDIMM-N позволяет обкатать софт уже сейчас.
                                                                                                                                    0
                                                                                                                                    А вот вот менее популярные чипы (скажем процессоры) — там и цена скачком падает при переходе на более мелкий техпроцесс.
                                                                                                                                    Сколько я себя помню — при выходе нового процессора он (новый процессор) стоил дороже старого. И при переходе на новый тех.процесс — тоже.

                                                                                                                                    Не в случае с оперативкой. Много вы видели планок памяти с активным охлаждением? Да, такие бывают тоже — но никак не в массовых системах…
                                                                                                                                    Тогда непонятно, что мешает ставить по несколько кристаллов в один чип.

                                                                                                                                    А если я вас скажу, что круизный лайнер не может в Москве оказаться, потому что летать не умеет — вы скажите, что нужно к нему крылья приделать?
                                                                                                                                    А зачем? С такой осадкой он может и по реке приплыть.

                                                                                                                                    Да, установщик Ubuntu в память-не-пропадающую-при выключении устанавливать систему не умеет.
                                                                                                                                    А установить систему иным способом — религия запрещает? Например, установить на HDD и скопировать на любой другой носитель — с аналогичной файловой системой или любой другой.

                                                                                                                                    Но как бессмысленно приделывать крылья к Queen Elizabeth, так и не нужно менять установщик Ubuntu.
                                                                                                                                    Я не знаю, как там у Ubuntu — а у FreeBSD установщик меняли. Значит — менять надо.

                                                                                                                                    а для установщика — нужно серьёзно переделать весь компьютер.
                                                                                                                                    (Facepalm!!!)
                                                                                                                                    Написать нового установщик, загрузчик, ядро, etc — может любой желающий (при наличии квалификации). Переделывать весь компьютер (или даже его часть) совершенно необязательно.

                                                                                                                                    А вот для EFI — так уже не умеет.
                                                                                                                                    Не вижу по ссылке ни слова про «не умеет». По сети грузиться — тоже не умеет?

                                                                                                                                    Вы бы вместо того, чтобы рассуждать про технологии четвертьвековой давности, о которых все уже забыли давно, посмотрели на устройство современного компьютера, что ли.
                                                                                                                                    С тоской и грустью я смотрю на тот маразм, который делают криворукие дебилы.

                                                                                                                                    Это не я предлагают — это жизнь предлагает.
                                                                                                                                    Нет, это предлагают дебильные манагеры и криворукие разработчики.

                                                                                                                                    То, что вы помните про ROM-Basic — это замечательно, но совершенно не помогает понять как можно использовать NVMM-память.
                                                                                                                                    Учитывая популярность многоуровневой системы абстракций — использовать можно как угодно, в т.ч. самыми дебильными способами.

                                                                                                                                    Тут речь идёт не о ROM-Basic'е, извиняюсь, а о возврате старых добрых времён, когда никакие блочные устройства не были нужны.
                                                                                                                                    В отличие от магнитных сердечников — Flash-память как раз тяготеет к работе в блочном режиме.
                                                                                                                                    Ну или её можно использовать как память прямого доступа — но тогда только для чтения.

                                                                                                                                    Наверно, Вы не догадывеаетесь, почему так. Поэтому заранее скажу: из-за изнашиваемости надо применять CRC и ECC плюс мапирование блоков.

                                                                                                                                    Для ReRAM никакой TRIM не нужен.
                                                                                                                                    Вот когда ReRAM будет готова к использованию — тогда и поговорим.
                                                                                                                                    Причём, если получится — это как раз и будет реализацией моей идеи о дешёвой медленной памяти.

                                                                                                                                    А NVDIMM-N позволяет обкатать софт уже сейчас.
                                                                                                                                    Какой именно софт? Технологии «in-memory database» и «memcached» — давно обкатаны!
                                                                                                                                      0
                                                                                                                                      Сколько я себя помню — при выходе нового процессора он (новый процессор) стоил дороже старого. И при переходе на новый тех.процесс — тоже.
                                                                                                                                      Дороже старого с той же производительностью и тем же количеством транзисторов? Покажите мне, я хочу это увидеть.

                                                                                                                                      Тогда непонятно, что мешает ставить по несколько кристаллов в один чип.
                                                                                                                                      Цена. Дороже будет. Дешевле новый маленький чип, чем два старых больших. Там, где памяти нужно много (сервера) — там ставят.

                                                                                                                                      А установить систему иным способом — религия запрещает? Например, установить на HDD и скопировать на любой другой носитель — с аналогичной файловой системой или любой другой.
                                                                                                                                      Нет. Но переход в другую концессию ограничение, заложенные в EFI, не исправит.

                                                                                                                                      (Facepalm!!!)
                                                                                                                                      Написать нового установщик, загрузчик, ядро, etc — может любой желающий (при наличии квалификации).
                                                                                                                                      Могут. И пишут. Однако далеко не ко всем компонентам системы есть доступ.

                                                                                                                                      Переделывать весь компьютер (или даже его часть) совершенно необязательно.
                                                                                                                                      Серьёзно? Что заставит компонент, над которым вы не властны делать то, для чего он не предназначен?

                                                                                                                                      По сети грузиться — тоже не умеет?
                                                                                                                                      По сети — умеет, потому что под это — его затачивали. Под загрузку из памяти — не затачивали.

                                                                                                                                      А NVDIMM-N позволяет обкатать софт уже сейчас.
                                                                                                                                      Какой именно софт? Технологии «in-memory database» и «memcached» — давно обкатаны!
                                                                                                                                      Да. Но подобное использование — это как в той задачке про костёр, чайник и математика, когда задачу «сводит к предыдущей» «с высокой эффективностью» выливая воду из чайника в костёр и тем самым одновременно туша костёр и опустошая чайник.

                                                                                                                                      То, что вы помните про ROM-Basic — это замечательно, но совершенно не помогает понять как можно использовать NVMM-память.
                                                                                                                                      Учитывая популярность многоуровневой системы абстракций — использовать можно как угодно, в т.ч. самыми дебильными способами.
                                                                                                                                      Тут, как говорится, «не в бровь, а в глаз». Использовать «in-memory database» и «memcached» поверх NVMM — это как раз «самый дебильный способ» и есть, так как основное преимущество (не нужно загружать данные в память заново при каждой загрузке системы) — пропадает.

                                                                                                                                      Есть надежда, что всё-таки со временем NVMM научатся использовать несколько… более оптимально. Но пока — Intel продвигает именно такой подход, да.
                                                                                                                                        0
                                                                                                                                        Вы бы вместо того, чтобы рассуждать про технологии четвертьвековой давности, о которых все уже забыли давно, посмотрели на устройство современного компьютера, что ли.
                                                                                                                                        С тоской и грустью я смотрю на тот маразм, который делают криворукие дебилы.
                                                                                                                                        Это вы зря, кстати. «Маразм», как вы высказываетесь, разрабатывают весьма умные люди, в большинстве своём.

                                                                                                                                        Просто в IT особенно ярко проявляется принцип, который мы между собой называем «всюду лошади». Но он не только к IT относится. Решения, которые мы принимаем сегодня ограничены тему решениями, которые мы приняли вчера… а хрустального шара у нас нет и потому учесть то, что случится послезавтра — мы не можем (иногда можем учесть то, что случится завтра — но часто оказывается что планы меняются и «задел на будущее» оказывается не использован, а ограничения, про которые и не думали — начинают играть роль).

                                                                                                                                        P.S. Оригинальная байка, давшая название выражению — тут.

                                                                                                                                        P.P.S. Иногда удаётся этот принцип обойти — но не сильно. Подумайте почему какой-нибудь Falcon имеет диаметр 3.7 метра (12 футов), а не, скажем, 16 метров (что было бы гораздо более выгодно).
                                                                                                                                          0
                                                                                                                                          Это вы зря, кстати. «Маразм», как вы высказываетесь, разрабатывают весьма умные люди, в большинстве своём.
                                                                                                                                          Конечно, умные — вот сколько бабла они поднимают на впаривании людям фуфла.
                                                                                                                                          А всё это потому, что как только кто-то начинает обсуждать нетривиальные решения — так свора «охранителей» набрасываются на него и минусуют.

                                                                                                                                          Собственно, Ваша логика проста и прозрачна:
                                                                                                                                          1) То, что сделано — так хорошо, что лучше быть не может (по кр.мере — на нынешнем этапе развития). Потому что если бы было можно сделать лучше — то разработчики сделали бы лучше.
                                                                                                                                          2) Разработчики — лучшие, т.к. их наняли в лучшую из корпораций. (Отом, что за люди проводят отбор — естественно, ни слова. Ну, собственно, в лучшей корпорации — и отбором кадров занимаются лучшие люди.)
                                                                                                                                          3) То, что разработчики — лучшие, доказывается тем, что они принимают лучшие решения. А то, что решения — лучшие: ну так лучшие разработчики и не могут принять другие решения.

                                                                                                                                          О том, что на монополизированном рынке (а рынок из двух фирм — именно монополизированный) нет реальной конкуренции — естественно, никто не думает. Ну как, у нас же общеизвестно, что рынок силою невидимой руки приходит к лучшим решениям!

                                                                                                                                          Просто в IT особенно ярко проявляется принцип, который мы между собой называем «всюду лошади».
                                                                                                                                          Ну и какой же параметр играет роль ширины лошадиной задницы в IT?

                                                                                                                                          Кстати, в России железнодорожная колея — шире, хотя паровозы покупались в Англии.

                                                                                                                                          В IT играет роль другой фактор:
                                                                                                                                          Если инновация получится удачной — разработчик получит небольшую премию, а всю прибыль заберёт себе корпорация.
                                                                                                                                          Если же инновация получится неудачной — то разработчика уволят: старшие менеджеры т.о. прикрывают свои задницы.
                                                                                                                                          Поэтому разработчики просто не желают рисковать и разрабатывать что-то существенно новое.

                                                                                                                                          Смотрим на рынок смартфонов:
                                                                                                                                          Когда-то давно было много разных вариантов, примерно половина была с клавиатурами.
                                                                                                                                          Сейчас — все практически одинаковые, отличаются только закруглённостью углов корпуса. Все используют сенсорный экран, с клавиатурами остались только тупые звонилки. И никто не собирается пробовать альтернативные варианты типа Psion.

                                                                                                                                          Помяните мои слова: пока в США не случится больших потрясений — ничего существенно меняться не будет. Потому что пока США сильны — они будут поддерживать Intel и Micrio$oft. А Intel и Micrio$oft вполне довольны своим положением, у них нет никакого стимула разрабатывать что-то новое.
                                                                                                                                          Ну Google немного потеребил рынок — но это чисто потому, что в этот момент складывался новый рынок мобильных вычислений. Да, новые рынки (на которых непригодны старые решения) будут двигать прогресс. Но очень слабо.

                                                                                                                                          Кстати, странно, что при доставке топливного бака

                                                                                                                                          а хрустального шара у нас нет и потому учесть то, что случится послезавтра — мы не можем
                                                                                                                                          А зачем учитывать послезавтра — если мы его сами создаём?

                                                                                                                                          Иногда удаётся этот принцип обойти — но не сильно. Подумайте почему какой-нибудь Falcon имеет диаметр 3.7 метра (12 футов), а не, скажем, 16 метров (что было бы гораздо более выгодно).
                                                                                                                                          Очевидно — потому что Илон Маск ничего разрабатывать не способен и не собирается, а пользуется разработками NASA.
                                                                                                                                          А в Казахстане — нет гор и туннелей.
                                                                                                                                            0
                                                                                                                                            Смотрим на рынок смартфонов:
                                                                                                                                            Когда-то давно было много разных вариантов, примерно половина была с клавиатурами.
                                                                                                                                            Сейчас — все практически одинаковые, отличаются только закруглённостью углов корпуса. Все используют сенсорный экран, с клавиатурами остались только тупые звонилки. И никто не собирается пробовать альтернативные варианты типа Psion.
                                                                                                                                            А вот это вы бросьте. Я с этим смартфонами вожусь последние несколько лет. Как раз когда Android появился — было много сматрфонов с клавиатурой. Начиная с первого телефона на Android, далее — DROID и прочие всякие BlackBerry

                                                                                                                                            Знаете что их обьединяло? Никакие продажи. Вот просто совсем никакие. Горсточки фанатов хватало на то, чтобы создать кучу тем на форумах, но категорически не хватало на то, чтобы окупить затраты на разработку. Потому их перестали выпускать.

                                                                                                                                            Или вы предлагаете производителям их в убыток себе выпускать?

                                                                                                                                            Помяните мои слова: пока в США не случится больших потрясений — ничего существенно меняться не будет. Потому что пока США сильны — они будут поддерживать Intel и Micrio$oft. А Intel и Micrio$oft вполне довольны своим положением, у них нет никакого стимула разрабатывать что-то новое.
                                                                                                                                            Особенно классно ваши слова смотрятся после выпада на тему смартфонов. Не подскажите — как там у Intel и Microsoft на этом фронте? Всё хорошо, да?

                                                                                                                                            Ну Google немного потеребил рынок — но это чисто потому, что в этот момент складывался новый рынок мобильных вычислений. Да, новые рынки (на которых непригодны старые решения) будут двигать прогресс. Но очень слабо.
                                                                                                                                            Достаточно. Странно, что вас удивляет, что на сложившиеся рынки сложно войти. Это же и есть, как раз, эффект принципа «всюду лошади».

                                                                                                                                            Просто в IT особенно ярко проявляется принцип, который мы между собой называем «всюду лошади».
                                                                                                                                            Ну и какой же параметр играет роль ширины лошадиной задницы в IT?
                                                                                                                                            Мы их уже с десяток тут обсудили. SSD (вместо прямого доступа к флешу) — потому что железо рассчитано на HDD, x86 — потому что когда-то IBM не догадалась закрыть спецификации на BIOS IBM PC и многое, многое другое.

                                                                                                                                            А зачем учитывать послезавтра — если мы его сами создаём?
                                                                                                                                            Потому что создаём его «мы», а не «я». Вы можете предсказать (очень и очень приблизительно) что будете делать вы лично через 10 лет. Но куда пойдёт индустрия — предсказать в деталях невозможно.

                                                                                                                                            Очень хороший пример тут — как раз HDD и SSD. В своё время в известной книге был очено хорошо разобран этот случай и было показано как производители HDD погибают при переходах жёстких дисках к меньшим габаритам.

                                                                                                                                            Всё было очень убедительно… и производители HDD вложились в «следуюший шаг»: 1.8" и 1" HDD.

                                                                                                                                            А индустрия взяла — и перешла вместо этого на SSD!

                                                                                                                                            Очевидно — потому что Илон Маск ничего разрабатывать не способен и не собирается, а пользуется разработками NASA.
                                                                                                                                            Вот не надо устраивать тут конспирологию, Ok? Всё дело в том, что он ракеты по шоссе возит, а там несколько полос — но не смертельно много. Так что Falcon таки шире, чем пресловутые твёрдотопливные ускорители Шаттла… но не намного.

                                                                                                                                            А в Казахстане — нет гор и туннелей.
                                                                                                                                            Вот только автострад — там тоже нет. Потому Союзы и Протоны возят поездами. А вот Энергию — поезд уже не берёт. Потому она и летала 2 раза всего, что вся экономия на отличной компоновке сьедается тратами на воздушный транспорт (собственно Мрия была под транспортировку Энергии разработана).
                                                                                                                                              0
                                                                                                                                              Если инновация получится удачной — разработчик получит небольшую премию, а всю прибыль заберёт себе корпорация.

                                                                                                                                              Если разработчику кажется, что его инновация будет удачной — он уходит с работы и основывает стартап.
                                                                                                                                                0
                                                                                                                                                Для хорошего стартапа нужны большие деньги на разработку и ещё более большие деньги рекламу. Чтобы стартап был заведомо удачным — надо, чтобы этот стартап имел могучую поддержку, как Билл Гейтс получил от IBM; а для этого надо иметь правильных родителей, которые играют в гольф с боссами IBM.

                                                                                                                                                И есть второй вариант успещного стартапа — когда человек раскручивает стартап не на развитие, а на продажу его какой-нибудь крупной фирме. Вот только тут важен пиар (как у Илона Маска), а не реальная полезность для общества.

                                                                                                                                                В остальных случаях стартап или загибается, или продаётся за бесценок крупной фирме. Причём в случае продажи — покупатель с высокой вероятностью загубит покупку.
                                                                                                                                                Да и вообще — стартап обычно покупают не для того, чтобы его развивать, а чтобы заранее закрыть потенциального конкурента.
                                                                                                                        0
                                                                                                                        Преимущества перед SSD:
                                                                                                                        1) Скорость — не надо обнулять память перед записью туда новых данных.
                                                                                                                        2) Надёжностью: RAM не изнашивается.
                                                                                                                        3) Ценой. В частности, туда не нужен продвинутый контроллер.
                                                                                                                        4) Вероятно — энергопотреблением.

                                                                                                                        Прибавить оперативки — идеально. Но этому мешают три вещи:
                                                                                                                        1) Ограничение на размер оперативки, накладываемый мат.платой (чипсетом).
                                                                                                                        Как-то раз я очень долго ругался, когда обнаружил, что мат.плата (чипсет i815) имеет три слота под память, держит и правильно понимает модули вплоть до 512 мегабайт — и при этом суммарный объём памяти не может превышать те же 512 мегабайт. Феерично, не правда ли?
                                                                                                                        А до того у меня была мат.плата для процессора 486, восемь 30-пиновых слотов. У меня на ней стояли четыре модуля по четыре мегабайта, ещё четыре слота пустовали, но попытка добавить память провалилось — такое ощущение, что то ли мат.плата, то ли процессор не понимали, что памяти м.б. больше. При этом заполнение всех слотов одномегабайтными модулями — работало прекрасно.
                                                                                                                        2) Количество слотов и максимальный размер модуля памяти.
                                                                                                                        3) Тощий кошелёк. Обратите внимание: я недаром сказал про дешевизну памяти, которая д.б. достигнута за счёт снижения скорости.
                                                                                                                          0
                                                                                                                          Но этому мешают три вещи

                                                                                                                          Вы указали только две, первые два пункта суть одно и сейчас актуальны разве что для ноутбуков. Даже моя старая, дешёвая и ничем не выдающаяся Asrock Z75 Pro3 поддерживает до 32ГБ, что вполне хватит большинству.
                                                                                                                          0
                                                                                                                          Сейчас очень много устаревших флешек. Горы просто. Они никому не нужны, их обьемы смешны в сегодняшних реалиях. Их можно достать за бесценок
                                                                                                                          Наиболее удобно работать с микрофлешками — сд/микросд
                                                                                                                          Создаем девайс с кучей портов под флешки, представляем их единым массивом — получаем дешевую медленную постоянную память
                                                                                                                          Плюсами — горячая замена вышедших из строя блоков. Синхронизацию запилить на fs с избыточностью, замененный блок тут же будет восстановлен, можно не париться с процедурой замены флешек, вытащил, воткнул и готово.
                                                                                                                          К тому же у нас МНОГО параллельных каналов данных к памяти (флешек много) — можно значительно все ускорить, грамотно распределяя данные по физическим устройствам
                                                                                                                          С точки зрения железа все предельно просто: контроллер просто раздает адресное пространство портам, т.е. просто роутер, без логики. Все остальное наращиваем программно
                                                                                                                          Если очень захотеть, можно это все упаковать в корпус и продавать как бюджетные программные ссд, повторно используя устаревшие флешки. В принципе ничто не мешает и обычные ссд лишить контроллеров, а логику оформить программно.
                                                                                                                          Значительно увеличит эффект технология исключения битых ячеек. Флешки выходят из строя не целиком, а блоками, которые можно исключить из массива, и продолжить использовать флешку
                                                                                                                          Также значительно увеличит эффект технология равномерного распределения износа по всему обьему накопителя
                                                                                                                          Имеет смысл не разбивать пространство по накопителям, а сливать его в единое, а дырки затыкать ФС с избыточностью данных — это одновременно убережет от сбоев в ненадежной основе, и избавит от необходимости переконфигурировать массив при изменении количества накопителей
                                                                                                                            0
                                                                                                                            Один товарищ уже высказывал такую идею. У меня есть ряд возражений:
                                                                                                                            * Трудно собрать старые флешки. Это сейчас кажется, что их много — а как начнёшь собирать, так этот запас быстро исчерпается. И придётся заказывать на фабриках новые.
                                                                                                                            * Мало кто согласится доверить свои данные попользованным флешкам. Мало ли в каких условиях они побывали. Рейдование. конечно, вещь хорошая — но при внезапном массовом отказе и это не спасает.
                                                                                                                            * Файловая система с избыточностью и умеренной ресурсоёмкостью — пока мне не известна. Такую ФС вообще надо выносить на отдельный процессор (без FPU) с отдельной памятью.
                                                                                                                            * Дальше мне не совсем понятно, как Вы собираетесь отслеживать порчу данных, т.е. изменение состояния бита. Средствами CPU считать контрольные суммы — получится безумно дорого.
                                                                                                                            * Подобная система будет нуждаться в постоянном присмотре человека, готового заменять умершие элементы. Сама файловая система сможет переносить данные на работающие флешки — но по исчерпании свободного места она уже ничего не сможет сделать.

                                                                                                                            Хотя идея, безусловно, интересная.

                                                                                                                            Но я могу предложить альтернативу: HDD большого размера (пятидюймовый; полновысотный, т.е. два пятилдюймовых отсека) с малой скоростью вращения и одновременной/параллельной работой головок. Время доступа будет большое, но скорость чтения/записи будет высокой. Позиционируется как накопитель для больших файлов последовательного доступа типа архивов, фильмов или музыки.
                                                                                                                            Причём ремонтопригодный: с возможностью легко заменить плату и мотор: производитель гарантирует доступность запчастей в течении длительного времени, доступ к заменяемым узлам достаточно лёгкий.
                                                                                                                              0
                                                                                                                              Средствами CPU считать контрольные суммы — получится безумно дорого.
                                                                                                                              Ну вам же крипто-хеш не нужен! А CRC32 — за один такт вычисляется. BTRFS контролирует целостность всех файлов — и это не сильно её замедляет (у неё другие проблемы есть, но замедление от вычисления CRC к ним не относится).

                                                                                                                              Хотя идея, безусловно, интересная.
                                                                                                                              Идея совершенно дурацкая, потому что вся электроника, выпущенная несколько лет назад — гораздо дороже, чем современная. Вот когда Закон Мура, пресловутый, себя исчерпает совсем — тогда да. А пока — бессмысленно.

                                                                                                                              Почему? Да потому что, блин, математика! Геометрическая прогрессия, блин!

                                                                                                                              На одну чашу весов кладём всё, что выпущено с доисторических времён до 2015го года включительно. Вот все флешки, всю память, всё-всё-всё-что-только-бывает.

                                                                                                                              На другую — флеш-память, встроенную в смартфоны выпущенные за 2016й-2017й годы.

                                                                                                                              Где будет больше флеша? Правильно — справа.

                                                                                                                              Ни и какую, нафиг, вы собираетесь делать «дешёвую» память при таких раскладах?

                                                                                                                              Один человек — да, может что-то такое «для души» спаять. Но такой умелец и без того зарабатывает достаточно, чтобы нормальной памяти купить, скорее всего.

                                                                                                                              А в рамках индустрии — оно не работает и работать не будет. Потому что нет ни старой памяти, ни старых флешек в достаточных обьёмах! Просто нету в природе! Закон Мура это гарантирует!
                                                                                                                                0
                                                                                                                                Ну вам же крипто-хеш не нужен! А CRC32 — за один такт вычисляется.
                                                                                                                                Я Вам про Фому ECC, а Вы мне про Ерёму CRC!

                                                                                                                                Допустим, в блоке данных инвертировался один бит, причём мы не знаем, какой именно. Функция, вычисляющая номер сбойнувшего бита (она же проверяет целостность — даёт ноль, если всё в порядке, а биты нумеруются с единицы) — довольно сложная, за один такт не делается.

                                                                                                                                Ну, если может сбойнуть только один бит, то всё не так уж плохо. А вот если могут сбойнуть два или более произвольных бита — то всё намного хуже.

                                                                                                                                BTRFS контролирует целостность всех файлов
                                                                                                                                Ой, и что же она делает, если обнаруживает сбой в файле?

                                                                                                                                Где будет больше флеша? Правильно — справа.
                                                                                                                                Ну, использовать старые флешки — не я предложил.

                                                                                                                                А Вы не учли, что слева хоть и мало флеша — но он очень дешёвый. И на начальном этапе можно будет собирать носители во вполне приличных количествах. На старье вполне можно сделать мелкий или даже средний бизнес.
                                                                                                                                  0
                                                                                                                                  На старье вполне можно сделать мелкий или даже средний бизнес.

                                                                                                                                  Забыли указать, что он работал в ноль, чисто по фану ради экологии.
                                                                                                                      0
                                                                                                                      А из какой формулы иcходить при расчете «минимального» размера swap для сервера?
                                                                                                                        0
                                                                                                                        Тоже этот вопрос интересует. У меня есть несколько систем, где по 128 Гб и выше. В нормальном режиме По сконфигурировано на жесткие границы памяти и в запасе остается всегда свободно гигов 20. При этом swap вот есть, но минимальный (4 Гб) и всегда «почти» пустой. Когда происходит нерегулярное копирование файлов, то забивается файловый кэш и, понятное дело, тут приоритет именно в пользу сброса файловых буферов. Данные-то копируются с одного места на другое. Зачем мне такие кэши в памяти держать. Вот сколько для таких случаев swap-а держать?

                                                                                                                        0
                                                                                                                        Знакомый высказал вот такое мнение по этому поводу:

                                                                                                                        «В реальности, как мы понимаем, все совсем не так. Автор пишет правду, вот только по опыту своп делает не лучше, а хуже. Автор даже отмечает, почему — oom killer приходит позже, чем мог бы. О чем автор не пишет, так это о том, что при интенсивной конкуренции за память система становится неуправляемой — sshd оказывается в свопе, и привет.

                                                                                                                        В рамках использования cgroups из свопа, возможно, удастся извлечь пользу, но это требует исследования. А на обычном сервере своп не нужен — допускать высокой конкуренции за память мы все равно не должны, а при низкой осмысленность минимальная.

                                                                                                                        Ну и последнее. Ненужные анонимные страницы — это какие-то копейки в современной системе. Стоит ли ради них возиться со сложным механизмом?»

                                                                                                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                                                        Самое читаемое