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

2 ответа

62

В этих трех системах много всего, но ничто из этого не делает простого сравнения между ними, не говоря уже об их объяснении. Я попытался понять это, но голова взорвалась. Затем я подумал, что у меня есть это, поэтому я попытался записать его, и моя голова снова взорвалась. (см. краткое изложение реализаций). Я подумал, что было бы полезно опубликовать это здесь, поскольку было много вопросов, связанных с stackexchange, которые спрашивали о попарных сравнениях между ними.

Краткое описание использования:

  1. ZRAM , если у вас нет устройства подкачки на HDD /SSD.
  2. ZSWAP , если у вас есть устройство подкачки на HDD /SSD.
  3. ZCACHE . Он делает то, что делает ZSWAP, и ТАКЖЕ сжимает и ускоряет кеширование страницы файловой системы. (Он намного сложнее и не находится в основном ядре, поскольку он все еще находится в разработке).

Краткое изложение их реализации:

  1. ZRAM — это сжатое ОЗУ на основе устройства подкачки
  2. ZSWAP — сжатый Cache , если у вас уже есть своп.
  3. ZCache — это бэкэнд для специального типа виртуальной оперативной памяти (трансцендентная память), которая может использоваться для кэширования страниц файловой системы или обмена данными.

Детали:

  • ZRAM: Создает своп-устройство в ОЗУ. Страницы, отправленные здесь, сжимаются при их сохранении. Он имеет более высокий приоритет, чем другие устройства подкачки: страницы, которые были заменены, предпочтительно отправляются на устройство zram до его полного заполнения, только тогда используются любые другие устройства подкачки.

    • Преимущества: Независимо от других (физических) устройств подкачки. Он может использоваться, когда нет раздела подкачки для расширения доступной памяти.
    • Недостатки: Если присутствуют другие устройства подкачки (HDD /SSD), они не используются оптимально. Поскольку zram-устройство является независимым устройством подкачки, как только оно заполнено, все новые страницы, которые необходимо поменять, отправляются прямому следующему устройству подкачки, следовательно:

      1. Существует реальная вероятность использования LRU (наименее недавно использованной) инверсии: это самые последние данные об обмене данными на медленном диске, в то время как неактивные страницы, которые были заменены давно, останутся в быстром ZRAM
      2. Данные, отправленные и считываемые с диска, будут потреблять большую полосу пропускания, поскольку она несжата.
    • Статус: . Слияние с основным ядром 3.14. После включения в системе требуется настройка пользовательского пространства для настройки устройств подкачки и их использования.
  • ZSWAP: Система перехватывает страницы и использует zswap как для устройства подкачки HDD /SSD: делается попытка сжимать страницу, и если она содержит плохо сжимаемые данные, она непосредственно записывается на диск. Если данные сжаты, они сохраняются в пуле памяти zswap. Если страницы обрываются из памяти, когда общая сжатая страница в ОЗУ превышает определенный размер, на диск записывается страница с наименьшим последним использованием (LRU) с сжатой , поскольку она вряд ли понадобится в ближайшее время.

    • Преимущества: Очень эффективное использование оперативной памяти и дискового подкачки. Минимизирует дисковый ввод-вывод, уменьшая количество требуемых записей и чтений (данные сжимаются и сохраняются в ОЗУ) и уменьшая пропускную способность этих операций ввода-вывода, поскольку данные находятся в сжатой форме.
    • Ограничения: Это усовершенствование систем подкачки на основе дисков и, следовательно, зависит от раздела подкачки на жестком диске.
    • Статус: Слияние с ядром linux 3.11 mainline.
  • ZCache: Это бэкэнд для системы Transcendent. Трансцендентная память обеспечивает RAM-подобную память, к которой можно получить доступ только на странице за раз, используя и . Это не похоже на обычную память, к которой можно получить доступ к байту за раз. Системы и swap и вернуть файлы файловой системы соответственно и отправить их в трансцендентную память. Когда zcache используется в качестве бэкэнд, данные сжимаются и сохраняются в ОЗУ. Когда он заполняется, сжатые страницы вытесняются. (альтернативный бэкэнд — RAMster, который разделяет пул ОЗУ через сетевые компьютеры).
    Использование только интерфейса с помощью backend работает так же, как . (На самом деле zswap является упрощенным подмножеством zcache)

    • Преимущества Обеспечивает сжатое кэширование как для подкачки, так и для кэшей файловой системы.
    • Статус: Все еще не поддерживается, поскольку он очень сложный и работает.

