Чтобы стереть физическую память в меру своих возможностей (вы упомянули dd
, так что мы говорим о пользовательском решении!), Достаточно создать анонимное отображение того же размера, что и установленное ОЗУ 1 и прикоснуться к каждой странице, записав один байт (или любое другое количество) на один адрес внутри каждой страницы.
Это вызовет сбой страницы и вызовет операцию копирования при записи на нулевой странице для каждой страницы в вашем отображении, к которой вы прикоснулись, что приведет к фиксации уже обнуленной страницы или обнулению неиспользованной ненулевой физической страницы память - до тех пор, пока не останется ни одного, и в этот момент ваш процесс будет убит убийцей OOM (или получит SIGBUS
, в зависимости от того, какой из них ударит по вашему процессу первым).
Если вы хотите, чтобы это было несколько «чище» (то есть без OOM killer), вам нужно остановиться, прежде чем дотронуться до последней страницы, очевидно. Но в целом это все, что нужно.
Вы не сможете стереть все физические страницы, как это, но на самом деле не существует способа сделать это с пользовательским процессом (не без свопа и не в детерминированном путь).
Страницы, которые зафиксированы другими процессами, или страницы, принадлежащие ядру, не могут быть перезаписаны с этим подходом, по крайней мере, не надежно (так как нет подкачки, их нельзя заменить, хотя вы может повезет, и OOM убьет другие процессы вместо ваших).
Обычно вы не можете перезаписать физическую память на 100% надежным способом, если не замените работающее ядро.
Если вы хотите быть очень «тщательным», то единственный вариант - написать код, который можно найти, например, например. в memtest_x86, который вы вызываете из режима ядра, замените работающее ядро и перезапишите сырую физическую память «трудным путем», так же, как и memtest_x86.
Но тогда, если вы пойдете по ультра-паранойной дороге, не забудьте очистить память GPU, а также очистить кеш жесткого диска и память сетевой карты ...
1 На самом деле вам нужно будет создать отображение размера максимального размера фиксации - но вы заявили, что подкачки нет, поэтому подойдет «размер ОЗУ». Видя, как современные дисководы выполняют обширные выравнивания износа, перезапись подкачки в любом случае не очень поможет, но, по крайней мере, вы можете гарантировать, что попадете на все страницы ОЗУ, если зафиксировали максимальный размер фиксации.