Pull to refresh

Comments 34

Предлагаю автору пойти дальше, запустить виртуалбокс в виртуалбоксе, который в свою очередь работает в другом виртуалбоксе, который… ну вы поняли, и где-то там в глубине мемтест.
А автор, однако, пишет: «или покрайней мере улыбнётся». Видимо улыбками тут и не пахнет :)
Забавный метод, но ИМХО 4-8-портовый KVM надежнее. Они вменяемых денег стоят, если без наворотов.
Типа D-LINK DKVM-4K.
Не спорю, так действительно надежнее. Но когда компьютеров 50, а в очереди еще 100, и проверить их надо быстро, приходится балансировать между надежностью и скоростью. В таком случае, простенький KVM сильно погоды не сделает.
Поделитесь: каков смысл такой проверки, если Вы сами признаёте, что проверяете только часть памяти (причём ещё и не знаете какую)?
Да, Ваша проверка потенциально может выявить какие-то проблемы, но она абсолютно не гарантирует, что вся память исправна.
Зачем тогда проверять?
Лучше проверять хоть что-то, чем вообще не проверять. Какой-то процент брака снижается, начальство довольно.
Я не использую этот метод как единственно основной. Просто результаты мне показались интересными, и я решил выложить способ на суд общественности.
ХМ… ИМХО тогда проблема скорее в менеджменте и програмно она точно не решается :) Да и аппаратно не все так просто :)
Спасибо, такие штуки очень даже пригодились бы :)
Никто не может гарантировать, что выделенная гипервизору память будет последовательной и вообще хотябы физической, а не виртуальной. Потому если тест найдет ошибку, то она 100% существует, но если не найдет, то это ничего не значит.
Естественно, это для любого случая подходит, «нет ошибок в тесте — не значит что их нет вообще».
Зато вот реальные ошибки (которые действительно имеются) — будут найдены.
Ну а память ВМ в свопе… заодно протестим и своп т.е. хард! (смайл)
Да, гарантий никаких. Поэтому просто набирал статистику. Пока способ себя оправдывает :)
Если отключить своп, то будет только физическая
> отключить своп
отключить можно человека от аппарата жизнеобеспечения, если мозг уже мертв (и религия не против). Еще отключают неплательщиков от интернета.
А то, что Вы написали, это «поломать механизм вирутализации памяти ОС». Этого не стоит делать решительно никогда, особенно на linux, как у автора.
Этого не стоит делать решительно никогда, особенно на linux, как у автора.

Почему?
Для начала мини-ликбез.

В современных ОС виртуальная память позволяет запрашивать для нужд программы буквально любой объем, не задумываясь, обеспечен он физической RAM или как-либо еще. Я опущу разницу между commited и reserved памятью, об этом читайте статьи. Часто бывает, что объем используемой commited виртуальной памяти запущенных программ превышает объем ОЗУ в разы. Для примера, вот скрин top на Mac OS X:
картинка


Такая память backed by swap, т.е. гарантированно, что программа получит нужный объем физической памяти, когда ей это будет надо. При отсутствии swap/paging, программам запрашиваемый объем просто не будет выдаваться и резервироваться. Рано или поздно начнутся ошибки и краши:



Или даже так:
картинка


Конечно, если переделать Windows в однозадачную среду (запускать без Explorer или выполнять одну программу одновременно, н-р. только одна игра), то можно самому отлично выполнять работу менеджера памяти и следить за ее потреблением. :) Например, в Windows Embedded paging file по-умолчанию выключен, правда, это инструмент и не для обычного пользователя. Такой режим работы называется Monoprogramming (в противоположеность Multiprogramming = многозадачности).

В Linux, кроме всего прочего, swap раздел используется swsusp для hibernate.

Хорошо виртуальная память описана в статье Марка Руссиновича:
blogs.technet.com/b/markrussinovich/archive/2008/11/17/3155406.aspx

Если хочется детальнее, то ищем
A. Tanenbaum, Modern Operating Systems 3 e, 0-13-6006639

Но на самом деле, есть еще одна сторона медали, о которой не задумываются апологеты отключения свопа. При частом использовании десятками программ (а в многозадачных ОС происходит именно так), физическая память становится все больше похожа на решето — сотня страниц принадлежит одной программе, сотня другой, потом свободный блок и так далее. В масштабах программы это лишь проблема программы, в масштабах системы это приводит к потерям производительности. При высокой фрагментации памяти, менеджер может попробовать решить эту проблему:
Once free physical memory becomes fragmented, an operating system can consolidate free memory into a single, unfragmented block by moving code and data to new physical addresses (Figure 2). In this case, the three blocks of free memory were consolidated into one larger block by moving system memory upward and application 1 downward in physical memory.