Лучшие ресурсы, которые я нашел, были:

  • Трансцендентная память в двух словах
  • [PATCH 0/8] zswap: сжатое кэширование подкачки
  • сжатие в ядре памяти
  • LSFMM: сжатие в ядре памяти
  • сжатый своп-код zswap

Главный смысл торговли на Форекс

Чтобы лучше понять, что представляет из себя инструмент своп, нужно более детально ознакомиться с сутью работы биржи Форекс, функционирования основных механизмов на рынке и особенностями действий трейдера при открытии очередной торговой операции. Стоит рассмотреть это более детально на примере. Если приобретать валютную пару EUR/JPI, то можно услышать от опытных трейдеров привычную фразу «купил котировку». На самом деле эта фраза не совсем корректна, ведь понятие «котировка» представляет собой соотношение стоимости двух валют. Поэтому как таковое купить это соотношение в принципе нельзя.

Но также у неопытных людей в этом деле могут возникать другие сопутствующие вопросы: как можно торговать тем, чего у тебя нет? В частности, торговать определенной валютой. Ведь можно открыть счёт в рублях или долларах, но нет возможности открывать его в другой валюте, например, в йене. Каким образом мы будем торговать ею на рынке? Вслед за этим вопросом появляется еще масса других: Кто нам будет продавать евро? Возможно, брокер? Может быть другие трейдеры или банк? На все эти вопросы есть довольно простые и понятные ответы. Точнее, они сводятся к всего одному слову – своп. Именно расшифровка этого понятия позволит нам продавать ту валюту, которой у нас нет в распоряжении и покупать любую другую из бесконечного в запаса. Но как всё происходит по факту и что такое своп простыми словами?

Когда трейдер на бирже нажимает кнопку «Открыть ордер», происходят такие действия:

  • Выдается кредит из Центрального банка того государства, с чьей валютой выполняется операция, а конкретно продажа. На выбранном примере эта страна Япония. Как и полагается, за оформленный кредита нужно отдать проценты, согласно курсу ЦБ.
  • Необходимо поменять взятую в кредит валюта в ЦБ той державы, чью валюту мы хотим приобрести. Согласно примеру, это Европейский ЦБ. Но после этой операции полученная сумма в евро не приходят сразу к трейдеру, она остаётся в банке как вклад, поэтому на неё начисляются проценты.

Какой результат такой операции? Так как мы взяли кредит в Японском банке, нам необходимо выплачивать ему проценты. Но зато Европейский банк сам выплачивает нам проценты за вклад. Разница между этими двумя процентными начислениями банков и будет нашим свопом. При этом стоит заметить, что показатель может быть как положительным, так и отрицательным.

Если представить, что у ЕЦБ процентная ставка 2%, в японском 1%, то swap будет их разницей и составит 1%. На нём мы сможем что-то заработать, если будет открыта операция на покупку EUR/JPI. Если при тех же условиях в Японском ЦБ ставка составит 3%, то своп будет отрицательным. По кредиту придётся отдавать больше, чем мы будем получать за вклад.

На таком принципе основывается торговля на Forex. Без инструмента своп можно было бы осуществлять только односторонние действия – покупать валюту, но не продавать ее. Этот инструмент позволяет использовать прогнозирование на любых котировках, направлениях и валютах.

Брокерская контора Мин. депозит Мин. ставка Бонус Демо-счет Лицензия
10$ 1$ До 100% Да ЦРОФР
100$ 5$ До 150% Да ЦРОФР
5$ 1$ До 110% Да ЦРОФР
9$ 1$ До 60% Да ЦРОФР
200$ 24$ До 100% Да CySEC

Решение

Как реализованы?

Да, реализация, представленная в вопросе, является классической C ++ 03.

Более современная (C ++ 11) реализация выглядит так:

Это улучшение по сравнению с классической реализацией C ++ 03 с точки зрения управления ресурсами, поскольку оно предотвращает ненужные копии и т. Д. Это, C ++ 11 , требует тип быть MoveConstructible а также MoveAssignable, что позволяет реализовать и улучшить.

Зачем мне нужно предоставлять пользовательскую реализацию?

Индивидуальная реализация для конкретного типа обычно рекомендуется, когда ваша реализация более эффективна или специфична, чем стандартная версия.

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

С появлением и подвижные типы (и реализованный твой тип как таковой), около C ++ 11 и далее, многие исходные обоснования здесь начинают отпадать; но тем не менее, если пользовательский своп будет лучше стандартного, реализуйте его.

