Changes
Translation components API.
See the Weblate's Web API documentation for detailed description of the API.
GET /api/components/documentation/articlesvm-design_index/changes/?format=api&page=29
{ "count": 1495, "next": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/changes/?format=api&page=30", "previous": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/changes/?format=api&page=28", "results": [ { "unit": "https://translate-dev.freebsd.org/api/units/1811481/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.802828Z", "action": 9, "target": "При первой записи в страницу после выполнения этой операции, в B создается новая страница, содержимое которой берется из A. Все страницы в B могут сбрасываться и считываться из устройства подкачки. Когда программа ветвится, VM-система создает два новых уровня объектов-C1 для порождающего процесса и C2 для порожденного-они располагаются поверх B:", "id": 852311, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852311/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811483/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.814508Z", "action": 9, "target": "В этом случае, допустим, что страница в B была изменена начальным родительским процессом. В процессе возникнет ситуация копирования при записи и страница скопируется в C1, при этом исходная страница останется в B нетронутой. Теперь допустим, что та же самая страница в B изменяется порожденным процессом. В процессе возникнет ситуация копирования при записи и страница скопируется в C2. Исходная страница в B теперь полностью скрыта, так как и C1, и C2 имеют копии, а B теоретически может быть уничтожена, если она не представляет собой \"реального\" файла). Однако такую оптимизацию не так уж просто осуществить, потому что она делается на уровне мелких единиц. Во FreeBSD такая оптимизация не выполняется. Теперь положим (а это часто случается), что порожденный процесс выполняет вызов `exec()`. Его текущее адресное пространство обычно заменяется новым адресным пространством, представляющим новый файл. В этом случае уровень C2 уничтожается:", "id": 852312, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852312/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811485/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.825725Z", "action": 9, "target": "В этом случае количество потомков B становится равным одному и все обращения к B теперь выполняются через C1. Это означает, что B и C1 могут быть объединены. Все страницы в B, которые также существуют и в C1, во время объединения из B удаляются. Таким образом, хотя оптимизация на предыдущем шаге может не делаться, мы можем восстановить мертвые страницы при окончании работы процессов или при вызове `exec()`.", "id": 852313, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852313/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811486/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.836991Z", "action": 9, "target": "Такая модель создает некоторое количество потенциальных проблем. Первая, с которой вы можете столкнуться, заключается в сравнительно большой последовательности уровней объектов VM, на сканирование которых тратится время и память. Большое количество уровней может возникнуть, когда процессы разветвляются, а затем разветвляются еще раз (как порожденные, так и порождающие). Вторая проблема заключается в том, что вы можете столкнуться с мертвыми, недоступными страницами глубоко в иерархии объектов VM. В нашем последнем примере если как родитель, так и потомок изменяют одну и ту же страницу, они оба получают собственные копии страницы, а исходная страница в B становится никому не доступной. такая страница в B может быть высвобождена.", "id": 852314, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852314/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811487/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.852207Z", "action": 9, "target": "FreeBSD решает проблему с глубиной вложенности с помощью приема оптимизации, который называется \"All Shadowed Case\". Этот случай возникает, если в C1 либо C2 возникает столько случаев копирования страниц при записи, что они полностью закрывают все страницы в B. Допустим, что такое произошло в C1. C1 может теперь полностью заменить B, так что вместо цепочек C1->B->A и C2->B->A мы теперь имеем цепочки C1->A и C2->B->A. Но посмотрите, что получается-теперь B имеет только одну ссылку (C2), так что мы можем объединить B и C2. В конечном итоге B будет полностью удален и мы имеем цепочки C1->A и C2->A. Часто B будет содержать большое количество страниц, и ни C1, ни C2 не смогут полностью их заменить. Если мы снова породим процесс и создадим набор уровней D, при этом, однако, более вероятно, что один из уровней D постепенно сможет полностью заместить гораздо меньший набор данных, представленный C1 и C2. Та же самая оптимизация будет работать в любой точке графа и главным результатом этого является то, что даже на сильно загруженной машине с множеством порождаемых процессов стеки объектов VM не часто бывают глубже четырех уровней. Это так как для порождающего, так и для порожденного процессов, и остается в силе как в случае, когда ветвление делает родитель, так и в случае, когда ветвление выполняет потомок.", "id": 852315, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852315/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811488/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.863246Z", "action": 9, "target": "Проблема с мертвой страницей все еще имеет место, когда C1 или C2 не полностью перекрывают B. Из-за других применяемых нами методов оптимизации этот случай не представляет большой проблемы и мы просто позволяем таким страницам существовать. Если система испытывает нехватку оперативной памяти, она выполняет их выгрузку в область подкачки, что занимает некоторое пространство в области подкачки, но это все.", "id": 852316, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852316/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811489/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.874625Z", "action": 9, "target": "Преимущество модели VM-объектов заключается в очень быстром выполнении функции `fork()`, так как при этом не выполняется реального копирования данных. Минусом этого подхода является то, что вы можете построить сравнительно сложную иерархию объектов VM, которая несколько замедляет обработку ситуаций отсутствия страниц памяти, и к тому же тратится память на управление структурами объектов VM. Приемы оптимизации, применяемые во FreeBSD, позволяют снизить значимость этих проблем до степени, когда их можно без особых потерь игнорировать.", "id": 852317, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852317/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811490/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.885215Z", "action": 9, "target": "Уровни области подкачки", "id": 852318, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852318/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811491/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.897313Z", "action": 9, "target": "Страницы с собственными данными первоначально являются страницами, копируемыми при записи или заполняемыми нулями. Когда выполняется изменение, и, соответственно, копирование, начальное хранилище объекта (обычно файл) не может больше использоваться для хранения копии страницы, когда VM-системе нужно использовать ее повторно для других целей. В этот момент на помощь приходит область подкачки. Область подкачки выделяется для организации хранилища памяти, которая иначе не может быть доступна. FreeBSD создает структуру управления подкачкой для объекта VM, только когда это действительно нужно. Однако структура управления подкачкой исторически имела некоторые проблемы:", "id": 852319, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852319/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811492/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.910211Z", "action": 9, "target": "Во FreeBSD 3.X в структуре управления областью подкачки предварительно выделяется массив, который представляет целый объект, требующий хранения в области подкачки-даже если только несколько страниц этого объекта хранятся в области подкачки. Это создает проблему фрагментации памяти ядра в случае, когда в память отображаются большие объекты или когда ветвятся процессы, занимающие большой объем памяти при работе (RSS).", "id": 852320, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852320/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811493/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.924274Z", "action": 9, "target": "Также для отслеживания памяти подкачки в памяти ядра поддерживается \"список дыр\", и он также несколько фрагментирован. Так как \"список дыр\" является последовательным списком, то производительность при распределении и высвобождении памяти в области подкачки неоптимально и ее сложность зависит от количества страниц как O(n).", "id": 852321, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852321/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811494/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.941266Z", "action": 9, "target": "Также в процессе высвобождения памяти в области подкачки требуется выделение памяти в ядре, и это приводит к проблемам блокировки при недостатке памяти.", "id": 852322, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852322/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811495/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.954409Z", "action": 9, "target": "Проблема еще более обостряется из-за дыр, создаваемых по чередующемуся алгоритму.", "id": 852323, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852323/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811496/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.967911Z", "action": 9, "target": "Кроме того, список распределения блоков в области подкачки легко оказывается фрагментированным, что приводит к распределению непоследовательных областей.", "id": 852324, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852324/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811497/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:26.984343Z", "action": 9, "target": "Память ядра также должна распределяться по ходу работы для дополнительных структур по управлению областью подкачки при выгрузке страниц памяти в эту область.", "id": 852325, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852325/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811498/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.000276Z", "action": 9, "target": "Очевидно, что мест для усовершенствований предостаточно. Во FreeBSD 4.X подсистема управления областью подкачки была полностью переписана мною:", "id": 852326, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852326/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811499/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.016106Z", "action": 9, "target": "Структуры управления областью подкачки распределяются при помощи хэш-таблицы, а не через линейный массив, что дает им фиксированный размер при распределении и работу с гораздо меньшими структурами.", "id": 852327, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852327/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811500/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.031334Z", "action": 9, "target": "Вместо того, чтобы использовать однонаправленный связный список для отслеживания выделения пространства в области подкачки, теперь используется побитовая карта блоков области подкачки, выполненная в основном в виде древовидной структуры с информацией о свободном пространстве, находящейся в узлах структур. Это приводит к тому, что выделение и высвобождение памяти в области подкачки становится операцией сложности O(1).", "id": 852328, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852328/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811501/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.043920Z", "action": 9, "target": "Все дерево также распределяется заранее для того, чтобы избежать распределения памяти ядра во время операций с областью подкачки при критически малом объеме свободной памяти. В конце концов, система обращается к области подкачки при нехватке памяти, так что мы должны избежать распределения памяти ядра в такие моменты для избежания потенциальных блокировок.", "id": 852329, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852329/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811502/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.056794Z", "action": 9, "target": "Для уменьшения фрагментации дерево может распределять большой последовательный кусок за раз, пропуская меньшие фрагментированные области.", "id": 852330, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852330/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811503/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.068297Z", "action": 9, "target": "Я не сделал последний шаг к заведению \"указателя на распределение\", который будет передвигаться по участку области подкачки при выделении памяти для обеспечения в будущем распределения последовательных участков, или по крайней мере местоположения ссылки, но я убежден, что это может быть сделано.", "id": 852331, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852331/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811504/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.078990Z", "action": 9, "target": "Когда освобождать страницу", "id": 852332, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852332/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811505/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.089881Z", "action": 9, "target": "Так как система VM использует всю доступную память для кэширования диска, то обычно действительно незанятых страниц очень мало. Система VM зависит от того, как она точно выбирает незанятые страницы для повторного использования для новых распределений. Оптимальный выбор страниц для высвобождения, возможно, является самой важной функцией любой VM-системы, из тех, что она может выполнять, потому что при неправильном выборе система VM вынуждена будет запрашивать страницы с диска, значительно снижая производительность всей системы.", "id": 852333, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852333/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811506/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.100628Z", "action": 9, "target": "Какую дополнительную нагрузку мы может выделить в критическом пути для избежания высвобождения не той страницы? Каждый неправильный выбор будет стоить нам сотни тысяч тактов работы центрального процессора и заметное замедление работы затронутых процессов, так что мы должны смириться со значительными издержками для того, чтобы была заведомо выбрана правильная страница. Вот почему FreeBSD превосходит другие системы в производительности при нехватке ресурсов памяти.", "id": 852334, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852334/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811507/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.111207Z", "action": 9, "target": "Алгоритм определения свободной страницы написан на основе истории использования страниц памяти. Для получения этой истории система использует возможности бита использования памяти, которые имеются в большинстве аппаратных таблицах страниц памяти.", "id": 852335, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852335/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811508/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.122074Z", "action": 9, "target": "В любом случае, бит использования страницы очищается, и в некоторый более поздний момент VM-система обращается к странице снова и обнаруживает, что этот бит установлен. Это указывает на то, что страница активно используется. Периодически проверяя этот бит, накапливается история использования (в виде счетчика) физической страницы. Когда позже VM-системе требуется высвободить некоторые страницы, проверка истории выступает указателем при определении наиболее вероятной кандидатуры для повторного использования.", "id": 852336, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852336/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811509/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.133452Z", "action": 9, "target": "Для тех платформ, что не имеют этой возможности, система эмулирует этот бит. Она снимает отображение или защищает страницу, что приводит к ошибке доступа к странице, если к странице выполняется повторное обращение. При возникновении этой ошибки система просто помечает страницу как используемую и снимает защиту со страницы, так что она может использоваться. Хотя использование такого приема только для определения использования страницы весьма накладно, это выгоднее, чем повторно использовать страницу для других целей и обнаружить, что она снова нужна процессу и подгружать ее с диска.", "id": 852337, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852337/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811510/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.146631Z", "action": 9, "target": "FreeBSD использует несколько очередей страниц для обновления выбора страниц для повторного использования, а также для определения того, когда же грязные страницы должны быть сброшены в хранилище. Так как таблицы страниц во FreeBSD являются динамическими объектами, практически ничего не стоит вырезать страницу из адресного пространства любого использующего ее процесса. После того, как подходящая страница, на основе счетчика использования, выбрана, именно это и выполняется. Система должна отличать между чистыми страницами, которые теоретически могут быть высвобождены в любое время, и грязными страницами, которые сначала должны быть переписаны в хранилище перед тем, как их можно будет использовать повторно. После нахождения подходящей страницы она перемещается в неактивную очередь, если она является грязной, или в очередь кэша, если она чистая. Отдельный алгоритм, основывающийся на отношении количества грязных страниц к чистым, определяет, когда грязные страницы в неактивной очереди должны быть сброшены на диск. Когда это выполнится, сброшенные страницы перемещаются из неактивной очереди в очередь кэша. В этот момент страницы в очереди кэша могут быть повторно активизированы VM со сравнительно малыми накладными расходами. Однако страницы в очереди кэша предполагается \"высвобождать немедленно\" и повторно использовать в LRU-порядке (меньше всего используемый), когда системе потребуется выделение дополнительной памяти.", "id": 852338, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852338/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811511/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.158583Z", "action": 9, "target": "Стоит отметить, что во FreeBSD VM-система пытается разделить чистые и грязные страницы во избежание срочной необходимости в ненужных сбросах грязных страниц (что отражается на пропускной способности ввода/вывода) и не перемещает беспричинно страницы между разными очередями, когда подсистема управления памятью не испытывает нехватку ресурсов. Вот почему вы можете видеть, что при выполнении команды `systat -vm` в некоторых системах значение счетчика очереди кэша мало, а счетчик активной очереди большой. При повышении нагрузки на VM-систему она прилагает большие усилия на поддержку различных очередей страниц в соотношениях, которые являются наиболее эффективными.", "id": 852339, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852339/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811512/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.170561Z", "action": 9, "target": "Годами ходили современные легенды, что Linux выполняет работу по предотвращению выгрузки на диск лучше, чем FreeBSD, но это не так. На самом деле FreeBSD старается сбросить на диск неиспользуемые страницы для освобождения места под дисковый кэш, когда как Linux хранит неиспользуемые страницы в памяти и оставляет под кэш и страницы процессов меньше памяти. Я не знаю, остается ли это правдой на сегодняшний день.", "id": 852340, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852340/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811513/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.181745Z", "action": 9, "target": "Оптимизация ошибок доступа к страницам и их обнуления", "id": 852341, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852341/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811514/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.194551Z", "action": 9, "target": "Полагая, что ошибка доступа к странице памяти в VM не является операцией с большими накладными расходами, если страница уже находится в основной памяти и может быть просто отображена в адресное пространство процесса, может оказаться, что это станет весьма накладно, если их будет оказываться регулярно много. Хорошим примером этой ситуации является запуск таких программ, как man:ls[1] или man:ps[1], снова и снова. Если бинарный файл программы отображен в память, но не отображен в таблицу страниц, то все страницы, к которым обращалась программа, окажутся недоступными при каждом запуске программы. Это не так уж необходимо, если эти страницы уже присутствуют в кэше VM, так что FreeBSD будет пытаться восстанавливать таблицы страниц процесса из тех страниц, что уже располагаются в VM-кэше. Однако во FreeBSD пока не выполняется предварительное копирование при записи определенных страниц при выполнении вызова exec. Например, если вы запускаете программу man:ls[1] одновременно с работающей `vmstat 1`, то заметите, что она всегда выдает некоторое количество ошибок доступа к страницам, даже когда вы запускаете ее снова и снова. Это ошибки заполнения нулями, а не ошибки кода программы (которые уже были обработаны). Предварительное копирование страниц при выполнении вызовов exec или fork находятся в области, требующей более тщательного изучения.", "id": 852342, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852342/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811515/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.207883Z", "action": 9, "target": "Большой процент ошибок доступа к страницам, относится к ошибкам при заполнении нулями. Вы можете обычно видеть это, просматривая вывод команды `vmstat -s`. Это происходит, когда процесс обращается к страницам в своей области BSS. Область BSS предполагается изначально заполненной нулями, но VM-система не заботится о выделении памяти до тех пор, пока процесс реально к ней не обратится. При возникновении ошибки VM-система должна не только выделить новую страницу, но и заполнить ее нулями. Для оптимизации операции по заполнению нулями в системе VM имеется возможность предварительно обнулять страницы и помечать их, и запрашивать уже обнуленные страницы при возникновении ошибок заполнения нулями. Предварительное заполнение нулями происходит, когда CPU простаивает, однако количество страниц, которые система заранее заполняет нулями, ограничено, для того, чтобы не переполнить кэши памяти. Это прекрасный пример добавления сложности в VM-систему ради оптимизации критического пути.", "id": 852343, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852343/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811516/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.219516Z", "action": 9, "target": "Оптимизация таблицы страниц", "id": 852344, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852344/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811517/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.232661Z", "action": 9, "target": "Оптимизация таблицы страниц составляет самую содержательную часть архитектуры VM во FreeBSD и она проявляется при появлении нагрузки при значительном использовании `mmap()`. Я думаю, что это на самом деле особенность работы большинства BSD-систем, хотя я не уверен, когда это проявилось впервые. Есть два основных подхода к оптимизации. Первый заключается в том, что аппаратные таблицы страниц не содержат постоянного состояния, а вместо этого могут быть сброшены в любой момент с малыми накладными расходами. Второй подход состоит в том, что каждая активная таблица страниц в системе имеет управляющую структуру `pv_entry`, которая связана в структуру `vm_page`. FreeBSD может просто просматривать эти отображения, которые существуют, когда как в Linux должны проверяться все таблицы страниц, которые _могут_ содержать нужное отображение, что в некоторых ситуация дает увеличение сложности O(n^2). Из-за того, что FreeBSD стремится выбрать наиболее подходящую к повторному использованию или сбросу в область подкачки страницу, когда ощущается нехватка памяти, система дает лучшую производительность при нагрузке. Однако во FreeBSD требуется тонкая настройка ядра для соответствия ситуациям с большим совместно используемым адресным пространством, которые могут случиться в системе, обслуживающей сервер телеконференций, потому что структуры `pv_entry` могут оказаться исчерпанными.", "id": 852345, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852345/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811518/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.244897Z", "action": 9, "target": "И в Linux, и во FreeBSD требуются доработки в этой области. FreeBSD пытается максимизировать преимущества от потенциально редко применяемой модели активного отображения (к примеру, не всем процессам нужно отображать все страницы динамической библиотеки), когда как Linux пытается упростить свои алгоритмы. FreeBSD имеет здесь общее преимущество в производительности за счет использования дополнительной памяти, но FreeBSD выглядит хуже в случае, когда большой файл совместно используется сотнями процессов. Linux, с другой стороны, выглядит хуже в случае, когда много процессов частично используют одну и ту же динамическую библиотеку, а также работает неоптимально при попытке определить, может ли страница повторно использоваться, или нет.", "id": 852346, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852346/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811523/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.256770Z", "action": 9, "target": "Виртуальная память в современных операционных системах должна решать несколько различных задач эффективно и при разных условиях. Модульный и алгоритмический подход, которому исторически следует BSD, позволяет нам изучить и понять существующую реализацию, а также сравнительно легко изменить большие блоки кода. За несколько последних лет в VM-системе FreeBSD было сделано некоторое количество усовершенствований, и работа над ними продолжается.", "id": 852347, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852347/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811524/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.267476Z", "action": 9, "target": "Дополнительный сеанс вопросов и ответов от Аллена Бриггса (Allen Briggs)", "id": 852348, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852348/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811525/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.278138Z", "action": 9, "target": "Что это за алгоритм чередования, который вы упоминали в списке недостатков подсистемы управления разделом подкачки во FreeBSD 3.X?", "id": 852349, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852349/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811526/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.289115Z", "action": 9, "target": "FreeBSD использует в области подкачки механизм чередования, с индексом по умолчанию, равным четырем. Это означает, что FreeBSD резервирует пространство для четырех областей подкачки, даже если у вас имеется всего лишь одна, две или три области. Так как в области подкачки имеется чередование, то линейное адресное пространство, представляющее \"четыре области подкачки\", будет фрагментироваться, если у вас нет на самом деле четырех областей подкачки. Например, если у вас две области A и B, то представление адресного пространства для этой области подкачки во FreeBSD будет организовано с чередованием блоков из 16 страниц:", "id": 852350, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852350/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811528/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.300275Z", "action": 9, "target": "FreeBSD 3.X использует \"последовательный список свободных областей\" для управления свободными областями в разделе подкачки. Идея состоит в том, что большие последовательные блоки свободного пространства могут быть представлены при помощи узла односвязного списка ([.filename]#kern/subr_rlist.c#). Но из-за фрагментации последовательный список сам становится фрагментированным. В примере выше полностью неиспользуемое пространство в A и B будет показано как \"свободное\", а C и D как \"полностью занятое\". Каждой последовательности A-B требуется для учета узел списка, потому что C и D являются дырами, так что узел списка не может быть связан со следующей последовательностью A-B.", "id": 852351, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852351/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811529/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.311179Z", "action": 9, "target": "Почему мы организуем чередование в области подкачки вместо того, чтобы просто объединить области подкачки в одно целое и придумать что-то более умное? Потому что гораздо легче выделять последовательные полосы адресного пространства и получать в результате автоматическое чередование между несколькими дисками, чем пытаться выдумывать сложности в другом месте.", "id": 852352, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852352/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811530/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.322505Z", "action": 9, "target": "Фрагментация вызывает другие проблемы. Являясь последовательным списком в 3.X и имея такое огромную фрагментацию, выделение и освобождение в области подкачки становится алгоритмом сложности O(N), а не O(1). Вместе с другими факторами (частое обращение к области подкачки) вы получаете сложность уровней O(N^2) и O(N^3), что плохо. В системе 3.X также может потребоваться выделение KVM во время работы с областью подкачки для создания нового узла списка, что в условии нехватки памяти может привести к блокировке, если система попытается сбросить страницы в область подкачки.", "id": 852353, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852353/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811531/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.333619Z", "action": 9, "target": "В 4.X мы не используем последовательный список. Вместо этого мы используем базисное дерево и битовые карты блоков области подкачки, а не ограниченный список узлов. Мы принимаем предварительное выделение всех битовых карт, требуемых для всей области подкачки, но при этом тратится меньше памяти, потому что мы используем битовые карты (один бит на блок), а не связанный список узлов. Использование базисного дерева вместо последовательного списка дает нам производительность O(1) вне зависимости от фрагментации дерева.", "id": 852354, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852354/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811532/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.344356Z", "action": 9, "target": "Как разделение чистых и грязных (неактивных) страниц связано с ситуацией, когда вы видите маленький счетчик очереди кэша и большой счетчик активной очереди в выдаче команды systat -vm? Разве системная статистика не считает активные и грязные страницы вместе за счетчик активной очереди?", "id": 852355, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852355/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811533/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.354845Z", "action": 9, "target": "Да, это запутывает. Связь заключается в \"желаемом\" и \"действительном\". Мы желаем разделить страницы, но реальность такова, что пока у нас нет проблем с памятью, нам это на самом деле не нужно.", "id": 852356, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852356/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811534/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.365599Z", "action": 9, "target": "Это означает, что FreeBSD не будет очень сильно стараться над отделением грязных страниц (неактивная очередь) от чистых страниц (очередь кэша), когда система не находится под нагрузкой, и не будет деактивировать страницы (активная очередь -> неактивная очередь), когда система не нагружена, даже если они не используются.", "id": 852357, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852357/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811535/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.376995Z", "action": 9, "target": "В примере с / vmstat 1 могут ли некоторые ошибки доступа к странице быть ошибками страниц данных (COW из выполнимого файла в приватные страницы)? То есть я полагаю, что ошибки доступа к страницам являются частично ошибками при заполнении нулями, а частично данных программы. Или вы гарантируете, что FreeBSD выполняет предварительно COW для данных программы?", "id": 852358, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852358/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811536/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.390689Z", "action": 9, "target": "Ошибка COW может быть ошибкой при заполнении нулями или данных программы. Механизм в любом случае один и тот же, потому что хранилище данных программы уже в кэше. Я на самом деле не рад ни тому, ни другому. FreeBSD не выполняет предварительное COW данных программы и заполнение нулями, но она _выполняет_ предварительно отображение страниц, которые имеются в ее кэше.", "id": 852359, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852359/?format=api" }, { "unit": "https://translate-dev.freebsd.org/api/units/1811537/?format=api", "component": "https://translate-dev.freebsd.org/api/components/documentation/articlesvm-design_index/?format=api", "translation": "https://translate-dev.freebsd.org/api/translations/documentation/articlesvm-design_index/ru/?format=api", "user": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "author": "https://translate-dev.freebsd.org/api/users/v.popolitov/?format=api", "timestamp": "2025-07-04T17:55:27.404000Z", "action": 9, "target": "В вашем разделе об оптимизации таблицы страниц, не могли бы вы более подробно рассказать о pv_entry и vm_page (или vm_page должна быть vm_pmap-как в 4.4, cf. pp. 180-181 of McKusick, Bostic, Karel, Quarterman)? А именно какое действие/реакцию должно потребоваться для сканирования отображений?", "id": 852360, "action_name": "Translation uploaded", "url": "https://translate-dev.freebsd.org/api/changes/852360/?format=api" } ] }