В зависимости от ситуации, память становится либо все более фрагментированной, либо происходит постоянная ее дефрагментация, что тоже и не дешево. Как раз в этой задаче на помощь приходит свопинг — сбрасывание памяти фоновых программ в своп:
When not needed by the processor, code and data can be saved temporarily on a hard disk (or other device with abundant storage). This frees physical memory for use by other code and data that the processor needs to access. The process of temporarily transferring code and data to and from the hard disk to make room in physical memory is called swapping.

За счет свопинга происходит реорганизация памяти и не используемые, но запущенные приложения не занимают физическую ОЗУ. Это позволяет бороться с фрагментацией и абстрактно можно сказать, что если компьютер некоторое время не использовать, то физическая память будет полностью дефрагментирована. На деле это не всегда так, но без использования свопа сходный уровень дефрагментации памяти достигается только выключением :)
Опережая стандартный ответ «все это фигня, у меня 16гб памяти без свопа и ничего не тормозит» я скажу, что ремни безопасности тоже нужны один раз из тысячи поездок, но пренебрегать ими как минимум глупо.

(последние две цитаты из technet.microsoft.com/en-us/library/cc767886.aspx)
В современных ОС виртуальная память позволяет запрашивать для нужд программы буквально любой объем, не задумываясь, обеспечен он физической RAM или как-либо еще.

Запросить-то она запросит, но дадут ей не более, чем объем виртуальной памяти, которая ограничивается ram+swap

При отсутствии swap/paging, программам запрашиваемый объем просто не будет выдаваться и резервироваться.

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

В целом — не убедили. При скорости работы RAM любая дефрагментация будет влиять на работу очень и очень мало. Гораздо быстрее, чем сбрасывание в своп и обратно. Так что Америку вы не открыли — своп был нужен, когда оператива была дорогая и ее было мало. При нынешней стоимости, проще взять на 2-4Гб больше «с запасом», чем держать своп.
Запросить-то она запросит, но дадут ей не более, чем объем виртуальной памяти, которая ограничивается ram+swap

Именно для этого в Windows есть пункт «System managed page file size». В других ОС выделяют 1.5-2x RAM под swap раздел, иногда и больше.
При скорости работы RAM любая дефрагментация будет влиять на работу очень и очень мало. Гораздо быстрее, чем сбрасывание в своп и обратно.

Речь не о том, что сбрасывание в своп медленее, это и так ясно. Речь о том, что есть механизм, придуманный для решения многих проблем (в т.ч. и фрагментации) и с ним система работает быстрее, чем без него.
Для примера, ознакомьтесь с отличной статьей тов. amirul: habrahabr.ru/post/107607/

В целом — не убедили

Я бы удивился, если бы было так. Всего лишь озвучивал свое мнение, основанное на общедоступных исследованиях и документациях.
Именно для этого в Windows есть пункт «System managed page file size». В других ОС выделяют 1.5-2x RAM под swap раздел, иногда и больше

И тем не менее. Не «сколько попросит», а сколько есть

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

Образование больших сплошных областей доступной памяти — естественный побочный эффект операций выделения и последующего освобождения значительного пространства виртуальной памяти. Однако, поскольку виртуальная память скрывает физическую память от процессов, последние не получают прямой выгоды от работы с виртуальной памятью, которой соответствует непрерывное пространство физической памяти. По мере изменения и роста рабочих наборов процессов отображение их виртуальной памяти на физическую неизбежно фрагментируется, несмотря на наличие непрерывного пространства памяти. (с)
Автора подсказать, или сами найдете?
> И тем не менее. Не «сколько попросит», а сколько есть
если Windows и стоит авто режим, то будет выделять столько, насколько хватит винчестера.

> Автора подсказать, или сами найдете?
вырвано из контекста, где Марк объяснял, почему нельзя доверять подобную задачу сторонней программе, оставляя это ОС, одним из инструментов которой является, как ни странно, пейджинг.

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

p.s. такой совет действительно существует и в описанной сферически-вакуумной ситуации помогает.
если Windows и стоит авто режим, то будет выделять столько, насколько хватит винчестера.

А в юниксах/линуксах размер свопа фиксированный. Да и для винды, насколько я знаю, рекомендуют все же устанавливать ограничения на размер свопа.

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

А виртуальная адресация — это тоже «из контекста»? Или вот это:

Непрерывная область памяти повышает быстродействие в одном случае: если в целях увеличения скорости кэш-памяти процессора Memory Manager использует механизм page coloring для назначения страниц, выделяемых процессам из списков свободных или обнуленных страниц.

Тоже «из контекста» и не о том?
> для винды, насколько я знаю, рекомендуют все же устанавливать ограничения на размер свопа.
начнем с того, что для винды рекомендуют его не отключать никогда и оставлять System managed size.

> А виртуальная адресация — это тоже «из контекста»? Или вот это:
Виртуальная адресация это сложнейший механизм, который в любом случае выигрывает, когда для каждой страницы из 4гб выделенной памяти не надо хранить отдельный адрес 4096-байтной страницы. Простой подсчет говорит, что при максимальной фрагментации таблица преобразования (Page address table по Таннербауму) будет иметь миллион элементов.

Непрерывная область памяти повышает быстродействие в одном случае: если в целях увеличения скорости кэш-памяти процессора Memory Manager использует механизм page coloring для назначения страниц, выделяемых процессам из списков свободных или обнуленных страниц.


Тоже «из контекста» и не о том?

Конечно, ведь именно это предложение говорит о том, что Memory Manager ОС как раз имеет возможность получать бенефит от последовательного расположения страниц, пусть и польза этого не сказочно велика. А «из контекста» как раз потому, что за этим следует предложение с пропущенным вами основным выводом:
Однако негативные последствия удаления из памяти ценных программ и данных значительно перевешивают выигрыш, который можно извлечь из непрерывного пространства физической памяти.

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

Уже лет пять, с тех пор, как объем памяти на домашней машине перевалил за 4 гига, ни своп, ни файл подкачки не юзаю совсем.
УМВР ЧЯДНТ?
Вероятно смотрите порно и не используете единовременно несколько «не офисных» приложений и уж тем более особо прожорливые java/mongo/etc
VirtualBox +ramdisk = через неделю примерно имеем 90-95% занятой памяти, в основном — кэш.
Извиняюсь, не говорю на зулусском, потому половину фразы не понял. Ответ читайте выше.
Это нисколько не эффективнее выделения большого куска памяти и тестирования в нем, без участия виртуальной машины, которая отъедает еще ≈ 100 мегабайт памяти.
проще написать драйвер, который последовательно мапит себе куски памяти и тестирует их…
Автор «подлый извращенец»(с)!
Если нет KVM переключателя, есть задача контролировать memtest на нескольких машинах и есть желание поэкспериментировать: можно перенаправить вывод memtest на COM-порт
А проверять память в виртуальной машине…
P.S. А сегодня точно не 1-е апреля?
У меня memtester под linux, кстати находил ошибки (за 5 минут) которые memtest86 не находит (за целый день).
Ошибки были реальные, вызывали зависания.

Только потом выяснилось что они были связаны не с самой памятью а со связкой память-матплата (настройки напряжений итд) и проявлялись сбоями в памяти. Характерная черта таких ошибок, если найдены memtest86 — разные адреса всё время.
Однако-же… присоединяюсь к мнению, что такое тестирование памяти по меньшей мере не надёжно. Касабельно тестирования десятков машин одновременно, не понятно в чем же приимущество? Настройте phe/флешку/cd-диск так чтобы мемтест загружался дефолтом, возьмите 1 патчкорд/флешку/cd-lbcr и 1 монитор (даже клавиатура не нужна). Запустите по очереди мемтест на всех машинах (после запуска моник и загрузочное устройство можно безболезненно выдернуть) и идите на пол часа пить чай. Не забудьте открыть окно, иначе через 10 минут эта свора натопит помещение как в сауне. Потом идёте мимо рядов компьютеров с vga шнуром, смотрите результаты.
>>в чем же приимущество?
Преимущество по времени (не нужно обходить каждый компьютер отдельно), возможность оперативного контроля (не нужно обходить каждый компьютер отдельно), возможность встроить в пакет с другими тестами. Повторюсь, компьютеров не просто несколько десятков, их может быть очень много, и подготовлены они должны быть «на вчера».

Для нескольких же, да, подходим индивидуально, и качетсво тестирования заметно выше.
Sign up to leave a comment.

Articles