Общий код, как правило, сможет использовать ваш пользовательский если он использует ADL механизм соответственно.

48

Другие решения

Какая реализация? Это спецификация, а не отдельная конкретная библиотека. Если ты имеешь ввиду как стандартная библиотека моего компилятора делает это, либо скажите нам, какой это компилятор, либо прочитайте код самостоятельно.

По сути, это наивная версия до C ++ 11.

Эта неспециализированная реализация вынуждает копию: в вашем примере код переводится как:

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

Поскольку это было явно ужасно, были предусмотрены перегрузки для дорогих контейнеров, и вам было предложено написать перегрузки для ваших собственных дорогих типов: например. специализация имела доступ к внутренним объектам вектора и могла поменять два вектора без копирования:

Обратите внимание, что это не требует никаких копий чего-либо дорогого, никакого динамического (де) выделения и гарантированно не генерирует. Теперь причина этой специализации в том, что vector :: swap имеет доступ к внутренним компонентам вектора и может безопасно и эффективно перемещать их без копирования

Теперь причина этой специализации в том, что vector :: swap имеет доступ к внутренним компонентам вектора и может безопасно и эффективно перемещать их без копирования.

Pre-C ++ 11 по той же причине, что и — сделать обмен эффективным и исключительным.

Начиная с C ++ 11, вы действительно этого не сделаете — если вы либо предоставите конструкцию перемещения и присваивание, либо компилятор может сгенерировать для вас разумные значения по умолчанию.

Новый общий своп:

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

15

Простой пример свопа на Форекс

Для лучшего понимания такого инструмента, как своп, нужно ознакомиться с принципами работы биржи Форекс и основными действиями трейдера при открытии торговой операции. Например, рассмотрим покупку валютной пары евро и японская иена. Под данной покупкой подразумевается одновременное открытие двух сделок: первая – это покупка евро, вторая – продажа иены. Таким образом, делается ставка на повышение одной валюты и снижение другой.

Когда трейдер на бирже нажимает кнопку «Открыть ордер», происходит следующее:

  • Центральный банк, с чьей валютой выполняется операция, а точнее продажа, выдаёт кредит. Согласно выбранному примеру, это Япония. За оформленный кредит полагается отдать проценты по курсу ЦБ;
  • Нужно обменять взятую в кредит валюту в ЦБ той державы, чью валюту необходимо приобрести. На этом примере – это Европейский ЦБ. После совершения этой операции, полученная сумма в евро не поступит сразу на счёт трейдера. Она останется в банке как вклад, и поэтому на неё будут начисляться проценты.

Результат данной операции такой: т.к. кредит был взят в японском банке, ему надо выплачивать проценты. Но в то же время, Европейский банк сам выплачивает проценты за вклад. Разница между этими двумя процентными начислениями банков и есть своп.

Видео

В этом видео инспектор рассказывает о свайпе автомобиля и регистрационных мерах.

Свап УАЗ Патриот.

Свап Нива 4х4. https://www.youtube.com/watch?v=o33t4XAu9bY

Разница СВАП или ТЮНИНГ.

Свап мотора. Как можно легко доработать двигатель.

А что же такое свап, многие стесняясь спрашивают назначение этого слова когда его слышат из уст собеседника. А что же не асмом деле означает это слово, аббревиатура или просто сокращение. Вот результаты моего исследования: swap имеет вполне конкретный перевод «менять» казалось бы все стало на свои места, а вот и нет. Этого слова до сих пор нету ни в векипедии ни в другом толковом словаре.А мне кажется уже давно пора. Давайте постараемся вместе заполнить этот пробел своими размышлениями. Ну вот к примеру: свапнутый

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

что нужно знать перед свапом

Q

чем отличается свап от тюнинга?!A тюнинг чаще всего применяется к уже установленным узлам и агрегатам, к примеру тюнинг двигателя (замена валов и т.п.) А СВАП это модернизация путем замены одного узла на другой, и скорее всего так с завода не было )

Kernel configuration

Tuning kernel/ActivityManager to reduce direct reclaim

Direct reclaim happens when a process or the kernel tries to allocate a page of memory (either directly or due to faulting in a new page) and the kernel has used all available free memory. This requires the kernel to block the allocation while it frees up a page. This in turn often requires disk I/O to flush out a dirty file-backed page or wait for to kill a process. This can result in extra I/O in any thread, including a UI thread.

