Page fault

User avatar
idle0
Уже с Приветом
Posts: 2846
Joined: 28 Jun 2000 09:01
Location: Milwaukee, WI

Page fault

Post by idle0 »

Вопрос про UNIX/Solaris. Что такое page fault и можно ли по большому колличеству page faults судить о недостатке памяти в сервере или нет?

Я считаю что каждая disk i/o operation порождает page fault, т.e. запись/чтение файла и т.д. А мне говорят что page fault бывает
только в случае paging-a, когда например процесс обращается к
странице в памяти, которая была paged out из-за нехватки памяти...
moria# show running-config
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Re: Page fault

Post by A. Fig Lee »

idle0 wrote:Вопрос про UNIX/Solaris. Что такое page fault и можно ли по большому колличеству page faults судить о недостатке памяти в сервере или нет?

aga
idle0 wrote:Я считаю что каждая disk i/o operation порождает page fault, т.e. запись/чтение файла и т.д. А мне говорят что page fault бывает
только в случае paging-a, когда например процесс обращается к
странице в памяти, которая была paged out из-за нехватки памяти...

Правильно говорят :umnik1:
Верить нельзя никому - даже себе. Мне - можно!
User avatar
idle0
Уже с Приветом
Posts: 2846
Joined: 28 Jun 2000 09:01
Location: Milwaukee, WI

Post by idle0 »

Вопрос был такой: приходят ко мне друзья и говорят - мы сеичас померяем все сервера (iz Patrol-a), и везде где high rate of page faults - будем вас иметь за то что в системе недостаточно памяти.

А я им говорю - отчепитесь, у вас там high disk i/o и поетому то high rate of page faults.

P.S. В Solaris весь disk i/o сделан через paging. Если копировать большой файл - через "sar -p" видно большое колличество vflt/s.

Так что по моему я прав...
moria# show running-config
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

idle0 wrote:Вопрос был такой: приходят ко мне друзья и говорят - мы сеичас померяем все сервера (из Патрол-а), и везде где хигх рате оф паге фаултс - будем вас иметь за то что в системе недостаточно памяти.

А я им говорю - отчепитесь, у вас там хигх диск и/о и поетому то хигх рате оф паге фаултс.

П.С. В Соларис весь диск и/о сделан через пагинг. Если копировать большой файл - через "сар -п" видно большое колличество вфлт/с.

Так что по моему я прав...

Не верю. Пейдж фолт - когда запрошенная страница памяти не есть в мемори и загружается из свопа. Вы наверное, когда копируете большой файл аллокируете много мемори - используйте маленький буффер и увидите.
Верить нельзя никому - даже себе. Мне - можно!
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Timberwolf wrote:
A. Fig Lee wrote:
idle0 wrote:Вопрос был такой: приходят ко мне друзья и говорят - мы сеичас померяем все сервера (из Патрол-а), и везде где хигх рате оф паге фаултс - будем вас иметь за то что в системе недостаточно памяти.

А я им говорю - отчепитесь, у вас там хигх диск и/о и поетому то хигх рате оф паге фаултс.

П.С. В Соларис весь диск и/о сделан через пагинг. Если копировать большой файл - через "сар -п" видно большое колличество вфлт/с.

Так что по моему я прав...

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


A Fig Lee, если я правильно помню, Solaris использует memory mapping для file I/O. Грубо говоря, файл объявляется swap-нутым на диск и все обращения к файлу идут через обращения к памяти. Естественно, если запрошенного участка файла нет в памяти, происходит отказ страницы и подкачка с диска.
Поиск по Google выдает в числе первых ссылок
http://www.cs.uleth.ca/~holzmann/C/system/mmap.html

Дальше рыться лень... :)

По-моему, ето не из той оперы. Во первых, Как ето поможет? Открываешь файл и пишешь туда - при чем тут мемори маппед файл?
2. При меморы маппед файл изменения в мемори синхронизируются с изменениями в реальном файле, так что своп тут не при чем, ИМХО.
3. Если Вы имеете ввиду мемори маппед с МАП_АНОН - тады да, своп - но в етом случае file IO не при чем.
4. Если запрошенного участка нет в памяти - ето говорит, что памяти не хватает.

5. АФАИК , Линух для malloc использует mmap - ну чтото я не вижу никаких фолтов с 1Гиг памяти. :pain1:
Верить нельзя никому - даже себе. Мне - можно!
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Timberwolf wrote:
A. Fig Lee wrote:Вы наверное, когда копируете большой файл аллокируете много мемори - используйте маленький буффер и увидите.


Небольшое дополнение. Системы, копирующие файл через swap

read src from disk->write swap to disk->read swap from disk->write dest to disk

не имеют права на существование, IMHO..

