Linux: разница между «разбивкой по страницам при сбое основной страницы» и «подкачка включена вручную»

На Linux-машине мы можем включить подкачку с помощью следующих команд

sudo fallocate -l 500M /data/swapfile
sudo chmod 600 /data/swapfile
sudo mkswap /data/swapfile
sudo swapon /data/swapfile

Но даже когда это не включено, ядро ​​все равно выполняет подкачку, когда страница не находится в памяти .

Мы можем проверить это, выполнив команду sar -B 1 30 на машине без установки файла подкачки.

03:08:40 AM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
03:08:41 AM      0.00      0.00      3.00      0.00     44.00      0.00      0.00      0.00      0.00
03:08:42 AM      0.00      0.00     19.00      0.00     30.00      0.00      0.00      0.00      0.00
03:08:43 AM      0.00      0.00      0.00      0.00      3.00      0.00      0.00      0.00      0.00
03:08:44 AM     24.00      0.00      2.00      1.00      7.00      0.00      0.00      0.00      0.00
03:08:45 AM    364.00     60.00     18.00      3.00      4.00      0.00      0.00      0.00      0.00
03:08:46 AM    140.00      0.00    392.00      2.00    243.00      0.00      0.00      0.00      0.00

По-прежнему существует majflt , который будет запускать пейджинг данные на диск.

Мои вопросы:

  • Можно ли сказать, что в ОС есть два типа свопинга?
  • Как эти два механизма работают по-разному?
  • Если всегда работает механизм подкачки , почему по-прежнему нужно включать своп вручную?

Я знаю , что некоторые люди говорили :

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

В то время как под разбивкой по страницам понимается копирование одной или нескольких страниц адресное пространство. В частности, это гораздо более мелкое зерно. За Например, в адресном пространстве ОЗУ размером 1 ГБ содержится ~ 250 000 страниц размером 4 КБ.

Однако в книге Общие сведения о диспетчере виртуальной памяти Linux , похоже, в Linux все обстоит иначе.

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

Может кто-нибудь пролить свет на это? Спасибо!

0
задан 27 March 2020 в 05:23
2 ответа

Сучасныя аперацыйныя сістэмы звычайна рэалізуюць сваю віртуальную памяць з пункту гледжання невялікіх кавалкаў, званых старонкамі, уключаючы замену на дыск. Гэта паляпшэнне неабходнасці замены цэлых праграм, як гэта было зроблена ў пачатку UNIX System V.

Некалькі падкрэслівалі, што падпампоўка адрозніваецца ад старой замены, у тым ліку ў Разуменне Linux Virtual Memory Manager . Але звярніце ўвагу, што тэрмін абмену выжывае.

Збівае з панталыку, падпампоўка - гэта толькі падгрупа падпамповак . Выканальныя файлы альбо файлы, адлюстраваныя ў памяці, - прыклады, калі памылкі старонак могуць адбывацца незалежна ад месца падкачкі. Гэтыя карты файлаў ужо падмацаваны пастаянным сховішчам. Наадварот, прастора свопу рухаецца вакол ананімных старонак.

Такім чынам, sar статыстыка падкачкі старонак - гэта іншая метрыка, чым vmstat , замена / замена.

Без прасторы свопу ёсць няма сродкаў вяртаць ананімныя старонкі. Для працоўных нагрузак па-ранейшаму патрэбна іх памяць, таму ціск на кэшы файлаў узмацняецца. Даданне некаторай прасторы падпампоўкі таксама дапамагае рухацца ўніз. Гэта не карысна, бо "аварыйная памяць", агрэсіўная выпрацоўка, каб запаволіць памяняць месца, страшная для прадукцыйнасці.

Аналогія: разгледзім магчымасць фізічна перамяшчацца дома. "Графік" размеркавання памяці можа прымусіць крытычна спяшацца для "рухавікоў" ядра ўзяць і перамясціць усё. Дадайце знешні шафку для захоўвання, і рэчы, якія не патрэбныя адразу, можна захоўваць там раней часу з меншымі нагрузкамі. Гэта эфектыўная прастора падпампоўкі.

2
ответ дан 30 March 2020 в 01:18

Нават калі ў вас не ўключаны своп, але ядро ​​па-ранейшаму выкарыстоўвае віртуальную памяць

У структурах вызначэння працэсаў Linux - гэта памяць ядра (лагічныя адрасы), гэта азначае, што ў выпадку недахопу памяці ядро ​​Linux не замяняе структуры працэсу.

Linux не памяняйце сябе, як solaris, Solaris таксама памяняйце структуру ядра працэсаў.

Амаль кожная аперацыйная сістэма выкарыстоўвае падкачку для перакладу віртуальнай памяці ў фізічную памяць

Linux выкарыстоўвае сістэму меліярацыі старонак, каб вызваліць памяць у выпадку недахопу памяці. альбо нявыкарыстаныя старонкі з дадзенымі карыстальнікаў, па гэтай прычыне выкарыстоўваецца своп.

Старонкі працэсу аднос Прыналежныя да карыстацкай прасторы называюцца віртуальнай памяццю, гэтыя старонкі карыстальнікаў могуць апынуцца ў прасторы свопу.

Многія з гэтых тэрміналогій з'яўляюцца агульнымі для unix, з некаторымі невялікімі адрозненнямі паміж Linux і unix

Працэс сегментуе тэкст, дадзеныя , s tack, bss, куча знаходзіцца ў карыстальніцкай прасторы.

1
ответ дан 30 March 2020 в 01:18

Теги

Похожие вопросы