To avoid direct reclaim, the kernel has watermarks that trigger or background reclaim. This is a thread that tries to free up pages so the next time a real thread allocates, it can succeed quickly.

The default threshold to trigger background reclaim is fairly low, around 2 MB on a 2 GB device and 636 KB on a 512 MB device. The kernel reclaims only a few megabytes of memory in background reclaim. This means any process that quickly allocates more than a few megabytes is going to quickly hit direct reclaim.

Support for a kernel tunable is added in the Android-3.4 kernel branch as patch 92189d47f66c67e5fd92eafaa287e153197a454f («add extra free kbytes tunable»). Cherry-picking this patch to a device’s kernel allows to tell the kernel to try to keep three full-screen 32 bpp buffers of memory free.

These thresholds can be configured with the framework.

-1

Tuning LowMemoryKiller

configures the thresholds of the LowMemoryKiller to match its expectation of the working set of file-backed pages (cached pages) required to run the processes in each priority level bucket. If a device has high requirements for the working set, for example if the vendor UI requires more memory or if more services have been added, the thresholds can be increased.

The thresholds can be reduced if too much memory is being reserved for file-backed pages, so that background processes are being killed long before disk thrashing would occur due to the cache getting too small.

-1

Swap to zram

zram swap can increase the amount of memory available in the system by compressing memory pages and putting them in a dynamically allocated swap area of memory. Since this is trading off CPU time for a small increase in memory, you should be careful about measuring the performance impact zram swap has on your system.

Android handles swap to zram at several levels:

  • First, the following kernel options must be enabled to use zram swap effectively:
  • Then, you should add a line that looks like this to your fstab:
     /dev/block/zram0 none swap defaults zramsize=,swapprio=
    • is mandatory and indicates how much uncompressed memory you want the zram area to hold. Compression ratios in the 30-50% range are usually observed.
    • is only needed if you don’t have more than one swap area.

    Label the associated block device as a in the device-specific so that it’s treated properly by SELinux.

     /dev/block/zram0 u:object_r:swap_block_device:s0 
  • By default, the Linux kernel swaps in eight pages of memory at a time. When using zram, the incremental cost of reading one page at a time is negligible and may help if the device is under extreme memory pressure. To read only one page at a time, add the following to your :
     write /proc/sys/vm/page-cluster 0 
  • In your after the line, add:
     swapon_all /fstab.X 
  • The memory cgroups are automatically configured at boot time if the feature is enabled in the kernel.
  • If memory cgroups are available, marks lower-priority threads as being more swappable than other threads. If memory is needed, the Android kernel starts migrating memory pages to zram swap, giving a higher priority to the memory pages that have been marked by .

Carveouts, Ion, and contiguous memory allocation (CMA)

On low-memory devices, it’s important to be mindful about carveouts, especially those that aren’t fully used, such as a carveout for secure video playback. There are several solutions to minimize the impact of your carveout regions that depend on the exact requirements of your hardware.

If hardware permits discontiguous memory allocations, the Ion system heap allows memory allocations from system memory, eliminating the need for a carveout. Ion also attempts to make large allocations to eliminate translation lookaside buffer (TLB) pressure on peripherals. If memory regions must be contiguous or confined to a specific address range, the CMA can be used.

This creates a carveout that the system can also use for movable pages. When the region is needed, movable pages are migrated out of it, allowing the system to use a large carveout for other purposes when it’s free. You can use CMA directly with the Ion CMA heap.

Customizing zswap

Current parameters

Zswap has several customizable parameters. The live settings can be displayed using:

$ grep -R . /sys/module/zswap/parameters
/sys/module/zswap/parameters/same_filled_pages_enabled:Y
/sys/module/zswap/parameters/enabled:Y
/sys/module/zswap/parameters/max_pool_percent:20
/sys/module/zswap/parameters/compressor:lz4
/sys/module/zswap/parameters/zpool:z3fold
/sys/module/zswap/parameters/accept_threshold_percent:90

The boot time load message showing the initial configuration can be retrieved with:

$ dmesg | grep zswap:
 zswap: loaded using pool lz4/z3fold

Set parameters

Using sysfs

Each setting can be changed at runtime via the sysfs interface. For example, to change the parameter:

# echo lz4 > /sys/module/zswap/parameters/compressor

Using kernel boot parameters

To persist the parameter change, the corresponding option, for example , must be added to the kernel boot parameter. Therefore to set permanently all the above settings, the following kernel parameters must be added: .