Все системы делают ето, когда не хватает памяти. Когда память есть - никто не делает.
Верить нельзя никому - даже себе. Мне - можно!
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Timberwolf wrote:Я, наверное, слишком кратко выразилась. Впрочем, детальные разъяснения не входили в мои планы. Да и сейчас не входят, но начальный импульс дать могу. Открытие файла как memory-mapped сводится к объявлению в системе этого файла уже находящемся в виртуальной памяти и swap-нутым на диск таким образом, что его swap точно совпадает с открываемым файлом на диске. ...

1.То есть система имеет как бы 2 копии - в свапе и обычный файл, так? Зачем?

2.Короче - свапнутым на диск он будет только если памяти физической не хватает.

3. Свап - ето и есть память - виртуальная. Если хватает физической, савп используется 0%.
Верить нельзя никому - даже себе. Мне - можно!
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Timberwolf wrote:
A. Fig Lee wrote:
Timberwolf wrote:
A. Fig Lee wrote:Вы наверное, когда копируете большой файл аллокируете много мемори - используйте маленький буффер и увидите.


Небольшое дополнение. Системы, копирующие файл через swap

read src from disk->write swap to disk->read swap from disk->write dest to disk

не имеют права на существование, IMHO..

Все системы делают ето, когда не хватает памяти. Когда память есть - никто не делает.


В системах, поддерживающих memory-mapped files (MMF) это может произойти только в случае неграмотности разработчика приложения (см. предыдущий постинг о MMF) - но это отдельный (клинический) случай.

1. Все популярные более менее поддерживают mmap.
2. Чудес на свете не бывает - если запрошено больше памяти чем есть физической - будет участвовать своп, независимо от того - мемори маппед файл или нет.
3. Предыдущий постинг посмотрел. Ничё не понял, кроме намеков что мне надо бы подучить ето дело.. :pain1:
Верить нельзя никому - даже себе. Мне - можно!
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

A. Fig Lee wrote:1.То есть система имеет как бы 2 копии - в свапе и обычный файл, так? Зачем?
2.Короче - свапнутым на диск он будет только если памяти физической не хватает.
3. Свап - ето и есть память - виртуальная. Если хватает физической, савп используется 0%.

1. Система имеет ровно одну копию - сам файл одновременно является файлом подкачки.
2. Любой файл открытый как memory mapped сам себе файл подкачки.
3. Для регионов виртуальной памяти, отведённых для memory mapped files, эти файлы и являются backing storage. Для других регионов виртуальной памяти, куда явно не отображаются файлы, в качестве backing storage используется swap.

Это совершенно обычное решение для систем, поддерживающих memory mapped файлы. Зачем занимать дополнительное место на стандартном swap, тратить IO и CPU на копирование с диска на диск, если любой файл уже сам по себе является местом на диске, куда можно отобразить регион виртуальной памяти? Преимущества - очевидны.
Cheers
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Post by f_evgeny »

Проведем эксперимент, включаем top и смотрим куда идет память. Затем включаем копирование большого количеста файлов и смотрим, что изменилось.
Память расходуется на:
- процессы
- буфера
- дисковый кэш
В исходном состоянии использование свопа - 0
Запускаем копирование. Растет дисковый кэш и немножко буфера. Появляется использвание свопа.
Т.е. при большом количестве дискового ввода/вывода память перераспределяется в пользу дискового кэша и из-за этого растет своп. Растет своп - растет количество page faults.
Система - Linux, kernrel 2.4.22
Или вы не об этом?
Дальше, все будет только хуже. Оптимист.
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

Timberwolf wrote:
tengiz wrote:
A. Fig Lee wrote:1.То есть система имеет как бы 2 копии - в свапе и обычный файл, так? Зачем?
2.Короче - свапнутым на диск он будет только если памяти физической не хватает.
3. Свап - ето и есть память - виртуальная. Если хватает физической, савп используется 0%.

1. Система имеет ровно одну копию - сам файл одновременно является файлом подкачки.
2. Любой файл открытый как memory mapped сам себе файл подкачки.
3. Для регионов виртуальной памяти, отведённых для memory mapped files, эти файлы и являются backing storage. Для других регионов виртуальной памяти, куда явно не отображаются файлы, в качестве backing storage используется swap.

Это совершенно обычное решение для систем, поддерживающих memory mapped файлы. Зачем занимать дополнительное место на стандартном swap, тратить IO и CPU на копирование с диска на диск, если любой файл уже сам по себе является местом на диске, куда можно отобразить регион виртуальной памяти? Преимущества - очевидны.


Tengiz, спасибо большое! Ваше разъяснение существенно понятней моего. :oops:

Ясен пень. Тем более что оно противоречит Вашему.
Верить нельзя никому - даже себе. Мне - можно!
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

f_evgeny wrote:Проведем эксперимент, включаем top и смотрим куда идет память. Затем включаем копирование большого количеста файлов и смотрим, что изменилось.
Память расходуется на:
- процессы
- буфера
- дисковый кэш
В исходном состоянии использование свопа - 0
Запускаем копирование. Растет дисковый кэш и немножко буфера. Появляется использвание свопа.
Т.е. при большом количестве дискового ввода/вывода память перераспределяется в пользу дискового кэша и из-за этого растет своп. Растет своп - растет количество page faults.
Система - Linux, kernrel 2.4.22
Или вы не об этом?

