Page fault

User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

idle0 wrote:Для всех неверующих :)

Запустите на Solaris "cp /var/tmp/largefile1 /var/tmp/largefile2"
и в это же время "sar -p 1 1000" и "vmstat -p 1"

В "sar" смотрите на vflt/s, а в "vmstat" на fpi/fpo (file system page-ins,
file system page-outs)

А где гарантия что cp не пытается аллокировать память для буффера, чтобы щитать данные из файла, и ее не хватает? У кого сурс есть?
2. Почему именно большой файл? попытайтесь маленький скопировать.
Верить нельзя никому - даже себе. Мне - можно!
User avatar
Dmitry67
Уже с Приветом
Posts: 28294
Joined: 29 Aug 2000 09:01
Location: SPB --> Gloucester, MA, US --> SPB --> Paris

Post by Dmitry67 »

tengiz очень правильно написал и опередели меня... я хотел встрять с тем 'а как же read ahead'

Кроме того операция открытия такого файла очень дорогостоящая.

Тут вы конечно про юниксы говорите но утверждение что "если памяти хватает то page faults=0" в общем случае неверно даже без memory mapped files. В той же NT если у вас до X...рена памяти они идут сотнями... А все потому что она жмет working set процессов, будь она неладна.

Как будто люди специально старались сделать систему как можно менее realtime. Чтобы если не работал час на компьютере то чтобы он как бы 'просыпался' подольше.
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
User avatar
idle0
Уже с Приветом
Posts: 2846
Joined: 28 Jun 2000 09:01
Location: Milwaukee, WI

Post by idle0 »

Небольшое дополнение: при копировании в Solaris файлов через "cp" деиствительно происходит много page faults, т.к. при этом используются memory mapped files

Если копировать тот-же фаил при помощи "dd" - page faults нет...
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:Небольшое дополнение: при копировании в Соларис файлов через "цп" деиствительно происходит много паге фаултс, т.к. при этом используются меморы маппед филес

Если копировать тот-же фаил при помощи "дд" - паге фаултс нет...

Ага, посмотрел. Точно, при использовании "cp" используются мемори маппед файлс и на Линухе и на ФриБСД, скорее всего почти везде.
2. Тут ситуация такая - приводит ли использование мемори маппед файлов к увеличению щетчика. Согласно многочисленным источникам, фолты всегда возникают при использовании мемори маппед файлов независимо от размера - как минимум при первом обращении. Значит, для чистоты експеримента достаточно копировать маленький файл в цикле - фолты все равно будут, если они регистрируются. Из Солярис Интерналс следует, что при обычной нехватке виртуальной памяти ММУ генерит пейдж фолт и ета пейдж загружается через драйвер. При мемори маппед файлс ММУ ничего не генерит - все вроде бы происходит черз прямой вызов етого драйвера, соответственно, надо полагать щетчик не увеличивается.
3. Почему при експериментах в етом случае растет количество фолтов?
Надо бы убедится что фолты происходят именно изза процесса копирования, а не как побочный продукт. Ведь если мы копируем большой файл, то часть физической мемори будет занята под мемори маппед и другим достанется меньше - они то и могут произвести пейдж фолты. С другой стороны, если мемори маппед файл таки регистрирует фалты - достаточно открыть штук 5 процессов по копированию маленьких файлов. Хотя, анивей, загружатся будет какоето количество пейджей независимо от сколь мал размер файла.
В общем, как бы убедится что именно мемори маппед файлы производят пейдж фолты, а не тот у кого они память отобрали.
4. Мои експерименты на Фре - пейдж фолт такой же как и раньше, несмотря на копирование.
Верить нельзя никому - даже себе. Мне - можно!
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

ну что - ни у кого больше мыслей нет?
Верить нельзя никому - даже себе. Мне - можно!
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

A. Fig Lee wrote:ну что - ни у кого больше мыслей нет?

Мысли-то есть, да не о том :) - к чему тут гадать или размышлять если можно в исходники посмотреть, рас уж они доступны и если тема интересна? Операционные системы же в конце концов человеческие творения, а не малоизученные явления природы типа шаровых молний. Исходники Солярис уже вроде открыты, не говоря о FreeBSD и Linux.

P.S. Дисклеймер: мне - лень. Поэтому лезть в исходники мне не предалагать.
Cheers
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

tengiz wrote:
A. Fig Lee wrote:ну что - ни у кого больше мыслей нет?

Мысли-то есть, да не о том :) - к чему тут гадать или размышлять если можно в исходники посмотреть, рас уж они доступны и если тема интересна? Операционные системы же в конце концов человеческие творения, а не малоизученные явления природы типа шаровых молний. Исходники Солярис уже вроде открыты, не говоря о FreeBSD и Linux.

P.S. Дисклеймер: мне - лень. Поэтому лезть в исходники мне не предалагать.

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

Post by idle0 »

tengiz wrote:
A. Fig Lee wrote:ну что - ни у кого больше мыслей нет?

Мысли-то есть, да не о том :) - к чему тут гадать или размышлять если можно в исходники посмотреть, рас уж они доступны и если тема интересна? Операционные системы же в конце концов человеческие творения, а не малоизученные явления природы типа шаровых молний. Исходники Солярис уже вроде открыты, не говоря о FreeBSD и Linux.

P.S. Дисклеймер: мне - лень. Поэтому лезть в исходники мне не предалагать.


Can you send me Solaris source code?
moria# show running-config
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Post by tengiz »

idle0 wrote:Can you send me Solaris source code?

Nope, sorry. But these guys (http://wwws.sun.com/software/solaris/source) can, provided that you qualify.
Cheers
User avatar
olg2002
Уже с Приветом
Posts: 990
Joined: 27 Mar 2002 10:01
Location: Palo Alto, CA

Post by olg2002 »

A. Fig Lee wrote:2. Тут ситуация такая - приводит ли использование мемори маппед файлов к увеличению щетчика. Согласно многочисленным источникам, фолты всегда возникают при использовании мемори маппед файлов независимо от размера - как минимум при первом обращении. Значит, для чистоты експеримента достаточно копировать маленький файл в цикле - фолты все равно будут, если они регистрируются. Из Солярис Интерналс следует, что при обычной нехватке виртуальной памяти ММУ генерит пейдж фолт и ета пейдж загружается через драйвер. При мемори маппед файлс ММУ ничего не генерит - все вроде бы происходит черз прямой вызов етого драйвера, соответственно, надо полагать щетчик не увеличивается.


Полная каша. Page fault возникает, когда при обращении к виртуальному адресу в таблице трансляции адресов virtal-to-physical для текущего адресного пространства остутствует информация о физической странице. Поскольку таблица эта своя для каждого адресного пространства, это не
означает, что нужной страницы нет в физической памяти. Если она присутствует в памяти и нужно только установить новый map - это minor page fault. В ином случае ее действительно нужно закачать с диска (swap or regular file) и это major page fault. Когда cp копирует файл, она действительно mmap его целиком в адресное пространство (если файл не очень большой), но затем также целиком пишет его в файл одним вызовом write. Таким образом, никакого обращения к страницам файла не происходит и никакие page faults в cp не генерятся. Они возникают ... в ядре(!) во время исполнения системного вызова write. Если копировать маленький файл в цикле, практически все page faults будут minor, поскольку файл будучи один раз закачан в физическую память будет там еще некоторое время оставаться после завершения одного cp и его страницы будут reclaimed следующим cp (при освобождении страницы она необязательно сразу же удаляется из памяти).
Короче, большой rate of page faults на Solaris не обязательно означает swapping и нехватку физической памяти.
User avatar
A. Fig Lee
Уже с Приветом
Posts: 12072
Joined: 17 Nov 2002 03:41
Location: английская колония

Post by A. Fig Lee »

olg2002 wrote:
A. Fig Lee wrote:2. Тут ситуация такая - приводит ли использование мемори маппед файлов к увеличению щетчика. Согласно многочисленным источникам, фолты всегда возникают при использовании мемори маппед файлов независимо от размера - как минимум при первом обращении. Значит, для чистоты експеримента достаточно копировать маленький файл в цикле - фолты все равно будут, если они регистрируются. Из Солярис Интерналс следует, что при обычной нехватке виртуальной памяти ММУ генерит пейдж фолт и ета пейдж загружается через драйвер. При мемори маппед файлс ММУ ничего не генерит - все вроде бы происходит черз прямой вызов етого драйвера, соответственно, надо полагать щетчик не увеличивается.


Полная каша. Page fault возникает, когда при обращении к виртуальному адресу в таблице трансляции адресов virtal-to-physical для текущего адресного пространства остутствует информация о физической странице. Поскольку таблица эта своя для каждого адресного пространства, это не
означает, что нужной страницы нет в физической памяти. Если она присутствует в памяти и нужно только установить новый map - это minor page fault. В ином случае ее действительно нужно закачать с диска (swap or regular file) и это major page fault. Когда cp копирует файл, она действительно mmap его целиком в адресное пространство (если файл не очень большой), но затем также целиком пишет его в файл одним вызовом write. Таким образом, никакого обращения к страницам файла не происходит и никакие page faults в cp не генерятся. Они возникают ... в ядре(!) во время исполнения системного вызова write. Если копировать маленький файл в цикле, практически все page faults будут minor, поскольку файл будучи один раз закачан в физическую память будет там еще некоторое время оставаться после завершения одного cp и его страницы будут reclaimed следующим cp (при освобождении страницы она необязательно сразу же удаляется из памяти).
Короче, большой rate of page faults на Solaris не обязательно означает swapping и нехватку физической памяти.


У кого каша?
Я же привел уже ссылку из книжки Соалрис интерналс - ммап ето одно, а врите и реад - другое.
2. При ммап возникают фолты - читаем книжку - как минимум 1 раз при загрузке в память.
И при копировании файл мапируется в адрессное пространство независимо от того маленький он или большой - загружатся будет не весь сразу, ето другое дело.
3. По поводу циклического копирования файлов - да Вы правы, будут майнор. Не пойдет для експеримента.
Верить нельзя никому - даже себе. Мне - можно!

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