When changing the compression algorithm via boot parameter, one needs to ensure the corresponding compression module is loaded early during boot (refer to ).

Using systemd-swap

Maximum pool size

The memory pool is not preallocated, it is allowed to grow up to a certain limit in percentage of the total memory available, by default up to 20% of the total RAM. Once this threshold is reached, pages are evicted from the pool into the swap device.
The maximum compressed pool size is controlled with the parameter .

Compressed memory pool allocator

A zpool of type z3fold is created by default, use the kernel parameter to select another method at boot time. The data allocator can also be changed at a later stage via the sysfs interface.

Compression algorithm

For page compression, zswap uses compressor modules provided by the kernel’s cryptographic API. It uses by default the lz4 compression algorithm but this can be changed with at boot time. Other options include deflate, lz4hc, lzo, lzo-rle, 842 and zstd.

There is no issue changing the compression at runtime using sysfs or via systemd-swap but zswap starts in this case with lz4 and switches at a later stage to the defined algorithm. To start zswap with another algorithm straight away, this must be set via the kernel boot parameters and the corresponding module must be loaded early by the kernel. This can be achieved by following these steps:

  1. Add the modules related to the chosen compressor to the array.
  2. Regenerate the ramdisk environments after modifying mkinitcpio configuration: see .
  3. Set to your chosen algorithm in the kernel parameters.

On next boot, see to check if zswap now uses the requested compressor.

Классификация свопов

Вид свопа Описание
Валютный Самый популярный метод, используемый на финансовом рынке. Подразумевает проведение двух операций по купле/продаже валютной пары. Сумма в обеих операциях остаётся неизменна, но даты выполнения условий сделки разные. Получение прибыли зависит от разницы в котировках
Процентный Представляет собой сделку, по правилам которой обе стороны обмениваются процентными ставками по долговым обязательствам. Иными словами, это когда по соглашению сторон одну форму процентных ставок меняют на другую (фиксированную на плавающую). К примеру, Антон выплачивает кредит в 1 500 000 рублей по фиксированной ставке 12%. Кирилл рассчитывается за кредит с аналогичной суммой по плавающей ставке 10 – 14%. Если они захотят обменяться условиями, то такое соглашение и будет процентным свопом
Кредитный дефолтный В некотором роде это страховка от убытков в случае невыполнения контрагентом своих долговых обязательств. Например, покупатель кредитного дефолтного свопа платит комиссию продавцу с таким условием, что если произойдёт дефолт, то ему выплатят всю сумму долга
На акции Договор, подразумевающий обмен прибылью от акций из различия доходности индексов и процентных ставок. Одна сторона соглашается выплатить второй стороне денежную сумму, размер которой зависит от изменения фондового индекса. Вторая сторона соглашается оплатить фиксированную сумму первой стороне, опираясь на процентную ставку
На драгоценные металлы Используется для хеджирования рисков. Сделка купли/продажи проходит в два этапа:

— Купля либо продажа одного драгметалла;

— Обратная транзакция.

Свопцион Является производным инструментом от свопа и опциона, позволяющий заключить соглашение в будущем на оговоренных условиях. Свопционом предусматривается право совершения сделки, но соглашение не обязывает её совершать
Сделка РЕПО Разновидность конверсионной сделки, предусматривающая куплю ценных бумаг и их обязательную продажу в строго указанный срок и по заранее оговоренной стоимости

Видео по теме:

Как активировать оптимизацию системы через zRAM?

Для начала потребуется запустить режим разработчика:

  1. В настройках зайдите во вкладку «О телефоне».
  2. Внутри раздела найдите пункт «Номер сборки».
  3. Нажмите на него 7 раз.

Включаем оптимизацию:

  • Теперь в дополнительных настройках смартфона появился новый пункт «Для разработчиков» — зайдите в него.
  • Найдите опцию «Оптимизация системной памяти». Если такого пункт там нет, значит, данная модель устройства не поддерживает zRam.
  • Активируйте оптимизацию системы.

В разделе «Swappiness» можно узнать, с какой частотой система обращается к zRam по умолчанию. Этот показатель можно изменить, установив значение от 1 до 100. Опция «Swappiness» находится по пути /proc/sys/vm/ через менеджер файлов. Исправность работы модуля проверяется посредством приложения Diskinfo. Если в самом низу меню программы присутствует пункт SWAP, значит, технология активна.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector