Что такое анонимные страницы в памяти?

Используемые устройства:

  • iMac Pro 2017 с 10.14.5 Mojave (в качестве шлюза)
  • Android S10+ под управлением Android 9
  • iPhone XS
  • iPad Pro 11 дюймов

В моей домашней локальной сети мой iMac подключен к en0 со статическим IP-адресом 192.168.1.100. Я могу просматривать Интернет, но у меня есть ограничения из-за брандмауэра моего интернет-провайдера. Моя цель — запустить программное обеспечение на iMac, которое подключается к VPN. Как только это будет сделано, я буду использовать iMac в качестве шлюза, чтобы другие устройства в моей локальной сети могли проходить через него и использовать VPN-соединение.

Важно отметить, что VPN подключается с использованием протоколов OpenVPN XOR, которые доступны только при использовании специального программного обеспечения, предоставляемого провайдером VPN, поэтому я не могу загружать программное обеспечение VPN непосредственно на такие устройства, как телефоны или iPad.

Я очень близок к тому, чтобы закончить эту работу, я просто где-то пропустил один шаг. Вот мои выводы на данный момент:

A. Для проверки я оставляю VPN отключенной, чтобы iMac мог регулярно просматривать Интернет.

А1. Я изменяю настройки Wi-Fi на своем телефоне, чтобы использовать статический IP-адрес 192.168.1.84 с пользовательским шлюзом 192.168.1.100 (iMac ). Я подключаюсь к WLAN как обычно, но просмотр не работает.

А2. На iMac я запускаю sudo sysctl -w net.inet.ip.forwarding=1, чтобы включить переадресацию портов, и теперь я успешно просматриваю Интернет на своем телефоне через iMac.

Заключение :телефон -> iMac -> интернет работает

B. Теперь попробуем еще раз, но с подключенным VPN:

Б1. iMac успешно подключается к VPN. Очевидно, что весь интернет-браузинг теперь проходит через utun1 . Я могу увидеть это, запустив nettop или netstat -rn.

Б2. Телефон по-прежнему подключен к WLAN, используя iMac в качестве шлюза. Но так как VPN подключился, просмотр больше не работает.

Б3. Я добавляю nat on utun1 from 192.168.1.0/24 to any -> (utun1)в /private/etc/pf.conf , а затем запускаю sudo pfctl -d, затем sudo pfctl -F all, затемsudo pfctl -f /etc/pf.conf -e... , затем запускаю sudo pfctl -s nat, и все появляется чтобы правильно загрузился. На данный момент я успешно просматриваю VPN, разблокированный Интернет.

**ПРИМЕЧАНИЕ. *" *При добавлении в pf.conf убедитесь, что вставка выполняется в правильном месте файла, потому что, если код находится в неправильном месте, он не запустится.

Заключение :телефон -> iMac -> VPN -> разблокированный интернет работает

Интересно то, что я пробовал различные комбинации одних и тех же шагов, упомянутых выше, в течение 72 часов, и у меня не было большого успеха. Только теперь, после того, как я определил процесс и выполнил его шаг -за шагом -, он работает. Даже после перезагрузки я выполняю шаги по порядку, и это кажется надежным процессом.

Следующим шагом будет создание сценария, который сможет автоматизировать процесс одним щелчком значка -, возможно, даже запускать его при запуске iMac.

Будет восстановлено при любых обновлениях.

0
11.11.2021, 04:50
1 ответ

Из справочных страницproc(5):

AnonPages %lu (since Linux 2.6.18)
       Non-file backed pages mapped into user-space page tables.

Способ, которым процесс отображает память в Linux, обычно использует системный вызов mmap(2), который "сопоставляет файлы или устройства в памяти". Память может поддерживаться реальным файлом на диске, поэтому вы можете обращаться с файлом, как если бы это был обычный блок памяти.

Однако вы также можете выделить пустой раздел памяти, не поддерживаемый каким-либо файлом. Эти страницы памяти называются «анонимными». Со страницы руководстваmmap:

MAP_ANONYMOUS
       The mapping is not backed by any file; its contents are initialized to zero.

Если вы когда-либо программировали на C, вы, вероятно, знакомы с malloc(3)и использовали его для выделения динамической памяти. В Linux, в большинстве случаев, под капотом mallocфактически вызывается mmapдля выделения анонимных страниц памяти.

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

Обратите внимание, что выделение анонимных страниц с использованием mmapили mallocне обязательно будет немедленно отражено с помощью AnonPages; Когда вы выделяете динамическую память, вы просто получаете виртуальное адресное пространство, которое вы можете использовать, но страницы памяти на самом деле не «инстанцируются» и отображаются в пользовательское -пространство памяти процесса до тех пор, пока он не начнет их использовать (запись или читать в/из памяти ). Только после этого эти страницы памяти загружаются в ОЗУ и учитываются AnonPages.

Проще говоря, AnonPagesпредставляет собой первое, что, вероятно, приходит вам на ум по умолчанию, когда вы думаете о «памяти» и «ОЗУ». Просто «обычные» страницы памяти, динамически выделяемые процессам по их запросу и используемые этими процессами. Там особо "исправлять" нечего.Ожидается и довольно часто AnonPagesоказывается «лучшим нападающим».

Вы должны просто искать процессы, которые занимают больше всего памяти (, например, используяtop)и действовать соответственно. Возможно, есть процесс, потребляющий большой объем памяти (RSS ), или много процессов, которые заполняют память.

2
11.11.2021, 07:56

Теги

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