1. Примерно об етом. У меня на Линухе - 1 гиг.
Если сислог не растет - массовое копирование файлов (30 симултанеос процессов в течение многих минут с файлами < 1 мб) не приводят к использованию свопа.
Red Hat 7.2

Сколько у Вас было памяти свободной изначально и как большие файлы Вы используете?
Верить нельзя никому - даже себе. Мне - можно!
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Post by f_evgeny »

A. Fig Lee wrote:
f_evgeny wrote:Проведем эксперимент, включаем top и смотрим куда идет память. Затем включаем копирование большого количеста файлов и смотрим, что изменилось.
Память расходуется на:
- процессы
- буфера
- дисковый кэш
В исходном состоянии использование свопа - 0
Запускаем копирование. Растет дисковый кэш и немножко буфера. Появляется использвание свопа.
Т.е. при большом количестве дискового ввода/вывода память перераспределяется в пользу дискового кэша и из-за этого растет своп. Растет своп - растет количество page faults.
Система - Linux, kernrel 2.4.22
Или вы не об этом?

1. Примерно об етом. У меня на Линухе - 1 гиг.
Если сислог не растет - массовое копирование файлов (30 симултанеос процессов в течение многих минут с файлами < 1 мб) не приводят к использованию свопа.
Red Hat 7.2

Сколько у Вас было памяти свободной изначально и как большие файлы Вы используете?

Я специально взял WS где памяти поменьше, е ее использую как Xterminal. Памяти - 48 Mb, свободно было несколько мег, так как в таких условиях Линукс использует всю память, свободную - максимально под кэш.
Файлы - я недолго думая взял и сделал cp /usr /tmp
Дальше, все будет только хуже. Оптимист.
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

f_evgeny wrote:1. Примерно об етом. У меня на Линухе - 1 гиг.
Если сислог не растет - массовое копирование файлов (30 симултанеос процессов в течение многих минут с файлами < 1 мб) не приводят к использованию свопа.
Red Hat 7.2

Сколько у Вас было памяти свободной изначально и как большие файлы Вы используете?

Я специально взял WS где памяти поменьше, е ее использую как Xterminal. Памяти - 48 Mb, свободно было несколько мег, так как в таких условиях Линукс использует всю память, свободную - максимально под кэш.
Файлы - я недолго думая взял и сделал cp /usr /tmp[/quote]
Батенька, ето не годится!
Исходный пойнт был - при копировании файлов ВСЕГДА используется свап независимо от размеров свободной памяти, и как следствие количество пейдж фолтов не может указывать на недостаток физической памяти.
Мой пойнт - все до лампочки, независимо от операции, когда все можно поместить в физическую память, своп не будет использован. То есть количество пейдж фолтов прймао говорит о недостатке физической памяти.
А про операционки, копирующие через своп - я вооще молчу...

В Линухе, надо мегабайт 100 свободных физических иметь для експеримента - и запустите потом 3-4 процесса по копированию мегабайтного файла.
Верить нельзя никому - даже себе. Мне - можно!
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Post by f_evgeny »

A. Fig Lee wrote:
f_evgeny wrote:1. Примерно об етом. У меня на Линухе - 1 гиг.
Если сислог не растет - массовое копирование файлов (30 симултанеос процессов в течение многих минут с файлами < 1 мб) не приводят к использованию свопа.
Red Hat 7.2

Сколько у Вас было памяти свободной изначально и как большие файлы Вы используете?

Я специально взял WS где памяти поменьше, е ее использую как Xterminal. Памяти - 48 Mb, свободно было несколько мег, так как в таких условиях Линукс использует всю память, свободную - максимально под кэш.
Файлы - я недолго думая взял и сделал cp /usr /tmp

Батенька, ето не годится!
Исходный пойнт был - при копировании файлов ВСЕГДА используется свап независимо от размеров свободной памяти, и как следствие количество пейдж фолтов не может указывать на недостаток физической памяти.
Мой пойнт - все до лампочки, независимо от операции, когда все можно поместить в физическую память, своп не будет использован. То есть количество пейдж фолтов прймао говорит о недостатке физической памяти.
А про операционки, копирующие через своп - я вооще молчу...

В Линухе, надо мегабайт 100 свободных физических иметь для експеримента - и запустите потом 3-4 процесса по копированию мегабайтного файла.[/quote]
Пардон, неясно выяснился. Мой опыт показывает, что при копировании файлов может возрасти количество пейдж фолтов, но не непосредственно, а из-за увеличения количества памяти, занятого под буфера.
Дальше, все будет только хуже. Оптимист.

Return to “Вопросы и новости IT”