git: a254b7ddce - main - update translation of articles/vm-design to Russian
Vladlen Popolitov <[email protected]>
| Newsgroups | gmane.os.freebsd.devel.cvs.doc |
|---|---|
| Message-ID | <[email protected]> |
The branch main has been updated by vladlen: URL: https://cgit.FreeBSD.org/doc/commit/?id=a254b7ddce54ee6c6a1843c7c8fab7cc4798e09e commit a254b7ddce54ee6c6a1843c7c8fab7cc4798e09e Author: Vladlen Popolitov <[email protected]> AuthorDate: 2025-10-12 19:27:59 +0000 Commit: Vladlen Popolitov <[email protected]> CommitDate: 2025-10-12 19:27:59 +0000 update translation of articles/vm-design to Russian Reviewed by: maxim (mentor), marck Approved by: maxim (mentor) Differential Revision: https://reviews.freebsd.org/D52017 --- .../content/ru/articles/vm-design/_index.adoc | 49 +- .../content/ru/articles/vm-design/_index.po | 1356 ++++++++++++++++++++ 2 files changed, 1372 insertions(+), 33 deletions(-) diff --git a/documentation/content/ru/articles/vm-design/_index.adoc b/documentation/content/ru/articles/vm-design/_index.adoc index 99af966d20..e0847dea68 100644 --- a/documentation/content/ru/articles/vm-design/_index.adoc +++ b/documentation/content/ru/articles/vm-design/_index.adoc @@ -1,9 +1,12 @@ --- -title: ÐлеменÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑÑ ÑиÑÑÐµÐ¼Ñ Ð²Ð¸ÑÑÑалÑной памÑÑи во FreeBSD authors: - - author: Matthew Dillon + - + author: 'Matthew Dillon' email: [email protected] -trademarks: ["freebsd", "linux", "microsoft", "opengroup", "general"] +description: 'ÐÑоÑÑое и понÑÑное опиÑание аÑÑ Ð¸ÑекÑÑÑÑ ÑиÑÑÐµÐ¼Ñ Ð²Ð¸ÑÑÑалÑной памÑÑи FreeBSD' +tags: ["Design", "virtual machine", "FreeBSD"] +title: 'ÐлеменÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑÑ ÑиÑÑÐµÐ¼Ñ Ð²Ð¸ÑÑÑалÑной памÑÑи во FreeBSD' +trademarks: ["freebsd", "linux", "microsoft", "opengroup", "daemon-news", "general"] --- = ÐлеменÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑÑ ÑиÑÑÐµÐ¼Ñ Ð²Ð¸ÑÑÑалÑной памÑÑи во FreeBSD @@ -37,10 +40,17 @@ ifndef::env-beastie[] include::../../../../../shared/asciidoctor.adoc[] endif::[] +[NOTE] +==== +ÐÑÐ¾Ñ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ ÑÑÑаÑел, и некоÑоÑÑе ÑÐ°Ð·Ð´ÐµÐ»Ñ Ð±Ð¾Ð»ÑÑе не ÑооÑвеÑÑÑвÑÑÑ ÑекÑÑÐµÐ¼Ñ ÑоÑÑоÑÐ½Ð¸Ñ ÑиÑÑÐµÐ¼Ñ Ð²Ð¸ÑÑÑалÑной памÑÑи. Ðн ÑÐ¾Ñ ÑанÑн в иÑÑоÑиÑеÑÐºÐ¸Ñ ÑелÑÑ Ð¸ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»Ñн в бÑдÑÑем. +==== + [.abstract-title] ÐнноÑаÑÐ¸Ñ -Ðазвание ÑÑаÑÑи говоÑÐ¸Ñ Ð»Ð¸ÑÑ Ð¾ Ñом, ÑÑо Ñ Ð¿Ð¾Ð¿ÑÑаÑÑÑ Ð¾Ð¿Ð¸ÑаÑÑ Ð² Ñелом VM-ÑиÑÑÐµÐ¼Ñ Ð¿Ð¾Ð½ÑÑнÑм ÑзÑком. ÐоÑледний год Ñ ÑоÑÑедоÑоÑил ÑÑÐ¸Ð»Ð¸Ñ Ð² ÑабоÑе над неÑколÑкими оÑновнÑми подÑиÑÑемами ÑдÑа FreeBSD, ÑÑеди коÑоÑÑÑ Ð¿Ð¾Ð´ÑиÑÑÐµÐ¼Ñ VM и подкаÑки бÑли ÑамÑми инÑеÑеÑнÑми, а NFS оказалаÑÑ "Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ð¹ ÑÑÑиной". Я пеÑепиÑал лиÑÑ Ð¼Ð°Ð»ÑÑ ÑаÑÑÑ ÐºÐ¾Ð´Ð°. ЧÑо каÑаеÑÑÑ VM, Ñо Ñ ÐµÐ´Ð¸Ð½ÑÑвеннÑм болÑÑим обновлением, коÑоÑое Ñ Ñделал, ÑвлÑеÑÑÑ Ð¿ÐµÑеделка подÑиÑÑÐµÐ¼Ñ Ð¿Ð¾Ð´ÐºÐ°Ñки. ÐÑÐ½Ð¾Ð²Ð½Ð°Ñ ÑаÑÑÑ Ð¼Ð¾ÐµÐ¹ ÑабоÑÑ Ð·Ð°ÐºÐ»ÑÑалаÑÑ Ð² заÑиÑÑке и поддеÑжке кода, Ñ ÐµÐ´Ð¸Ð½ÑÑвенной замеÑной пеÑеделкой код а и без знаÑиÑелÑной пеÑеделки алгоÑиÑмов в VM-подÑиÑÑеме. РоÑновном ÑеоÑеÑиÑеÑÐºÐ°Ñ Ð±Ð°Ð·Ð° ÑабоÑÑ VM-подÑиÑÑÐµÐ¼Ñ Ð¾ÑÑалаÑÑ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½Ð½Ð¾Ð¹, а болÑÑинÑÑво благодаÑноÑÑей за ÑовÑеменнÑÑ Ð½Ð¾Ð²Ð¾Ð²Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð·Ð° поÑледние неÑколÑко Ð»ÐµÑ Ð¿ÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð°Ñ John Dyson и David Greenman. Ðе ÑвлÑÑÑÑ Ð¸ÑÑоÑиком, как ÐеÑк, Ñ Ð½Ðµ бÑÐ´Ñ Ð¿ÑÑаÑÑÑÑ ÑвÑзаÑÑ ÑазлиÑнÑе возможноÑÑи ÑиÑÑÐµÐ¼Ñ Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸, поÑÐ¾Ð¼Ñ ÑÑо обÑзаÑелÑно оÑибÑÑÑ. +Matthew Dillon <[email protected]> + +ÐÑо название â пÑоÑÑо замÑÑловаÑÑй ÑпоÑоб ÑказаÑÑ, ÑÑо Ñ Ð¿Ð¾Ð¿ÑÑаÑÑÑ Ð¾Ð¿Ð¸ÑаÑÑ Ð²ÑÑ ÑиÑÑÐµÐ¼Ñ Ð²Ð¸ÑÑÑалÑной памÑÑи (VM) Ñеликом, по возможноÑÑи Ñак, ÑÑÐ¾Ð±Ñ ÑÑо бÑло понÑÑно каждомÑ.Ð ÑеÑение поÑледнего года Ñ ÑоÑÑедоÑоÑилÑÑ Ð½Ð° неÑколÑÐºÐ¸Ñ Ð¾ÑновнÑÑ Ð¿Ð¾Ð´ÑиÑÑÐµÐ¼Ð°Ñ ÑдÑа FreeBSD. Ðаиболее инÑеÑеÑнÑми из Ð½Ð¸Ñ ÑÑали подÑиÑÑÐµÐ¼Ñ VM и подкаÑки (Swap), Ñогда как ÑабоÑа Ñ NFS оказалаÑÑ, ÑкоÑее, Â«Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ð¹ ÑÑÑиной». Я пеÑепиÑал лиÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑие ÑаÑÑи кода. РоблаÑÑи VM м оей единÑÑвенной кÑÑпной пеÑеÑабоÑкой ÑÑала подÑиÑÑема подкаÑки. РоÑновном Ð¼Ð¾Ñ ÑабоÑа заклÑÑалаÑÑ Ð² оÑиÑÑ ÐºÐµ и поддеÑжке кода, Ñ ÑмеÑеннÑми пÑавками и без ÑеÑÑÑзнÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ алгоÑиÑмов в подÑиÑÑеме VM. ТеоÑеÑиÑеÑÐºÐ°Ñ Ð¾Ñнова VM-подÑиÑÑÐµÐ¼Ñ Ð¾ÑÑалаÑÑ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½Ð½Ð¾Ð¹, и лÑÐ²Ð¸Ð½Ð°Ñ Ð´Ð¾Ð»Ñ Ð·Ð°ÑлÑг в ÐµÑ Ð¼Ð¾Ð´ÐµÑнизаÑии за поÑледние Ð³Ð¾Ð´Ñ Ð¿ÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ ÐÐ¶Ð¾Ð½Ñ ÐайÑÐ¾Ð½Ñ Ð¸ ÐÑÐ²Ð¸Ð´Ñ ÐÑинманÑ. Я не иÑÑоÑик, в оÑлиÑие Ð¾Ñ ÐиÑка, поÑÑÐ¾Ð¼Ñ Ð½Ðµ ÑÑÐ°Ð½Ñ Ð¿ÑипиÑÑваÑÑ ÑазлиÑнÑе ÑÑнкÑии конкÑеÑнÑм лÑдÑм â вÑÑ Ñавно где-нибÑÐ´Ñ Ð¾ÑибÑÑÑ. ''' @@ -69,7 +79,7 @@ toc::[] FreeBSD ÑпÑавлÑÐµÑ Ð²Ñем ÑÑим пÑи помоÑи многоÑÑовневой модели VM-обÑекÑов. ÐÑÑ Ð¾Ð´Ð½Ñй Ñайл Ñ Ð´Ð²Ð¾Ð¸Ñной пÑогÑаммой пеÑеноÑиÑÑÑ Ð½Ð° ÑамÑй нижний ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¾Ð±ÑекÑов VM. УÑÐ¾Ð²ÐµÐ½Ñ ÑÑÑаниÑ, копиÑÑемÑÑ Ð¿Ñи запиÑи, Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð²ÑÑе него, и Ñ ÑÐ°Ð½Ð¸Ñ Ñе ÑÑÑаниÑÑ, коÑоÑÑе бÑли ÑкопиÑÐ¾Ð²Ð°Ð½Ñ Ð¸Ð· иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñайла. ÐÑли пÑогÑамма модиÑиÑиÑÑÐµÑ ÑÑÑаниÑÑ Ð´Ð°Ð½Ð½ÑÑ , оÑноÑÑÑиеÑÑ Ðº иÑÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑайлÑ, Ñо ÑиÑÑема VM обнаÑÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑо и пеÑеноÑÐ¸Ñ ÐºÐ¾Ð¿Ð¸Ñ ÑÑой ÑÑÑаниÑÑ Ð½Ð° более вÑÑоки й ÑÑовенÑ. Ðогда пÑоÑеÑÑ ÑазвеÑвлÑеÑÑÑ, добавлÑÑÑÑÑ Ð½Ð¾Ð²Ñе ÑÑовни VM-обÑекÑов. ÐÑо можно показаÑÑ Ð½Ð° пÑоÑÑом п ÑимеÑе. ФÑнкÑÐ¸Ñ `fork()` ÑвлÑеÑÑÑ Ð¾Ð±Ñей опеÑаÑией Ð´Ð»Ñ Ð²ÑÐµÑ ÑиÑÑем *BSD, Ñак ÑÑо в ÑÑом пÑимеÑе бÑÐ´ÐµÑ ÑаÑÑмаÑÑиваÑÑÑÑ Ð¿ÑогÑамма, коÑоÑÐ°Ñ Ð·Ð°Ð¿ÑÑкаеÑÑÑ, а заÑем ÑазвеÑвлÑеÑÑÑ. Ðогда пÑоÑеÑÑ Ð·Ð°Ð¿ÑÑкаеÑÑÑ, VM-ÑиÑÑема ÑÐ¾Ð·Ð´Ð°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑй ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¾Ð±ÑекÑов, обознаÑим его A: -image::fig1.png[РиÑÑнок] +image::fig1.png["РиÑÑнок"] A ÑооÑвеÑÑÑвÑÐµÑ ÑайлÑ-по Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи ÑÑÑаниÑÑ Ð¿Ð°Ð¼ÑÑи могÑÑ Ð²ÑÑвобождаÑÑÑÑ Ð¸ подгÑÑжаÑÑÑÑ Ñ Ð½Ð¾ÑиÑÐµÐ»Ñ Ñайла. ÐодгÑÑзка Ñ Ð´Ð¸Ñка Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð¿ÑогÑамме, однако на Ñамом деле Ð¼Ñ Ð½Ðµ Ñ Ð¾Ñим, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð° запиÑÑвалаÑÑ Ð¾Ð±ÑаÑно в Ñайл. ÐоÑÑÐ¾Ð¼Ñ VM-ÑиÑÑема ÑÐ¾Ð·Ð´Ð°ÐµÑ Ð²ÑоÑой ÑÑовенÑ, B, коÑоÑÑй ÑизиÑеÑки поддеÑживаеÑÑÑ Ð´Ð¸ÑковÑм пÑоÑÑÑанÑÑвом подкаÑки: @@ -140,20 +150,13 @@ FreeBSD иÑполÑзÑÐµÑ Ð½ÐµÑколÑко оÑеÑедей ÑÑÑÐ°Ð½Ð¸Ñ ÐолÑÑой пÑоÑÐµÐ½Ñ Ð¾Ñибок доÑÑÑпа к ÑÑÑаниÑам, оÑноÑиÑÑÑ Ðº оÑибкам пÑи заполнении нÑлÑми. ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑно видеÑÑ ÑÑо, пÑоÑмаÑÑÐ¸Ð²Ð°Ñ Ð²Ñвод ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ `vmstat -s`. ÐÑо пÑоиÑÑ Ð¾Ð´Ð¸Ñ, когда пÑоÑеÑÑ Ð¾Ð±ÑаÑаеÑÑÑ Ðº ÑÑÑаниÑам в Ñвоей облаÑÑи BSS. ÐблаÑÑÑ BSS пÑедполагаеÑÑÑ Ð¸Ð·Ð½Ð°ÑалÑно заполненной нÑлÑми, но VM-ÑиÑÑема не забоÑиÑÑÑ Ð¾ вÑделении памÑÑи до ÑÐµÑ Ð¿Ð¾Ñ, пока пÑоÑеÑÑ ÑеалÑно к ней не обÑаÑиÑÑÑ. ÐÑи возникновении оÑибки VM-ÑиÑÑема должна не ÑолÑко вÑÐ´ÐµÐ»Ð¸Ñ Ñ Ð½Ð¾Ð²ÑÑ ÑÑÑаниÑÑ, но и заполниÑÑ ÐµÐµ нÑлÑми. ÐÐ»Ñ Ð¾Ð¿ÑимизаÑии опеÑаÑии по Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½ÑлÑми в ÑиÑÑеме VM имееÑÑ Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿ÑедваÑиÑелÑно обнÑлÑÑÑ ÑÑÑаниÑÑ Ð¸ помеÑаÑÑ Ð¸Ñ , и запÑаÑиваÑÑ Ñже обнÑленнÑе ÑÑÑаниÑÑ Ð¿Ñи возникновении оÑибок Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð½ÑлÑми. ÐÑедваÑиÑелÑное заполнение нÑлÑми пÑоиÑÑ Ð¾Ð´Ð¸Ñ, когда CPU пÑоÑÑаиваеÑ, однако колиÑеÑÑво ÑÑÑаниÑ, коÑоÑÑе ÑиÑÑема заÑанее заполнÑÐµÑ Ð½ÑлÑми, огÑаниÑено, Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð½Ðµ пеÑеполниÑÑ ÐºÑÑи памÑÑи. ÐÑо пÑекÑаÑнÑй пÑÐ¸Ð¼ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑложноÑÑи в VM-ÑиÑÑÐµÐ¼Ñ Ñади опÑимизаÑии кÑиÑиÑеÑкого пÑÑи. -[[pre-table-optimizations]] +[[page-table-optimizations]] == ÐпÑимизаÑÐ¸Ñ ÑаблиÑÑ ÑÑÑÐ°Ð½Ð¸Ñ ÐпÑимизаÑÐ¸Ñ ÑаблиÑÑ ÑÑÑÐ°Ð½Ð¸Ñ ÑоÑÑавлÑÐµÑ ÑамÑÑ ÑодеÑжаÑелÑнÑÑ ÑаÑÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑÑ VM во FreeBSD и она пÑоÑвлÑеÑÑÑ Ð¿Ñи поÑвлении нагÑÑзки пÑи знаÑиÑелÑном иÑполÑзовании `mmap()`. Я дÑмаÑ, ÑÑо ÑÑо на Ñамом деле оÑобенноÑÑÑ ÑабоÑÑ Ð±Ð¾Ð»ÑÑинÑÑва BSD-ÑиÑÑем, Ñ Ð¾ÑÑ Ñ Ð½Ðµ ÑвеÑен, когда ÑÑо пÑоÑвилоÑÑ Ð²Ð¿ÐµÑвÑе. ÐÑÑÑ Ð´Ð²Ð° оÑновнÑÑ Ð¿Ð¾Ð´Ñ Ð¾Ð´Ð° к опÑимизаÑии. ÐеÑвÑй заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо аппаÑаÑнÑе ÑаблиÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð½Ðµ ÑодеÑÐ¶Ð°Ñ Ð¿Ð¾ÑÑоÑнного ÑоÑÑоÑниÑ, а вмеÑÑо ÑÑого Ð ¼Ð¾Ð³ÑÑ Ð±ÑÑÑ ÑбÑоÑÐµÐ½Ñ Ð² лÑбой Ð¼Ð¾Ð¼ÐµÐ½Ñ Ñ Ð¼Ð°Ð»Ñми накладнÑми ÑаÑÑ Ð¾Ð´Ð°Ð¼Ð¸. ÐÑоÑой Ð¿Ð¾Ð´Ñ Ð¾Ð´ ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑо ÐºÐ°Ð¶Ð´Ð°Ñ Ð°ÐºÑ Ð¸Ð²Ð½Ð°Ñ ÑаблиÑа ÑÑÑÐ°Ð½Ð¸Ñ Ð² ÑиÑÑеме Ð¸Ð¼ÐµÐµÑ ÑпÑавлÑÑÑÑÑ ÑÑÑÑкÑÑÑÑ `pv_entry`, коÑоÑÐ°Ñ ÑвÑзана в ÑÑÑÑкÑÑÑÑ `vm_page`. FreeBSD Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоÑÑо пÑоÑмаÑÑиваÑÑ ÑÑи оÑобÑажениÑ, коÑоÑÑе ÑÑÑеÑÑвÑÑÑ, когда как в Linux Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿ÑовеÑÑÑÑÑÑ Ð²Ñе ÑаблиÑÑ ÑÑÑаниÑ, коÑоÑÑе _могÑÑ_ ÑодеÑжаÑÑ Ð½Ñжное оÑобÑажение, ÑÑо в некоÑоÑÑÑ ÑиÑÑаÑÐ¸Ñ Ð´Ð°ÐµÑ ÑвелиÑение ÑложноÑÑи O(n^2). Ðз-за Ñого, ÑÑо FreeBSD ÑÑÑемиÑÑÑ Ð²ÑбÑаÑÑ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑÑÑ Ðº повÑоÑÐ½Ð¾Ð¼Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ ÑбÑоÑÑ Ð² облаÑÑÑ Ð ¿Ð¾Ð´ÐºÐ°Ñки ÑÑÑаниÑÑ, когда оÑÑÑаеÑÑÑ Ð½ÐµÑ Ð²Ð°Ñка памÑÑи, ÑиÑÑема Ð´Ð°ÐµÑ Ð»ÑÑÑÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ Ð¿Ñи нагÑÑзке. Ðд нако во FreeBSD ÑÑебÑеÑÑÑ ÑÐ! ¾Ð½ÐºÐ°Ñ наÑÑÑойка ÑдÑа Ð´Ð»Ñ ÑооÑвеÑÑÑÐ²Ð¸Ñ ÑиÑÑаÑиÑм Ñ Ð±Ð¾Ð»ÑÑим ÑовмеÑÑно иÑполÑзÑемÑм адÑеÑнÑм пÑоÑÑÑанÑÑвом, коÑоÑÑе могÑÑ ÑлÑÑиÑÑÑÑ Ð² ÑиÑÑеме, обÑлÑживаÑÑей ÑеÑÐ²ÐµÑ ÑелеконÑеÑенÑий, поÑÐ¾Ð¼Ñ ÑÑо ÑÑÑÑкÑÑÑÑ `pv_entry` могÑÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð¸ÑÑеÑпаннÑми. Рв Linux, и во FreeBSD ÑÑебÑÑÑÑÑ Ð´Ð¾ÑабоÑки в ÑÑой облаÑÑи. FreeBSD пÑÑаеÑÑÑ Ð¼Ð°ÐºÑимизиÑоваÑÑ Ð¿ÑеимÑÑеÑÑва Ð¾Ñ Ð¿Ð¾ÑенÑиалÑно Ñедко пÑименÑемой модели акÑивного оÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ (к пÑимеÑÑ, не вÑем пÑоÑеÑÑам нÑжно оÑобÑажаÑÑ Ð²Ñе ÑÑÑаниÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑкой библиоÑеки), когда как Linux пÑÑаеÑÑÑ ÑпÑоÑÑиÑÑ Ñвои алгоÑиÑмÑ. FreeBSD Ð¸Ð¼ÐµÐµÑ Ð·Ð´ÐµÑÑ Ð¾Ð±Ñее пÑеимÑÑеÑÑво в пÑоизводиÑелÑноÑÑи за ÑÑÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной памÑÑи, но FreeBSD вÑглÑÐ´Ð¸Ñ Ñ Ñже в ÑлÑÑае, когда Ð ±Ð¾Ð»ÑÑой Ñайл ÑовмеÑÑно иÑполÑзÑеÑÑÑ ÑоÑнÑми пÑоÑеÑÑов. Linux, Ñ Ð´ÑÑгой ÑÑоÑонÑ, вÑглÑÐ´Ð¸Ñ Ñ Ñже в ÑлÑÑае, когда мР½Ð¾Ð³Ð¾ пÑоÑеÑÑов ÑаÑÑиÑно иÑполÑзÑÑÑ Ð¾Ð´Ð½Ñ Ð¸ ÑÑ Ð¶Ðµ динамиÑеÑкÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑекÑ, а Ñакже ÑабоÑÐ°ÐµÑ Ð½ÐµÐ¾Ð¿ÑималÑно пÑи попÑÑке опÑеделиÑÑ, Ð¼Ð¾Ð¶ÐµÑ Ð»Ð¸ ÑÑÑаниÑа повÑоÑно иÑполÑзоваÑÑÑÑ, или неÑ. -[[page-coloring-optimizations]] -== Ðодгонка ÑÑÑÐ°Ð½Ð¸Ñ - -ÐÑ Ð·Ð°ÐºÐ¾Ð½Ñим ÑаÑÑмоÑÑением меÑода опÑимизаÑии подгонкой ÑÑÑаниÑ. Ðодгонка ÑвлÑеÑÑÑ Ð¼ÐµÑодом опÑимизаÑии, ÑазÑабоÑаннÑм Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð´Ð¾ÑÑÑп в поÑледоваÑелÑнÑе ÑÑÑаниÑÑ Ð²Ð¸ÑÑÑалÑной памÑÑи макÑималÑно иÑполÑзовал кÑÑ Ð¿ÑоÑеÑÑоÑа. Рдалеком пÑоÑлом (Ñо еÑÑÑ Ð±Ð¾Ð»ÑÑе 10 Ð»ÐµÑ Ð½Ð°Ð·Ð°Ð´) пÑоÑеÑÑоÑнÑе кÑÑи пÑедпоÑиÑали оÑобÑажаÑÑ Ð²Ð¸ÑÑÑалÑнÑÑ Ð¿Ð°Ð¼ÑÑÑ, а не ÑизиÑеÑкÑÑ. ÐÑо пÑиводило к огÑÐ¾Ð¼Ð½Ð¾Ð¼Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑÐ²Ñ Ð¿Ñоблем, вклÑÑÐ°Ñ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑÑ Ð¾ÑиÑÑки к ÑÑа в некоÑоÑÑÑ ÑлÑÑаÑÑ Ð¿Ñи каждом пеÑеклÑÑении конÑекÑÑа и пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ Ð·Ð°Ð¼ÐµÑением даннÑÑ Ð² кÑÑе. Ð ÑовÑеменР½ÑÑ Ð¿ÑоÑеÑÑоÑÐ°Ñ ÐºÑÑи оÑобÑажаÑÑ ÑизиÑеÑкÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ð´Ð»Ñ ÑеÑÐµÐ½Ð¸Ñ ÑÑÐ¸Ñ Ð¿Ñоблем. ÐÑо ознаÑаеÑ, ÑÑо две ÑоÑедние ÑÑÑаниÑÑ Ð² адÑеÑном пÑоÑÑÑанÑÑве пÑоÑеÑÑов могÑÑ Ð½Ðµ ÑооÑвеÑÑÑвоваÑÑ Ð´Ð²ÑÑ ÑоÑедним ÑÑÑаниÑам в кÑÑе. ФакÑиÑеÑки, еÑли Ð²Ñ Ð¾Ð± ÑÑом не позабоÑилиÑÑ, Ñо ÑоÑедние ÑÑÑаниÑÑ Ð² виÑÑÑалÑной памÑÑи могÑÑ Ð¸ÑполÑзоваÑÑ ÑÑ Ð¶Ðµ ÑамÑÑ ÑÑÑаниÑÑ Ð² кÑÑе пÑоÑеÑÑоÑа-ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑбÑоÑÑ ÐºÑÑиÑÑемÑÑ Ð´Ð°Ð½Ð½ÑÑ Ð¸ ÑÐ½Ð¸Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑоизводиÑелÑноÑÑи CPU. Ð Ñо Ñак даже Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑвеннÑми аÑÑоÑиаÑивнÑми кÑÑами (Ñ Ð¾ÑÑ Ð·Ð´ÐµÑÑ ÑÑÑÐµÐºÑ Ð½ÐµÑколÑко Ñглажен). - -Ðод вÑÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи во FreeBSD вÑполнÑÐµÑ Ð¾Ð¿ÑимизаÑÐ¸Ñ Ñ Ð¿Ñименением подгонки ÑÑÑаниÑ, ознаÑаÑÑÑÑ Ñо, ÑÑо код вÑÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи бÑÐ´ÐµÑ Ð¿ÑÑаÑÑÑÑ Ð½Ð°Ð¹Ñи ÑвободнÑе ÑÑÑаниÑÑ, коÑоÑÑе ÑвлÑÑÑÑÑ Ð¿Ð¾ÑледоваÑелÑнÑми Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ ÐºÑÑа. ÐапÑимеÑ, еÑли ÑÑÑаниÑа 16 ÑизиÑеÑкой памÑÑи назнаÑаеÑÑÑ ÑÑÑаниÑе 0 виÑÑÑалÑной памÑÑи пÑоÑеÑÑа, а в кÑÑ Ð¿Ð¾Ð¼ÐµÑаеÑÑÑ 4 ÑÑÑаниÑÑ, Ñо код подгонки ÑÑÑÐ°Ð½Ð¸Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð½Ð°Ð·Ð½Ð°ÑаÑÑ ÑÑÑаниÑÑ 20 ÑизиÑеÑкой памÑÑи ÑÑÑаниÑе 1 виÑÑÑ Ð°Ð»Ñной памÑÑи пÑоÑеÑÑа. ÐмеÑÑо ÑÑого бÑÐ´ÐµÑ Ð½Ð°Ð·Ð½Ð°Ñена ÑÑÑаниÑа 21 ÑизиÑеÑкой памÑÑи. Ðод подгонки ÑÑÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð¿ ÑÑаеÑÑÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð½Ð°Ð·Ð½Ð°Ñение ÑÑÑаниÑÑ 20, поÑÐ¾Ð¼Ñ ÑÑо Ñакое оÑобÑажение пеÑекÑÑваеÑÑÑ Ð² Ñой же Ñамой памÑÑи кÑÑа как ÑÑÑаниÑа 16, и пÑÐ¸Ð²ÐµÐ´ÐµÑ Ðº неопÑималÑÐ½Ð¾Ð¼Ñ ÐºÑÑиÑованиÑ. Ðак Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑедположиÑÑ, Ñакой код знаÑиÑелÑно добавлÑÐµÑ ÑложноÑÑи в подÑиÑÑÐµÐ¼Ñ Ð²ÑÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи VM, но ÑезÑлÑÑÐ°Ñ ÑÑÐ¾Ð¸Ñ Ñого. Ðодгонка ÑÑÑÐ°Ð½Ð¸Ñ Ð´ÐµÐ»Ð°ÐµÑ Ð¿Ð°Ð¼ÑÑÑ VM пÑедÑказÑемой, как и обÑÑÐ½Ð°Ñ ÑизиÑеÑÐºÐ°Ñ Ð¿Ð°Ð¼ÑÑÑ, оÑноÑиÑелÑно пÑоизводиÑелÑноÑÑи кÑÑа. - [[conclusion]] == ÐаклÑÑение @@ -201,23 +204,3 @@ FreeBSD 3.X иÑполÑзÑÐµÑ "поÑледоваÑелÑнÑй ÑпиÑок Ðо во FreeBSD имееÑÑÑ Ð¿Ñоблема маÑÑÑабиÑованиÑ, коÑоÑой Ð½ÐµÑ Ð² Linux, поÑÐ¾Ð¼Ñ ÑÑо имееÑÑÑ Ð¾Ð³ÑаниÑенное ÑиÑло ÑÑÑÑкÑÑÑ `pv_entry`, и ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½Ð¾Ð²ÐµÐ½Ð¸Ñ Ð¿Ñоблем пÑи болÑÑом обÑеме ÑовмеÑÑно иÑполÑзÑемÑÑ Ð´Ð°Ð½Ð½ÑÑ . Ð ÑÑом ÑлÑÑае Ñ Ð²Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ Ð½ÐµÑ Ð²Ð°Ñка ÑÑÑÑкÑÑÑ `pv_entry`, даже еÑли Ñвободной памÑÑи Ñ Ð²Ð°ÑаеÑ. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾ÑÑаÑоÑно легко иÑпÑавлено ÑвелиÑением колиÑеÑÑва ÑÑÑÑкÑÑÑ `pv_entry` пÑи наÑÑÑойке, но на Ñамом деле нам нÑжно найÑи Ð»Ñ ÑÑий ÑпоÑоб делаÑÑ ÑÑо. ЧÑо каÑаеÑÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи под ÑаблиÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð¿ÑоÑив ÑÑ ÐµÐ¼Ñ Ñ `pv_entry`: Linux иÑполÑзÑÐµÑ "поÑÑоÑннÑе" ÑаблиÑÑ ÑÑÑаниÑ, коÑоÑÑе не ÑбÑаÑÑваÑÑÑÑ, но ÐµÐ¼Ñ Ð½Ðµ нÑÐ¶Ð½Ñ `pv_entry` Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ поÑенÑиалÑно оÑобÑажаемого pte. FreeBSD иÑполÑзÑÐµÑ "ÑбÑаÑÑваемÑе" ÑаблиÑÑ ÑÑÑаниÑ, но Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑеалÑно оÑобÑажаемого pte добавлÑеÑÑÑ ÑÑÑÑкÑÑÑа `pv_entry`. Я дÑмаÑ, ÑÑо иÑполÑзование памÑÑи бÑÐ´ÐµÑ Ð¿ÑимеÑно одинакова, Ñем более ÑÑо Ñ FreeBSD еÑÑÑ Ð°Ð»Ð³Ð¾ÑиÑмиÑеÑкое пÑеимÑÑ ÐµÑÑво, заклÑÑаÑÑееÑÑ Ð² ÑпоÑобноÑÑи ÑбÑаÑÑваÑÑ ÑаблиÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ñ Ð¾ÑÐµÐ½Ñ Ð¼Ð°Ð»Ñми накладнÑми ÑаÑÑ Ð¾Ð´Ð°Ð¼Ð¸. - -=== ÐаконеÑ, в Ñазделе о подгонке ÑÑÑÐ°Ð½Ð¸Ñ Ñ Ð¾ÑоÑо Ð±Ñ Ð±Ñло имеÑÑ ÐºÑаÑкое опиÑание Ñого, ÑÑо ÑÑо знаÑиÑ. Я не ÑовÑем ÑÑо понÑл. - -ÐнаеÑе ли вÑ, как ÑабоÑÐ°ÐµÑ Ð°Ð¿Ð¿Ð°ÑаÑнÑй кÑÑ Ð¿Ð°Ð¼ÑÑи L1? ÐбÑÑÑнÑÑ: ÐÑедÑÑавÑÑе маÑÐ¸Ð½Ñ Ñ 16ÐРоÑновной памÑÑи и ÑолÑко Ñо 128РпамÑÑи кÑÑа L1. РобÑем, ÑÑÐ¾Ñ ÐºÑÑ ÑабоÑÐ°ÐµÑ Ñак, ÑÑо каждÑй блок по 128РоÑновной памÑÑи иÑполÑзÑÐµÑ _Ñе же ÑамÑе_ 128РкÑÑа. ÐÑли Ð²Ñ Ð¾Ð±ÑаÑаеÑеÑÑ Ðº оÑновной памÑÑи по ÑмеÑÐµÐ½Ð¸Ñ 0, а заÑем к оÑновной памÑÑи по ÑмеÑÐµÐ½Ð¸Ñ 128Ð, Ð²Ñ Ð¿ÐµÑезапиÑÑваеÑе даннÑе кÑÑа, пÑоÑÑеннÑе по ÑмеÑÐµÐ½Ð¸Ñ 0! - -Я оÑÐµÐ½Ñ ÑилÑно вÑе ÑпÑоÑаÑ. То, ÑÑо Ñ ÑолÑко ÑÑо опиÑал, назÑваеÑÑÑ "напÑÑмÑÑ Ð¾ÑобÑажаемÑм" аппаÑаÑнÑм кÑÑем памÑÑи. ÐолÑÑинÑÑво ÑовÑеменнÑÑ ÐºÑÑей ÑвлÑÑÑÑÑ Ñак назÑваемÑми 2-ÑÑоÑонними множеÑÑвеннÑми аÑÑоÑиаÑивнÑми или 4-ÑÑоÑонними множеÑÑвеннÑми аÑÑоÑиаÑивнÑми кÑÑами. ÐножеÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð°ÑÑоÑиаÑивноÑÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð²Ð°Ð¼ обÑаÑаÑÑÑÑ Ðº вплоÑÑ Ð´Ð¾ N ÑазлиÑнÑм облаÑÑÑм памÑÑи, коÑоÑÑе иÑполÑзÑÑÑ Ð¾Ð´Ð½Ñ Ð¸ ÑÑ Ð¶Ðµ памÑÑÑ ÐºÑÑа без ÑниÑÑÐ¾Ð¶ÐµÐ½Ð¸Ñ Ñанее п омеÑеннÑÑ Ð² кÑÑ Ð´Ð°Ð½Ð½ÑÑ . Ðо ÑолÑко N. - -Так ÑÑо еÑли Ñ Ð¼ÐµÐ½Ñ Ð¸Ð¼ÐµÐµÑÑÑ 4-ÑÑоÑонний аÑÑоÑиаÑивнÑй кÑÑ, Ñ Ð¼Ð¾Ð³Ñ Ð¾Ð±ÑаÑиÑÑÑÑ Ðº памÑÑи по ÑмеÑÐµÐ½Ð¸Ñ 0, ÑмеÑÐµÐ½Ð¸Ñ 128Ð, 256Ри ÑмеÑÐµÐ½Ð¸Ñ 384K, заÑем Ñнова обÑаÑиÑÑÑÑ Ðº памÑÑи по ÑмеÑÐµÐ½Ð¸Ñ 0 и полÑÑÑ ÐµÐµ из кÑÑа L1. Ðднако, еÑли поÑле ÑÑого Ñ Ð¾Ð±ÑаÑÑÑÑ Ðº памÑÑи по ÑмеÑÐµÐ½Ð¸Ñ 512Ð, один из Ñанее помеÑеннÑÑ Ð² кÑÑ Ð¾Ð±ÑекÑов даннÑÑ Ð±ÑÐ´ÐµÑ Ð¸Ð· кÑÑа Ñдален. - -ÐÑо ÑÑезвÑÑайно важно... Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑинÑÑва обÑаÑений к памÑÑи пÑоÑеÑÑоÑа _ÑÑезвÑÑайно_ важно, ÑÑÐ¾Ð±Ñ Ð´Ð°Ð½Ð½Ñе Ð½Ð°Ñ Ð¾Ð´Ð¸Ð»Ð¸ÑÑ Ð² кÑÑе L1, Ñак как кÑÑ L1 ÑабоÑÐ°ÐµÑ Ð½Ð° ÑакÑовой ÑаÑÑоÑе ÑабоÑÑ Ð¿ÑоÑеÑÑоÑа. Ð ÑлÑÑае, еÑли даннÑÑ Ð² кÑÑе L1 не обнаÑÑживаеÑÑÑ, и они иÑÑÑÑÑ Ð² кÑÑе L2 или в оÑновной памÑÑи, пÑоÑеÑÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð¿ÑоÑÑаиваÑÑ, или, ÑкоÑее, ÑидеÑÑ, Ñложив ÑÑÑки, в ожидании оконÑÐ°Ð½Ð¸Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸Ð· оÑновной памÑÑи, Ñ Ð¾ÑÑ Ð·Ð° ÑÑо вÑÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ бÑло вÑполниÑÑ _ÑоÑни_ оР¿ÐµÑаÑий. ÐÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð¿Ð°Ð¼ÑÑÑ (динамиÑеÑкое ÐÐУ, коÑоÑое ÑÑÑановлено в компÑÑÑеÑе) ÑабоÑÐ°ÐµÑ Ð¿Ð¾ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñо ÑкоÑо ÑÑÑÑ ÑабоÑÑ ÑдÑа ÑовÑеменнÑÑ Ð¿ÑоÑеÑÑоÑов __медленно__. - -ХоÑоÑо, а ÑепеÑÑ ÑаÑÑмоÑÑим Ð¿Ð¾Ð´Ð³Ð¾Ð½ÐºÑ ÑÑÑаниÑ: ÐÑе ÑовÑеменнÑе кÑÑи памÑÑи ÑвлÑÑÑÑÑ Ñак назÑваемÑми _ÑизиÑеÑкими_ кÑÑами. Ðни кÑÑиÑÑÑÑ Ð°Ð´ÑеÑа ÑизиÑеÑкой памÑÑи, а не виÑÑÑалÑной. ÐÑо позволÑÐµÑ ÐºÑÑÑ Ð½Ðµ пÑинимаÑÑ Ð²Ð¾ внимание пеÑеклÑÑение конÑекÑÑов пÑоÑеÑÑов, ÑÑо оÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾. - -Ðо в миÑе UNIX(R) Ð²Ñ ÑабоÑаеÑе Ñ Ð²Ð¸ÑÑÑалÑнÑми адÑеÑнÑми пÑоÑÑÑанÑÑвами, а не Ñ ÑизиÑеÑкими. ÐÑÐ±Ð°Ñ Ð¿ÑогÑамма, вами напиÑаннаÑ, Ð¸Ð¼ÐµÐµÑ Ð´ÐµÐ»Ð¾ Ñ Ð²Ð¸ÑÑÑалÑнÑм адÑеÑнÑм пÑоÑÑÑанÑÑвом, ей пÑедоÑÑавленнÑм. РеалÑнÑе _ÑизиÑеÑкие_ ÑÑÑаниÑÑ, ÑооÑвеÑÑÑвÑÑÑие виÑÑÑалÑÐ½Ð¾Ð¼Ñ Ð°Ð´ÑеÑÐ½Ð¾Ð¼Ñ Ð¿ÑоÑÑÑанÑÑвÑ, не обÑзаÑелÑно ÑаÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ñ ÑизиÑеÑки поÑледоваÑелÑно! Ðа Ñамом деле Ñ Ð²Ð°Ñ Ð¼Ð¾Ð³ÑÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ð´Ð²Ðµ ÑÑÑаниÑÑ, коÑоÑÑе в адÑеÑном пÑоÑÑÑанÑÑве пÑоÑеÑÑов ÑвлÑÑÑÑÑ Ð ³ÑаниÑаÑими, но ÑаÑполагаÑÑимиÑÑ Ð¿Ð¾ ÑмеÑÐµÐ½Ð¸Ñ 0 и по ÑмеÑÐµÐ½Ð¸Ñ 128Рв _ÑизиÑеÑкой_ памÑÑи. - -ÐбÑÑно пÑогÑамма полагаеÑ, ÑÑо две гÑаниÑаÑие ÑÑÑаниÑÑ Ð±ÑдÑÑ ÐºÑÑиÑоваÑÑÑÑ Ð¾Ð¿ÑималÑно. То еÑÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обÑаÑаÑÑÑÑ Ðº обÑекÑам даннÑÑ Ð² Ð¾Ð±ÐµÐ¸Ñ ÑÑÑаниÑÐ°Ñ Ð±ÐµÐ· замеÑений в кÑÑе даннÑÑ Ð´ÑÑг дÑÑга. Ðо ÑÑо Ð¸Ð¼ÐµÐµÑ Ð¼ÐµÑÑо, еÑли ÑолÑко ÑизиÑеÑкие ÑÑÑаниÑÑ, ÑооÑвеÑÑÑвÑÑÑие виÑÑÑалÑÐ½Ð¾Ð¼Ñ Ð°Ð´ÑеÑÐ½Ð¾Ð¼Ñ Ð¿ÑоÑÑÑанÑÑвÑ, ÑаÑполагаÑÑÑÑ ÑÑдом (в Ñакой меÑе, ÑÑо попадаÑÑ Ð² кÑÑ). - -ÐÑо именно Ñо, ÑÑо вÑполнÑÐµÑ Ð¿Ð¾Ð´Ð³Ð¾Ð½ÐºÐ°. ÐмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð½Ð°Ð·Ð½Ð°ÑаÑÑ _ÑлÑÑайнÑе_ ÑизиÑеÑкие ÑÑÑаниÑÑ Ð²Ð¸ÑÑÑалÑнÑм адÑеÑам, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к неопÑималÑной ÑабоÑе кÑÑа, пÑи подгонке ÑÑÑÐ°Ð½Ð¸Ñ Ð²Ð¸ÑÑÑалÑнÑм адÑеÑам назнаÑаÑÑÑÑ _пÑимеÑно Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑие по поÑÑдкÑ_ ÑизиÑеÑкие ÑÑÑаниÑÑ. Таким обÑазом, пÑогÑÐ°Ð¼Ð¼Ñ Ð¼Ð¾Ð³ÑÑ Ð¿Ð¸ÑаÑÑÑÑ Ð² пÑедположении, ÑÑо Ñ Ð°ÑакÑеÑиÑÑики низлежаÑего аппаÑаÑного кÑÑа Ð´Ð»Ñ Ð²Ð¸ÑÑÑалÑного адÑеÑного пÑоÑÑÑанÑÑва бÑдÑÑ Ñаки ми же, как еÑли Ð±Ñ Ð¿ÑогÑамма ÑабоÑала непоÑÑедÑÑвенно в ÑизиÑеÑком адÑеÑном пÑоÑÑÑанÑÑве. - -ÐамеÑÑÑе, ÑÑо Ñ Ñказал "пÑимеÑно" Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑие, а не пÑоÑÑо "поÑледоваÑелÑнÑе". С ÑоÑки зÑÐµÐ½Ð¸Ñ Ð½Ð°Ð¿ÑÑмÑÑ Ð¾ÑобÑажаемого кÑÑа в 128Ð, ÑизиÑеÑкий адÑÐµÑ 0 одинаков Ñ ÑизиÑеÑким адÑеÑом 128Ð. Так ÑÑо две гÑаниÑаÑие ÑÑÑаниÑÑ Ð² ваÑем виÑÑÑалÑном адÑеÑном пÑоÑÑÑанÑÑве могÑÑ ÑаÑполагаÑÑÑÑ Ð¿Ð¾ ÑмеÑÐµÐ½Ð¸Ñ 128Ри 132Ð ÑизиÑеÑкой памÑÑи, но могÑÑ Ð»ÐµÐ³ÐºÐ¾ Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ð¿Ð¾ ÑмеÑÐµÐ½Ð¸Ñ 128Ри по ÑмеÑÐµÐ½Ð¸Ñ 4Ð ÑизиÑеÑкой памÑÑи, и имеÑÑ Ñе же ÑамÑе Ñ Ð°ÑакÑеÑиÑÑики ÑабоÑÑ ÐºÑÑа . Так ÑÑо пÑи подгонке _не нÑжно_ назнаÑаÑÑ Ð² дейÑÑвиÑелÑноÑÑи поÑледоваÑелÑнÑе ÑÑÑаниÑÑ ÑизиÑеÑкой памÑÑи Ð ¿Ð¾ÑледоваÑелÑнÑм ÑÑÑаниÑам виÑÑÑалÑной памÑÑи, доÑÑаÑоÑно пÑоÑÑо добиÑÑÑÑ ÑаÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑÑÑÐ°Ð½Ð¸Ñ Ð¿Ð¾ ÑоÑедÑÑÐ²Ñ Ð´ÑÑг Ñ Ð´ÑÑгом Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ ÑабоÑÑ ÐºÑÑа. diff --git a/documentation/content/ru/articles/vm-design/_index.po b/documentation/content/ru/articles/vm-design/_index.po new file mode 100644 index 0000000000..8dda5aa52d --- /dev/null +++ b/documentation/content/ru/articles/vm-design/_index.po @@ -0,0 +1,1356 @@ +# SOME DESCRIPTIVE TITLE +# Copyright (C) YEAR The FreeBSD Project +# This file is distributed under the same license as the FreeBSD Documentation package. +# Vladlen Popolitov <[email protected]>, 2025. +msgid "" +msgstr "" +"Project-Id-Version: FreeBSD Documentation VERSION\n" +"POT-Creation-Date: 2025-10-12 22:25+0300\n" +"PO-Revision-Date: 2025-07-05 04:45+0000\n" +"Last-Translator: Vladlen Popolitov <[email protected]>\n" +"Language-Team: Russian <https://translate-dev.freebsd.org/projects/" +"documentation/articlesvm-design_index/ru/>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.17\n" + +#. type: Yaml Front Matter Hash Value: description +#: documentation/content/en/articles/vm-design/_index.adoc:1 +#, no-wrap +msgid "An easy to follow description of the design of the FreeBSD virtual memory system" +msgstr "ÐÑоÑÑое и понÑÑное опиÑание аÑÑ Ð¸ÑекÑÑÑÑ ÑиÑÑÐµÐ¼Ñ Ð²Ð¸ÑÑÑалÑной памÑÑи FreeBSD" + +#. type: Title = +#: documentation/content/en/articles/vm-design/_index.adoc:1 +#: documentation/content/en/articles/vm-design/_index.adoc:11 +#, no-wrap +msgid "Design elements of the FreeBSD VM system" +msgstr "ÐлеменÑÑ Ð°ÑÑ Ð¸ÑекÑÑÑÑ ÑиÑÑÐµÐ¼Ñ Ð²Ð¸ÑÑÑалÑной памÑÑи во FreeBSD" + +#. type: delimited block = 4 +#: documentation/content/en/articles/vm-design/_index.adoc:46 +msgid "" +"This document is outdated and some sections do not accurately describe the " +"current state of the VM system. It is retained for historical purposes and " +"may be updated over time." +msgstr "" +"ÐÑÐ¾Ñ Ð´Ð¾ÐºÑÐ¼ÐµÐ½Ñ ÑÑÑаÑел, и некоÑоÑÑе ÑÐ°Ð·Ð´ÐµÐ»Ñ Ð±Ð¾Ð»ÑÑе не ÑооÑвеÑÑÑвÑÑÑ ÑекÑÑÐµÐ¼Ñ " +"ÑоÑÑоÑÐ½Ð¸Ñ ÑиÑÑÐµÐ¼Ñ Ð²Ð¸ÑÑÑалÑной памÑÑи. Ðн ÑÐ¾Ñ ÑанÑн в иÑÑоÑиÑеÑÐºÐ¸Ñ ÑелÑÑ Ð¸ " +"Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»Ñн в бÑдÑÑем." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:50 +msgid "Abstract" +msgstr "ÐнноÑаÑиÑ" + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:52 +msgid "Matthew Dillon <[email protected]>" +msgstr "Matthew Dillon <[email protected]>" + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:59 +msgid "" +"The title is really just a fancy way of saying that I am going to attempt to " +"describe the whole VM enchilada, hopefully in a way that everyone can " +"follow. For the last year I have concentrated on a number of major kernel " +"subsystems within FreeBSD, with the VM and Swap subsystems being the most " +"interesting and NFS being \"a necessary chore\". I rewrote only small " +"portions of the code. In the VM arena the only major rewrite I have done is " +"to the swap subsystem. Most of my work was cleanup and maintenance, with " +"only moderate code rewriting and no major algorithmic adjustments within the " +"VM subsystem. The bulk of the VM subsystem's theoretical base remains " +"unchanged and a lot of the credit for the modernization effort in the last " +"few years belongs to John Dyson and David Greenman. Not being a historian " +"like Kirk I will not attempt to tag all the various features with peoples " +"names, since I will invariably get it wrong." +msgstr "" +"ÐÑо название â пÑоÑÑо замÑÑловаÑÑй ÑпоÑоб ÑказаÑÑ, ÑÑо Ñ Ð¿Ð¾Ð¿ÑÑаÑÑÑ Ð¾Ð¿Ð¸ÑаÑÑ " +"вÑÑ ÑиÑÑÐµÐ¼Ñ Ð²Ð¸ÑÑÑалÑной памÑÑи (VM) Ñеликом, по возможноÑÑи Ñак, ÑÑÐ¾Ð±Ñ ÑÑо " +"бÑло понÑÑно каждомÑ.Ð ÑеÑение поÑледнего года Ñ ÑоÑÑедоÑоÑилÑÑ Ð½Ð° " +"неÑколÑÐºÐ¸Ñ Ð¾ÑновнÑÑ Ð¿Ð¾Ð´ÑиÑÑÐµÐ¼Ð°Ñ ÑдÑа FreeBSD. Ðаиболее инÑеÑеÑнÑми из Ð½Ð¸Ñ " +"ÑÑали подÑиÑÑÐµÐ¼Ñ VM и подкаÑки (Swap), Ñогда как ÑабоÑа Ñ NFS оказалаÑÑ, " +"ÑкоÑее, Â«Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾Ð¹ ÑÑÑиной». Я пеÑепиÑал лиÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑие ÑаÑÑи кода. Ð " +"облаÑÑи VM моей единÑÑвенной кÑÑпной пеÑеÑабоÑкой ÑÑала подÑиÑÑема подкаÑки. " +"РоÑновном Ð¼Ð¾Ñ ÑабоÑа заклÑÑалаÑÑ Ð² оÑиÑÑке и поддеÑжке кода, Ñ ÑмеÑеннÑми " +"пÑавками и без ÑеÑÑÑзнÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ алгоÑиÑмов в подÑиÑÑеме VM. ТеоÑеÑиÑеÑÐºÐ°Ñ " +"оÑнова VM-подÑиÑÑÐµÐ¼Ñ Ð¾ÑÑалаÑÑ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½Ð½Ð¾Ð¹, и лÑÐ²Ð¸Ð½Ð°Ñ Ð´Ð¾Ð»Ñ Ð·Ð°ÑлÑг в ÐµÑ " +"модеÑнизаÑии за поÑледние Ð³Ð¾Ð´Ñ Ð¿ÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ ÐÐ¶Ð¾Ð½Ñ ÐайÑÐ¾Ð½Ñ Ð¸ ÐÑÐ²Ð¸Ð´Ñ ÐÑинманÑ. " +"Я не иÑÑоÑик, в оÑлиÑие Ð¾Ñ ÐиÑка, поÑÑÐ¾Ð¼Ñ Ð½Ðµ ÑÑÐ°Ð½Ñ Ð¿ÑипиÑÑваÑÑ ÑазлиÑнÑе " +"ÑÑнкÑии конкÑеÑнÑм лÑдÑм â вÑÑ Ñавно где-нибÑÐ´Ñ Ð¾ÑибÑÑÑ." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:61 +msgid "'''" +msgstr "'''" + +#. type: Title == +#: documentation/content/en/articles/vm-design/_index.adoc:65 +#, no-wrap +msgid "Introduction" +msgstr "Ðведение" + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:81 +msgid "" +"Before moving along to the actual design let's spend a little time on the " +"necessity of maintaining and modernizing any long-living codebase. In the " +"programming world, algorithms tend to be more important than code and it is " +"precisely due to BSD's academic roots that a great deal of attention was " +"paid to algorithm design from the beginning. More attention paid to the " +"design generally leads to a clean and flexible codebase that can be fairly " +"easily modified, extended, or replaced over time. While BSD is considered " +"an \"old\" operating system by some people, those of us who work on it tend " +"to view it more as a \"mature\" codebase which has various components " +"modified, extended, or replaced with modern code. It has evolved, and " +"FreeBSD is at the bleeding edge no matter how old some of the code might " +"be. This is an important distinction to make and one that is unfortunately " +"lost to many people. The biggest error a programmer can make is to not " +"learn from history, and this is precisely the error that many other modern " +"operating systems have made. Windows NT(R) is the best example of this, and " +"the consequences have been dire. Linux also makes this mistake to some " +"degree-enough that we BSD folk can make small jokes about it every once in a " +"while, anyway. Linux's problem is simply one of a lack of experience and " +"history to compare ideas against, a problem that is easily and rapidly being " +"addressed by the Linux community in the same way it has been addressed in " +"the BSD community-by continuous code development. The Windows NT(R) folk, " +"on the other hand, repeatedly make the same mistakes solved by UNIX(R) " +"decades ago and then spend years fixing them. Over and over again. They " +"have a severe case of \"not designed here\" and \"we are always right " +"because our marketing department says so\". I have little tolerance for " +"anyone who cannot learn from history." +msgstr "" +"ÐеÑед Ñем, как пеÑейÑи непоÑÑедÑÑвенно к ÑÑÑеÑÑвÑÑÑей аÑÑ Ð¸ÑекÑÑÑе, поÑÑаÑим " +"немного вÑемени на ÑаÑÑмоÑÑение вопÑоÑа о Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи поддеÑжки и " +"модеÑнизаÑии лÑбого длиÑелÑно живÑÑего кода. РмиÑе пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ " +"алгоÑиÑÐ¼Ñ ÑÑановÑÑÑÑ Ð±Ð¾Ð»ÐµÐµ важнÑми, Ñем код, и именно из-за академиÑеÑÐºÐ¸Ñ " +"коÑней BSD изнаÑалÑно болÑÑое внимание ÑделÑлоÑÑ Ð¿ÑоÑабоÑке алгоÑиÑмов. " +"Ðнимание, Ñделенное аÑÑ Ð¸ÑекÑÑÑе, в обÑем оÑÑажаеÑÑÑ Ð½Ð° ÑÑноÑÑи и гибкоÑÑи " +"кода, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾ÑÑаÑоÑно легко изменен, ÑаÑÑиÑен или Ñ ÑеÑением " +"вÑемени заменен. ХоÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑÑиÑаÑÑ BSD \"ÑÑаÑой\" опеÑаÑионной " +"ÑиÑÑемой, Ñе Ð¸Ñ Ð½Ð°Ñ, кÑо ÑабоÑÐ°ÐµÑ Ð½Ð°Ð´ ней, видÑÑ ÐµÐµ ÑкоÑее ÑиÑÑемой Ñо " +"\"зÑелÑм\" кодом Ñ ÑазлиÑнÑми компоненÑами, коÑоÑÑе бÑли замененÑ, ÑаÑÑиÑÐµÐ½Ñ " +"или Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ñ ÑовÑеменнÑм кодом. Ðн ÑазвиваеÑÑÑ, и FreeBSD оÑÑаеÑÑÑ Ð¿ÐµÑедовой " +"ÑиÑÑемой, вне завиÑимоÑÑи Ð¾Ñ Ñого, наÑколÑко ÑÑаÑой Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑаÑÑÑ ÐºÐ¾Ð´Ð°. " +"ÐÑо важное оÑлиÑие, коÑоÑое, к ÑожалениÑ, не вÑеми понимаеÑÑÑ. Самой болÑÑой " +"оÑибкой, коÑоÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾Ð¿ÑÑÑиÑÑ Ð¿ÑогÑаммиÑÑ, ÑвлÑеÑÑÑ Ð¸Ð³Ð½Ð¾ÑиÑование " +"иÑÑоÑии, и ÑÑо именно Ñа оÑибка, коÑоÑÑÑ Ñделали многие дÑÑгие ÑовÑеменнÑе " +"опеÑаÑионнÑе ÑиÑÑемÑ. СамÑм ÑÑки пÑимеÑом здеÑÑ ÑвлÑеÑÑÑ Windows NT(R), и " +"поÑледÑÑÐ²Ð¸Ñ ÑжаÑнÑ. Linux Ñакже в некоÑоÑой ÑÑепени ÑовеÑÑил ÑÑÑ Ð¾ÑибкÑ-" +"доÑÑаÑоÑно, ÑÑÐ¾Ð±Ñ Ð¼Ñ, лÑди BSD, по кÑайней меÑе по ÑÐ°Ð·Ñ Ð¾ÑпÑÑÑили по ÑÑÐ¾Ð¼Ñ " +"Ð¿Ð¾Ð²Ð¾Ð´Ñ ÑÑÑкÑ. ÐÑоблема Linux заклÑÑаеÑÑÑ Ð¿ÑоÑÑо в оÑÑÑÑÑÑвии опÑÑа и иÑÑоÑии " +"Ð´Ð»Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¸Ð´ÐµÐ¹, пÑоблема, коÑоÑÐ°Ñ Ð»ÐµÐ³ÐºÐ¾ и бÑÑÑÑо ÑеÑаеÑÑÑ ÑообÑеÑÑвом " +"Linux ÑоÑно Ñак же, как она ÑеÑаеÑÑÑ Ð² ÑообÑеÑÑве BSD-поÑÑоÑнной ÑабоÑой над " +"кодом. РазÑабоÑÑики Windows NT(R), Ñ Ð´ÑÑгой ÑÑоÑонÑ, поÑÑоÑнно ÑовеÑÑаÑÑ Ñе " +"же ÑамÑе оÑибки, ÑÑо бÑли ÑеÑÐµÐ½Ñ Ð² UNIX(R) деÑÑÑки Ð»ÐµÑ Ð½Ð°Ð·Ð°Ð´, а заÑем ÑÑаÑÑÑ " +"Ð³Ð¾Ð´Ñ Ð½Ð° Ð¸Ñ ÑÑÑÑанение. Снова и Ñнова. ÐÑÑÑ Ð½ÐµÑколÑко ÑлÑÑаев \"пÑоÑабоÑка " +"аÑÑ Ð¸ÑекÑÑÑÑ Ð¾ÑÑÑÑÑÑвÑеÑ\" и \"Ð¼Ñ Ð²Ñегда пÑавÑ, поÑÐ¾Ð¼Ñ ÑÑо Ñак говоÑÐ¸Ñ Ð½Ð°Ñ " +"оÑдел пÑодаж\". Я Ð¿Ð»Ð¾Ñ Ð¾ пеÑеноÑÑ ÑÐµÑ , кого не ÑÑÐ¸Ñ Ð¸ÑÑоÑиÑ." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:86 +msgid "" +"Much of the apparent complexity of the FreeBSD design, especially in the VM/" +"Swap subsystem, is a direct result of having to solve serious performance " +"issues that occur under various conditions. These issues are not due to bad " +"algorithmic design but instead rise from environmental factors. In any " +"direct comparison between platforms, these issues become most apparent when " +"system resources begin to get stressed. As I describe FreeBSD's VM/Swap " +"subsystem the reader should always keep two points in mind:" +msgstr "" +"ÐолÑÑинÑÑво оÑевидной ÑложноÑÑи аÑÑ Ð¸ÑекÑÑÑÑ FreeBSD, оÑобенно в подÑиÑÑеме " +"VM/Swap, ÑвлÑеÑÑÑ Ð¿ÑÑмÑм ÑледÑÑвием Ñого, ÑÑо она ÑеÑÐ°ÐµÑ ÑеÑÑезнÑе пÑÐ¾Ð±Ð»ÐµÐ¼Ñ " +"Ñ Ð¿ÑоизводиÑелÑноÑÑÑÑ, коÑоÑÑе пÑоÑвлÑÑÑÑÑ Ð¿Ñи ÑазлиÑнÑÑ ÑÑловиÑÑ . ÐÑи " +"пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð²ÑÐ·Ð²Ð°Ð½Ñ Ð½Ðµ Ð¿Ð»Ð¾Ñ Ð¾Ð¹ пÑоÑабоÑкой алгоÑиÑмов, а возникаÑÑ Ð¸Ð· окÑÑжаÑÑÐ¸Ñ " +"ÑакÑоÑов. РлÑбом пÑÑмом ÑÑавнении Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð»Ð°ÑÑоÑмами ÑÑи пÑÐ¾Ð±Ð»ÐµÐ¼Ñ " +"пÑоÑвлÑÑÑÑÑ, когда ÑиÑÑемнÑе ÑеÑÑÑÑÑ Ð½Ð°ÑинаÑÑ Ð¸ÑÑоÑаÑÑÑÑ. Так как Ñ Ð¾Ð¿Ð¸ÑÑÐ²Ð°Ñ " +"подÑиÑÑÐµÐ¼Ñ VM/Swap во FreeBSD, Ñо ÑиÑаÑÐµÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ вÑегда имеÑÑ Ð² Ð²Ð¸Ð´Ñ Ð´Ð²Ð° " +"обÑÑоÑÑелÑÑÑва:" + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:88 +msgid "" +"The most important aspect of performance design is what is known as " +"\"Optimizing the Critical Path\". It is often the case that performance " +"optimizations add a little bloat to the code to make the critical path " +"perform better." +msgstr "" +"СамÑм важнÑм аÑпекÑом пÑи пÑоекÑиÑовании пÑоизводиÑелÑноÑÑи ÑвлÑеÑÑÑ Ñо, ÑÑо " +"назÑваеÑÑÑ \"опÑимизаÑией кÑиÑиÑеÑкого маÑÑÑÑÑа\". ЧаÑÑо ÑлÑÑаеÑÑÑ, ÑÑо " +"опÑимизаÑÐ¸Ñ Ð¿ÑоизводиÑелÑноÑÑи Ð´Ð°ÐµÑ Ð¿ÑиÑоÑÑ Ð¾Ð±Ñема кода Ñади Ñого, ÑÑÐ¾Ð±Ñ " +"кÑиÑиÑеÑкий маÑÑÑÑÑ ÑабоÑал бÑÑÑÑее." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:89 +msgid "" +"A solid, generalized design outperforms a heavily-optimized design over the " +"long run. While a generalized design may end up being slower than an heavily-" +"optimized design when they are first implemented, the generalized design " +"tends to be easier to adapt to changing conditions and the heavily-optimized " +"design winds up having to be thrown away." +msgstr "" +"ЧеÑкоÑÑÑ Ð¾Ð±Ñей аÑÑ Ð¸ÑекÑÑÑÑ Ð¾ÐºÐ°Ð·ÑваеÑÑÑ Ð»ÑÑÑе ÑилÑно опÑимизиÑованной " +"аÑÑ Ð¸ÑекÑÑÑÑ Ñ ÑеÑением вÑемени. Ðогда как обобÑÐµÐ½Ð½Ð°Ñ Ð°ÑÑ Ð¸ÑекÑÑÑа Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ " +"медленнее, Ñем опÑимизиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð°ÑÑ Ð¸ÑекÑÑÑа, пÑи пеÑвой ÑеализаÑии, пÑи " +"обобÑенной аÑÑ Ð¸ÑекÑÑÑе легÑе подÑÑÑаиваÑÑÑÑ Ð¿Ð¾Ð´ изменÑÑÑиеÑÑ ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ " +"ÑÑезмеÑно опÑимизиÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð°ÑÑ Ð¸ÑекÑÑÑа оказÑваеÑÑÑ Ð½ÐµÐ¿Ñигодной." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:93 +msgid "" +"Any codebase that will survive and be maintainable for years must therefore " +"be designed properly from the beginning even if it costs some performance. " +"Twenty years ago people were still arguing that programming in assembly was " +"better than programming in a high-level language because it produced code " +"that was ten times as fast. Today, the fallibility of that argument is " +"obvious - as are the parallels to algorithmic design and code generalization." +msgstr "" +"ÐÑбой код, коÑоÑÑй должен вÑжиÑÑ Ð¸ поддаваÑÑÑÑ Ð¿Ð¾Ð´Ð´ÐµÑжке годÑ, должен " +"поÑÑÐ¾Ð¼Ñ Ð±ÑÑÑ ÑÑаÑелÑно пÑодÑман Ñ Ñамого наÑала, даже еÑли ÑÑо ÑÑÐ¾Ð¸Ñ Ð¿Ð¾ÑеÑи " +"пÑоизводиÑелÑноÑÑи. ÐвадÑаÑÑ Ð»ÐµÑ Ð½Ð°Ð·Ð°Ð´ бÑли Ñе, кÑо оÑÑÑаивал пÑеимÑÑеÑÑво " +"пÑогÑаммиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° ÑзÑке аÑÑемблеÑа пеÑед пÑогÑаммиÑованием на ÑзÑке " +"вÑÑокого ÑÑовнÑ, поÑÐ¾Ð¼Ñ ÑÑо пеÑвÑй генеÑиÑовал в деÑÑÑÑ Ñаз более бÑÑÑÑÑй " +"код. РнаÑи дни оÑибоÑноÑÑÑ ÑÑого аÑгÑменÑа оÑевидна - можно пÑовеÑÑи " +"паÑаллели Ñ Ð¿Ð¾ÑÑÑоением алгоÑиÑмов и обобÑением кода." + +#. type: Title == +#: documentation/content/en/articles/vm-design/_index.adoc:95 +#, no-wrap +msgid "VM Objects" +msgstr "ÐбÑекÑÑ VM" + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:105 +msgid "" +"The best way to begin describing the FreeBSD VM system is to look at it from " +"the perspective of a user-level process. Each user process sees a single, " +"private, contiguous VM address space containing several types of memory " +"objects. These objects have various characteristics. Program code and " +"program data are effectively a single memory-mapped file (the binary file " +"being run), but program code is read-only while program data is copy-on-" +"write. Program BSS is just memory allocated and filled with zeros on " +"demand, called demand zero page fill. Arbitrary files can be memory-mapped " +"into the address space as well, which is how the shared library mechanism " +"works. Such mappings can require modifications to remain private to the " +"process making them. The fork system call adds an entirely new dimension to " +"the VM management problem on top of the complexity already given." +msgstr "" +"ÐÑÑÑе вÑего наÑаÑÑ Ð¾Ð¿Ð¸Ñание VM-ÑиÑÑÐµÐ¼Ñ FreeBSD Ñ Ð¿Ð¾Ð¿ÑÑки взглÑнÑÑÑ Ð½Ð° нее Ñ " +"ÑоÑки зÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого пÑоÑеÑÑа. ÐаждÑй полÑзоваÑелÑÑкий пÑоÑеÑÑ " +"Ð¸Ð¼ÐµÐµÑ ÐµÐ´Ð¸Ð½Ð¾Ðµ, пÑинадлежаÑее ÑолÑко ÐµÐ¼Ñ Ð¸ неÑазÑÑвное адÑеÑное пÑоÑÑÑанÑÑво " +"VM, ÑодеÑжаÑее неÑколÑко Ñипов обÑекÑов памÑÑи. ÐÑи обÑекÑÑ Ð¸Ð¼ÐµÑÑ ÑазлиÑнÑе " +"Ñ Ð°ÑакÑеÑиÑÑики. Ðод пÑогÑÐ°Ð¼Ð¼Ñ Ð¸ ее даннÑе ÑвлÑÑÑÑÑ ÐµÐ´Ð¸Ð½Ñм Ñайлом, " +"оÑобÑажаемÑм в памÑÑÑ (ÑÑо вÑполнÑÑÑийÑÑ Ð´Ð²Ð¾Ð¸ÑнÑй Ñайл), однако код " +"пÑогÑÐ°Ð¼Ð¼Ñ Ð´Ð¾ÑÑÑпен ÑолÑко Ð´Ð»Ñ ÑÑениÑ, когда как даннÑе пÑогÑÐ°Ð¼Ð¼Ñ ÑазмеÑаÑÑÑÑ " +"в Ñежиме копиÑованиÑ-пÑи-запиÑи. BSS пÑогÑÐ°Ð¼Ð¼Ñ Ð¿ÑедÑÑавлÑÐµÑ Ñобой вÑего лиÑÑ " +"вÑделеннÑÑ Ð¾Ð±Ð»Ð°ÑÑÑ Ð¿Ð°Ð¼ÑÑи, заполненнÑÑ, еÑли ÑÑо ÑÑебовалоÑÑ, нÑлÑми, ÑÑо " +"назÑваеÑÑÑ Ð¾Ð±Ð½Ñлением ÑÑÑÐ°Ð½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи по ÑÑебованиÑ. ÐÑделÑнÑе ÑÐ°Ð¹Ð»Ñ Ð¼Ð¾Ð³ÑÑ " +"Ñакже оÑобÑажаÑÑÑÑ Ð² адÑеÑное пÑоÑÑÑанÑÑво, именно Ñак ÑабоÑаÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑкие " +"библиоÑеки. Такие оÑобÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑебÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹, ÑÑÐ¾Ð±Ñ Ð¾ÑÑаваÑÑÑÑ " +"пÑинадлежаÑими пÑоÑеÑÑÑ, коÑоÑÑй Ð¸Ñ Ð²Ñполнил. СиÑÑемнÑй вÑзов fork добавлÑÐµÑ " +"пеÑÐµÐ²Ð¾Ð´Ð¸Ñ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ VM полноÑÑÑÑ Ð² новÑÑ Ð¿Ð»Ð¾ÑкоÑÑÑ, вдобавок к Ñже " +"имеÑÑимÑÑ ÑложноÑÑÑм." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:111 +msgid "" +"A program binary data page (which is a basic copy-on-write page) illustrates " +"the complexity. A program binary contains a preinitialized data section " +"which is initially mapped directly from the program file. When a program is " +"loaded into a process's VM space, this area is initially memory-mapped and " +"backed by the program binary itself, allowing the VM system to free/reuse " +"the page and later load it back in from the binary. The moment a process " +"modifies this data, however, the VM system must make a private copy of the " +"page for that process. Since the private copy has been modified, the VM " +"system may no longer free it, because there is no longer any way to restore " +"it later on." +msgstr "" +"ÐллÑÑÑÑиÑÑÐµÑ ÑложноÑÑÑ ÑÑÑаниÑа даннÑÑ Ð´Ð²Ð¾Ð¸Ñной пÑогÑÐ°Ð¼Ð¼Ñ (коÑоÑÐ°Ñ ÑвлÑеÑÑÑ " +"ÑÑÑаниÑей копиÑÑемой-пÑи-запиÑи). ÐвоиÑÐ½Ð°Ñ Ð¿ÑогÑамма ÑодеÑÐ¶Ð¸Ñ ÑекÑÐ¸Ñ " +"пÑедваÑиÑелÑно иниÑиализиÑованнÑÑ Ð´Ð°Ð½Ð½ÑÑ , коÑоÑÐ°Ñ Ð¿ÐµÑвонаÑалÑно оÑобÑажаеÑÑÑ " +"непоÑÑедÑÑвенно из Ñайла пÑогÑаммÑ. Ðогда пÑогÑамма загÑÑжаеÑÑÑ Ð² Vm-" +"пÑоÑÑÑанÑÑво пÑоÑеÑÑа, ÑÑа облаÑÑÑ ÑнаÑала оÑобÑажаеÑÑÑ Ð² памÑÑÑ Ð¸ " +"поддеÑживаеÑÑÑ Ð±Ð¸Ð½Ð°ÑнÑм Ñайлом пÑогÑаммÑ, позволÑÑ VM-ÑиÑÑеме оÑвобождаÑÑ/" +"повÑоÑно иÑполÑзоваÑÑ ÑÑÑаниÑÑ, а поÑом загÑÑжаÑÑ ÐµÐµ Ñнова из бинаÑного " +"Ñайла. Ðднако в моменÑ, когда пÑоÑеÑÑ Ð¸Ð·Ð¼ÐµÐ½ÑÐµÑ ÑÑи даннÑе, VM-ÑиÑÑема должна " +"ÑделаÑÑ ÐºÐ¾Ð¿Ð¸Ñ ÑÑÑаниÑÑ, пÑинадлежаÑÑÑ ÑолÑко ÑÑÐ¾Ð¼Ñ Ð¿ÑоÑеÑÑÑ. Так как ÑÑа " +"ÐºÐ¾Ð¿Ð¸Ñ Ð±Ñла изменена, Ñо VM-ÑиÑÑема не Ð¼Ð¾Ð¶ÐµÑ Ð±Ð¾Ð»ÑÑе оÑвобождаÑÑ ÑÑÑ ÑÑÑаниÑÑ, " +"Ñак как впоÑледÑÑвии ее невозможно бÑÐ´ÐµÑ Ð²Ð¾ÑÑÑановиÑÑ." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:118 +msgid "" +"You will notice immediately that what was originally a simple file mapping " +"has become much more complex. Data may be modified on a page-by-page basis " +"whereas the file mapping encompasses many pages at once. The complexity " +"further increases when a process forks. When a process forks, the result is " +"two processes-each with their own private address spaces, including any " +"modifications made by the original process prior to the call to `fork()`. " +"It would be silly for the VM system to make a complete copy of the data at " +"the time of the `fork()` because it is quite possible that at least one of " +"the two processes will only need to read from that page from then on, " +"allowing the original page to continue to be used. What was a private page " +"is made copy-on-write again, since each process (parent and child) expects " +"their own personal post-fork modifications to remain private to themselves " +"and not affect the other." +msgstr "" +"ÐÑ ÑÑÑ Ð¶Ðµ замеÑиÑе, ÑÑо Ñо, ÑÑо ÑнаÑала бÑло пÑоÑÑÑм оÑобÑажением Ñайла в " +"памÑÑÑ, ÑÑановиÑÑÑ Ð³Ð¾Ñаздо более ÑложнÑм пÑедмеÑом. ÐаннÑе могÑÑ " +"модиÑиÑиÑоваÑÑÑÑ Ð¿Ð¾ÑÑÑаниÑно, когда как оÑобÑажение Ñайла вÑполнÑеÑÑÑ Ð´Ð»Ñ " +"Ð¼Ð½Ð¾Ð³Ð¸Ñ ÑÑÑÐ°Ð½Ð¸Ñ Ð·Ð° Ñаз. СложноÑÑÑ ÐµÑе более ÑвелиÑиваеÑÑÑ, когда пÑоÑеÑÑ " +"вÑполнÑÐµÑ Ð²Ñзов fork. ÐÑи ÑÑом поÑождаÑÑÑÑ Ð´Ð²Ð° пÑоÑеÑÑа-каждÑй Ñо Ñ " +"ÑобÑÑвеннÑм адÑеÑнÑм пÑоÑÑÑанÑÑвом, вклÑÑаÑÑим вÑе изменениÑ, вÑполненнÑе " +"иÑÑ Ð¾Ð´Ð½Ñм пÑоÑеÑÑом до вÑзова ÑÑнкÑии `fork()`. ÐÑло Ð±Ñ Ð³Ð»Ñпо Ð´Ð»Ñ VM-ÑиÑÑÐµÐ¼Ñ " +"делаÑÑ Ð¿Ð¾Ð»Ð½ÑÑ ÐºÐ¾Ð¿Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð²Ñзова `fork()`, Ñак как веÑÑма " +"веÑоÑÑно, ÑÑо один из двÑÑ Ð¿ÑоÑеÑÑов бÑÐ´ÐµÑ Ð½Ñжен ÑолÑко Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¸Ð· Ñой " +"ÑÑÑаниÑÑ, ÑÑо позволÑÐµÑ Ð¸ÑполÑзование иÑÑ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑаниÑÑ. То, ÑÑо бÑло " +"ÑÑÑаниÑей, пÑинадлежаÑей ÑолÑко пÑоÑеÑÑÑ, ÑделаеÑÑÑ Ñнова ÑÑÑаниÑей, " +"копиÑÑемой пÑи запиÑи, Ñак как каждÑй из пÑоÑеÑÑов (и ÑодиÑелÑ, и поÑомок) " +"полагаÑÑ, ÑÑо Ð¸Ñ ÑобÑÑвеннÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле ÑазвеÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð¿ÑинадлежаÑÑ " +"ÑолÑко им, и не заÑÑонÑÑ ÑодÑÑвеннÑй пÑоÑеÑÑ." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:127 +msgid "" +"FreeBSD manages all of this with a layered VM Object model. The original " +"binary program file winds up being the lowest VM Object layer. A copy-on-" +"write layer is pushed on top of that to hold those pages which had to be " +"copied from the original file. If the program modifies a data page " +"belonging to the original file the VM system takes a fault and makes a copy " +"of the page in the higher layer. When a process forks, additional VM Object " +"layers are pushed on. This might make a little more sense with a fairly " +"basic example. A `fork()` is a common operation for any *BSD system, so " +"this example will consider a program that starts up, and forks. When the " +"process starts, the VM system creates an object layer, let's call this A:" +msgstr "" +"FreeBSD ÑпÑавлÑÐµÑ Ð²Ñем ÑÑим пÑи помоÑи многоÑÑовневой модели VM-обÑекÑов. " +"ÐÑÑ Ð¾Ð´Ð½Ñй Ñайл Ñ Ð´Ð²Ð¾Ð¸Ñной пÑогÑаммой пеÑеноÑиÑÑÑ Ð½Ð° ÑамÑй нижний ÑÑÐ¾Ð²ÐµÐ½Ñ " +"обÑекÑов VM. УÑÐ¾Ð²ÐµÐ½Ñ ÑÑÑаниÑ, копиÑÑемÑÑ Ð¿Ñи запиÑи, Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑ Ð²ÑÑе него, и " +"Ñ ÑÐ°Ð½Ð¸Ñ Ñе ÑÑÑаниÑÑ, коÑоÑÑе бÑли ÑкопиÑÐ¾Ð²Ð°Ð½Ñ Ð¸Ð· иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ñайла. ÐÑли " +"пÑогÑамма модиÑиÑиÑÑÐµÑ ÑÑÑаниÑÑ Ð´Ð°Ð½Ð½ÑÑ , оÑноÑÑÑиеÑÑ Ðº иÑÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑайлÑ, Ñо " +"ÑиÑÑема VM обнаÑÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÑо и пеÑеноÑÐ¸Ñ ÐºÐ¾Ð¿Ð¸Ñ ÑÑой ÑÑÑаниÑÑ Ð½Ð° более вÑÑокий " +"ÑÑовенÑ. Ðогда пÑоÑеÑÑ ÑазвеÑвлÑеÑÑÑ, добавлÑÑÑÑÑ Ð½Ð¾Ð²Ñе ÑÑовни VM-обÑекÑов. " +"ÐÑо можно показаÑÑ Ð½Ð° пÑоÑÑом пÑимеÑе. ФÑнкÑÐ¸Ñ `fork()` ÑвлÑеÑÑÑ Ð¾Ð±Ñей " +"опеÑаÑией Ð´Ð»Ñ Ð²ÑÐµÑ ÑиÑÑем *BSD, Ñак ÑÑо в ÑÑом пÑимеÑе бÑÐ´ÐµÑ ÑаÑÑмаÑÑиваÑÑÑÑ " +"пÑогÑамма, коÑоÑÐ°Ñ Ð·Ð°Ð¿ÑÑкаеÑÑÑ, а заÑем ÑазвеÑвлÑеÑÑÑ. Ðогда пÑоÑеÑÑ " +"запÑÑкаеÑÑÑ, VM-ÑиÑÑема ÑÐ¾Ð·Ð´Ð°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑй ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¾Ð±ÑекÑов, обознаÑим его A:" + +#. type: Positional ($1) AttributeList argument for macro 'image' +#: documentation/content/en/articles/vm-design/_index.adoc:128 +#, no-wrap +msgid "A picture" +msgstr "РиÑÑнок" + +#. type: Target for macro image +#: documentation/content/en/articles/vm-design/_index.adoc:128 +#, no-wrap +msgid "fig1.png" +msgstr "fig1.png" + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:133 +msgid "" +"A represents the file-pages may be paged in and out of the file's physical " +"media as necessary. Paging in from the disk is reasonable for a program, " +"but we really do not want to page back out and overwrite the executable. " +"The VM system therefore creates a second layer, B, that will be physically " +"backed by swap space:" +msgstr "" +"A ÑооÑвеÑÑÑвÑÐµÑ ÑайлÑ-по Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи ÑÑÑаниÑÑ Ð¿Ð°Ð¼ÑÑи могÑÑ Ð²ÑÑвобождаÑÑÑÑ " +"и подгÑÑжаÑÑÑÑ Ñ Ð½Ð¾ÑиÑÐµÐ»Ñ Ñайла. ÐодгÑÑзка Ñ Ð´Ð¸Ñка Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ " +"пÑогÑамме, однако на Ñамом деле Ð¼Ñ Ð½Ðµ Ñ Ð¾Ñим, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð° запиÑÑвалаÑÑ Ð¾Ð±ÑаÑно " +"в Ñайл. ÐоÑÑÐ¾Ð¼Ñ VM-ÑиÑÑема ÑÐ¾Ð·Ð´Ð°ÐµÑ Ð²ÑоÑой ÑÑовенÑ, B, коÑоÑÑй ÑизиÑеÑки " +"поддеÑживаеÑÑÑ Ð´Ð¸ÑковÑм пÑоÑÑÑанÑÑвом подкаÑки:" + +#. type: Target for macro image +#: documentation/content/en/articles/vm-design/_index.adoc:134 +#, no-wrap +msgid "fig2.png" +msgstr "fig2.png" + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:139 +msgid "" +"On the first write to a page after this, a new page is created in B, and its " +"contents are initialized from A. All pages in B can be paged in or out to a " +"swap device. When the program forks, the VM system creates two new object " +"layers-C1 for the parent, and C2 for the child-that rest on top of B:" +msgstr "" +"ÐÑи пеÑвой запиÑи в ÑÑÑаниÑÑ Ð¿Ð¾Ñле вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑой опеÑаÑии, в B ÑоздаеÑÑÑ " +"Ð½Ð¾Ð²Ð°Ñ ÑÑÑаниÑа, ÑодеÑжимое коÑоÑой беÑеÑÑÑ Ð¸Ð· A. ÐÑе ÑÑÑаниÑÑ Ð² B могÑÑ " +"ÑбÑаÑÑваÑÑÑÑ Ð¸ ÑÑиÑÑваÑÑÑÑ Ð¸Ð· ÑÑÑÑойÑÑва подкаÑки. Ðогда пÑогÑамма веÑвиÑÑÑ, " +"VM-ÑиÑÑема ÑÐ¾Ð·Ð´Ð°ÐµÑ Ð´Ð²Ð° новÑÑ ÑÑÐ¾Ð²Ð½Ñ Ð¾Ð±ÑекÑов-C1 Ð´Ð»Ñ Ð¿Ð¾ÑождаÑÑего пÑоÑеÑÑа и " +"C2 Ð´Ð»Ñ Ð¿Ð¾Ñожденного-они ÑаÑполагаÑÑÑÑ Ð¿Ð¾Ð²ÐµÑÑ B:" + +#. type: Target for macro image +#: documentation/content/en/articles/vm-design/_index.adoc:140 +#, no-wrap +msgid "fig3.png" +msgstr "fig3.png" + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:151 +msgid "" +"In this case, let's say a page in B is modified by the original parent " +"process. The process will take a copy-on-write fault and duplicate the page " +"in C1, leaving the original page in B untouched. Now, let's say the same " +"page in B is modified by the child process. The process will take a copy-on-" +"write fault and duplicate the page in C2. The original page in B is now " +"completely hidden since both C1 and C2 have a copy and B could theoretically " +"be destroyed if it does not represent a \"real\" file; however, this sort of " +"optimization is not trivial to make because it is so fine-grained. FreeBSD " +"does not make this optimization. Now, suppose (as is often the case) that " +"the child process does an `exec()`. Its current address space is usually " +"replaced by a new address space representing a new file. In this case, the " +"C2 layer is destroyed:" +msgstr "" +"Ð ÑÑом ÑлÑÑае, допÑÑÑим, ÑÑо ÑÑÑаниÑа в B бÑла изменена наÑалÑнÑм " +"ÑодиÑелÑÑким пÑоÑеÑÑом. РпÑоÑеÑÑе Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ ÑиÑÑаÑÐ¸Ñ ÐºÐ¾Ð¿Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñи запиÑи " +"и ÑÑÑаниÑа ÑкопиÑÑеÑÑÑ Ð² C1, пÑи ÑÑом иÑÑ Ð¾Ð´Ð½Ð°Ñ ÑÑÑаниÑа оÑÑанеÑÑÑ Ð² B " +"неÑÑонÑÑой. ТепеÑÑ Ð´Ð¾Ð¿ÑÑÑим, ÑÑо Ñа же ÑÐ°Ð¼Ð°Ñ ÑÑÑаниÑа в B изменÑеÑÑÑ " +"поÑожденнÑм пÑоÑеÑÑом. РпÑоÑеÑÑе Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ ÑиÑÑаÑÐ¸Ñ ÐºÐ¾Ð¿Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñи запиÑи " +"и ÑÑÑаниÑа ÑкопиÑÑеÑÑÑ Ð² C2. ÐÑÑ Ð¾Ð´Ð½Ð°Ñ ÑÑÑаниÑа в B ÑепеÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ ÑкÑÑÑа, " +"Ñак как и C1, и C2 имеÑÑ ÐºÐ¾Ð¿Ð¸Ð¸, а B ÑеоÑеÑиÑеÑки Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑниÑÑожена, еÑли " +"она не пÑедÑÑавлÑÐµÑ Ñобой \"ÑеалÑного\" Ñайла). Ðднако ÑакÑÑ Ð¾Ð¿ÑимизаÑÐ¸Ñ Ð½Ðµ " +"Ñак Ñж пÑоÑÑо оÑÑÑеÑÑвиÑÑ, поÑÐ¾Ð¼Ñ ÑÑо она делаеÑÑÑ Ð½Ð° ÑÑовне Ð¼ÐµÐ»ÐºÐ¸Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ. " +"Ðо FreeBSD ÑÐ°ÐºÐ°Ñ Ð¾Ð¿ÑимизаÑÐ¸Ñ Ð½Ðµ вÑполнÑеÑÑÑ. ТепеÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸Ð¼ (а ÑÑо ÑаÑÑо " +"ÑлÑÑаеÑÑÑ), ÑÑо поÑожденнÑй пÑоÑеÑÑ Ð²ÑполнÑÐµÑ Ð²Ñзов `exec()`. Ðго ÑекÑÑее " +"адÑеÑное пÑоÑÑÑанÑÑво обÑÑно заменÑеÑÑÑ Ð½Ð¾Ð²Ñм адÑеÑнÑм пÑоÑÑÑанÑÑвом, " +"пÑедÑÑавлÑÑÑим новÑй Ñайл. Ð ÑÑом ÑлÑÑае ÑÑÐ¾Ð²ÐµÐ½Ñ C2 ÑниÑÑожаеÑÑÑ:" + +#. type: Target for macro image +#: documentation/content/en/articles/vm-design/_index.adoc:152 +#, no-wrap +msgid "fig4.png" +msgstr "fig4.png" + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:158 +msgid "" +"In this case, the number of children of B drops to one, and all accesses to " +"B now go through C1. This means that B and C1 can be collapsed together. " +"Any pages in B that also exist in C1 are deleted from B during the " +"collapse. Thus, even though the optimization in the previous step could not " +"be made, we can recover the dead pages when either of the processes exit or " +"`exec()`." +msgstr "" +"Ð ÑÑом ÑлÑÑае колиÑеÑÑво поÑомков B ÑÑановиÑÑÑ ÑавнÑм Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸ вÑе обÑаÑÐµÐ½Ð¸Ñ " +"к B ÑепеÑÑ Ð²ÑполнÑÑÑÑÑ ÑеÑез C1. ÐÑо ознаÑаеÑ, ÑÑо B и C1 могÑÑ Ð±ÑÑÑ " +"обÑединенÑ. ÐÑе ÑÑÑаниÑÑ Ð² B, коÑоÑÑе Ñакже ÑÑÑеÑÑвÑÑÑ Ð¸ в C1, во вÑÐµÐ¼Ñ " +"обÑÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸Ð· B ÑдалÑÑÑÑÑ. Таким обÑазом, Ñ Ð¾ÑÑ Ð¾Ð¿ÑимизаÑÐ¸Ñ Ð½Ð° пÑедÑдÑÑем " +"Ñаге Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ делаÑÑÑÑ, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ воÑÑÑановиÑÑ Ð¼ÐµÑÑвÑе ÑÑÑаниÑÑ Ð¿Ñи оконÑании " +"ÑабоÑÑ Ð¿ÑоÑеÑÑов или пÑи вÑзове `exec()`." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:165 +msgid "" +"This model creates a number of potential problems. The first is that you " +"can wind up with a relatively deep stack of layered VM Objects which can " +"cost scanning time and memory when you take a fault. Deep layering can " +"occur when processes fork and then fork again (either parent or child). The " +"second problem is that you can wind up with dead, inaccessible pages deep in " +"the stack of VM Objects. In our last example if both the parent and child " +"processes modify the same page, they both get their own private copies of " +"the page and the original page in B is no longer accessible by anyone. That " +"page in B can be freed." +msgstr "" +"Ð¢Ð°ÐºÐ°Ñ Ð¼Ð¾Ð´ÐµÐ»Ñ ÑÐ¾Ð·Ð´Ð°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑое колиÑеÑÑво поÑенÑиалÑнÑÑ Ð¿Ñоблем. ÐеÑваÑ, Ñ " +"коÑоÑой Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑолкнÑÑÑÑÑ, заклÑÑаеÑÑÑ Ð² ÑÑавниÑелÑно болÑÑой " +"поÑледоваÑелÑноÑÑи ÑÑовней обÑекÑов VM, на ÑканиÑование коÑоÑÑÑ ÑÑаÑиÑÑÑ " +"вÑÐµÐ¼Ñ Ð¸ памÑÑÑ. ÐолÑÑое колиÑеÑÑво ÑÑовней Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ, когда пÑоÑеÑÑÑ " +"ÑазвеÑвлÑÑÑÑÑ, а заÑем ÑазвеÑвлÑÑÑÑÑ ÐµÑе Ñаз (как поÑожденнÑе, Ñак и " +"поÑождаÑÑие). ÐÑоÑÐ°Ñ Ð¿Ñоблема заклÑÑаеÑÑÑ Ð² Ñом, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑолкнÑÑÑÑÑ Ñ " +"меÑÑвÑми, недоÑÑÑпнÑми ÑÑÑаниÑами глÑбоко в иеÑаÑÑ Ð¸Ð¸ обÑекÑов VM. РнаÑем " +"поÑледнем пÑимеÑе еÑли как ÑодиÑелÑ, Ñак и поÑомок изменÑÑÑ Ð¾Ð´Ð½Ñ Ð¸ ÑÑ Ð¶Ðµ " +"ÑÑÑаниÑÑ, они оба полÑÑаÑÑ ÑобÑÑвеннÑе копии ÑÑÑаниÑÑ, а иÑÑ Ð¾Ð´Ð½Ð°Ñ ÑÑÑаниÑа в " +"B ÑÑановиÑÑÑ Ð½Ð¸ÐºÐ¾Ð¼Ñ Ð½Ðµ доÑÑÑпной. ÑÐ°ÐºÐ°Ñ ÑÑÑаниÑа в B Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²ÑÑвобождена." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:176 +msgid "" +"FreeBSD solves the deep layering problem with a special optimization called " +"the \"All Shadowed Case\". This case occurs if either C1 or C2 take " +"sufficient COW faults to completely shadow all pages in B. Lets say that C1 " +"achieves this. C1 can now bypass B entirely, so rather then have C1->B->A " +"and C2->B->A we now have C1->A and C2->B->A. But look what also happened-" +"now B has only one reference (C2), so we can collapse B and C2 together. " +"The end result is that B is deleted entirely and we have C1->A and C2->A. " +"It is often the case that B will contain a large number of pages and neither " +"C1 nor C2 will be able to completely overshadow it. If we fork again and " +"create a set of D layers, however, it is much more likely that one of the D " +"layers will eventually be able to completely overshadow the much smaller " +"dataset represented by C1 or C2. The same optimization will work at any " +"point in the graph and the grand result of this is that even on a heavily " +"forked machine VM Object stacks tend to not get much deeper then 4. This is " +"true of both the parent and the children and true whether the parent is " +"doing the forking or whether the children cascade forks." +msgstr "" +"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 не " +"ÑаÑÑо бÑваÑÑ Ð³Ð»Ñбже ÑеÑÑÑÐµÑ ÑÑовней. ÐÑо Ñак как Ð´Ð»Ñ Ð¿Ð¾ÑождаÑÑего, Ñак и Ð´Ð»Ñ " +"поÑожденного пÑоÑеÑÑов, и оÑÑаеÑÑÑ Ð² Ñиле как в ÑлÑÑае, когда веÑвление " +"Ð´ÐµÐ»Ð°ÐµÑ ÑодиÑелÑ, Ñак и в ÑлÑÑае, когда веÑвление вÑполнÑÐµÑ Ð¿Ð¾Ñомок." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:180 +msgid "" +"The dead page problem still exists in the case where C1 or C2 do not " +"completely overshadow B. Due to our other optimizations this case does not " +"represent much of a problem and we simply allow the pages to be dead. If " +"the system runs low on memory it will swap them out, eating a little swap, " +"but that is it." +msgstr "" +"ÐÑоблема Ñ Ð¼ÐµÑÑвой ÑÑÑаниÑей вÑе еÑе Ð¸Ð¼ÐµÐµÑ Ð¼ÐµÑÑо, когда C1 или C2 не " +"полноÑÑÑÑ Ð¿ÐµÑекÑÑваÑÑ B. Ðз-за дÑÑÐ³Ð¸Ñ Ð¿ÑименÑемÑÑ Ð½Ð°Ð¼Ð¸ меÑодов опÑимизаÑии " +"ÑÑÐ¾Ñ ÑлÑÑай не пÑедÑÑавлÑÐµÑ Ð±Ð¾Ð»ÑÑой пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¸ Ð¼Ñ Ð¿ÑоÑÑо позволÑем Ñаким " +"ÑÑÑаниÑам ÑÑÑеÑÑвоваÑÑ. ÐÑли ÑиÑÑема иÑпÑÑÑÐ²Ð°ÐµÑ Ð½ÐµÑ Ð²Ð°ÑÐºÑ Ð¾Ð¿ÐµÑаÑивной памÑÑи, " +"она вÑполнÑÐµÑ Ð¸Ñ Ð²ÑгÑÑÐ·ÐºÑ Ð² облаÑÑÑ Ð¿Ð¾Ð´ÐºÐ°Ñки, ÑÑо Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑое " +"пÑоÑÑÑанÑÑво в облаÑÑи подкаÑки, но ÑÑо вÑе." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:184 +msgid "" +"The advantage to the VM Object model is that `fork()` is extremely fast, " +"since no real data copying need take place. The disadvantage is that you " +"can build a relatively complex VM Object layering that slows page fault " +"handling down a little, and you spend memory managing the VM Object " +"structures. The optimizations FreeBSD makes proves to reduce the problems " +"enough that they can be ignored, leaving no real disadvantage." +msgstr "" +"ÐÑеимÑÑеÑÑво модели VM-обÑекÑов заклÑÑаеÑÑÑ Ð² оÑÐµÐ½Ñ Ð±ÑÑÑÑом вÑполнении " +"ÑÑнкÑии `fork()`, Ñак как пÑи ÑÑом не вÑполнÑеÑÑÑ ÑеалÑного копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ " +"даннÑÑ . ÐинÑÑом ÑÑого Ð¿Ð¾Ð´Ñ Ð¾Ð´Ð° ÑвлÑеÑÑÑ Ñо, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе поÑÑÑоиÑÑ " +"ÑÑавниÑелÑно ÑложнÑÑ Ð¸ÐµÑаÑÑ Ð¸Ñ Ð¾Ð±ÑекÑов VM, коÑоÑÐ°Ñ Ð½ÐµÑколÑко замедлÑÐµÑ " +"обÑабоÑÐºÑ ÑиÑÑаÑий оÑÑÑÑÑÑÐ²Ð¸Ñ ÑÑÑÐ°Ð½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи, и к ÑÐ¾Ð¼Ñ Ð¶Ðµ ÑÑаÑиÑÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð½Ð° " +"ÑпÑавление ÑÑÑÑкÑÑÑами обÑекÑов VM. ÐÑÐ¸ÐµÐ¼Ñ Ð¾Ð¿ÑимизаÑии, пÑименÑемÑе во " +"FreeBSD, позволÑÑÑ ÑнизиÑÑ Ð·Ð½Ð°ÑимоÑÑÑ ÑÑÐ¸Ñ Ð¿Ñоблем до ÑÑепени, когда Ð¸Ñ " +"можно без оÑобÑÑ Ð¿Ð¾ÑеÑÑ Ð¸Ð³Ð½Ð¾ÑиÑоваÑÑ." + +#. type: Title == +#: documentation/content/en/articles/vm-design/_index.adoc:186 +#, no-wrap +msgid "SWAP Layers" +msgstr "УÑовни облаÑÑи подкаÑки" + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:194 +msgid "" +"Private data pages are initially either copy-on-write or zero-fill pages. " +"When a change, and therefore a copy, is made, the original backing object " +"(usually a file) can no longer be used to save a copy of the page when the " +"VM system needs to reuse it for other purposes. This is where SWAP comes " +"in. SWAP is allocated to create backing store for memory that does not " +"otherwise have it. FreeBSD allocates the swap management structure for a VM " +"Object only when it is actually needed. However, the swap management " +"structure has had problems historically:" +msgstr "" +"СÑÑаниÑÑ Ñ ÑобÑÑвеннÑми даннÑми пеÑвонаÑалÑно ÑвлÑÑÑÑÑ ÑÑÑаниÑами, " +"копиÑÑемÑми пÑи запиÑи или заполнÑемÑми нÑлÑми. Ðогда вÑполнÑеÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ðµ, " +"и, ÑооÑвеÑÑÑвенно, копиÑование, наÑалÑное Ñ ÑанилиÑе обÑекÑа (обÑÑно Ñайл) не " +"Ð¼Ð¾Ð¶ÐµÑ Ð±Ð¾Ð»ÑÑе иÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¿Ð¸Ð¸ ÑÑÑаниÑÑ, когда VM-ÑиÑÑеме " +"нÑжно иÑполÑзоваÑÑ ÐµÐµ повÑоÑно Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ Ñелей. Ð ÑÑÐ¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ð° помоÑÑ " +"пÑÐ¸Ñ Ð¾Ð´Ð¸Ñ Ð¾Ð±Ð»Ð°ÑÑÑ Ð¿Ð¾Ð´ÐºÐ°Ñки. ÐблаÑÑÑ Ð¿Ð¾Ð´ÐºÐ°Ñки вÑделÑеÑÑÑ Ð´Ð»Ñ Ð¾ÑганизаÑии " +"Ñ ÑанилиÑа памÑÑи, коÑоÑÐ°Ñ Ð¸Ð½Ð°Ñе не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾ÑÑÑпна. FreeBSD ÑÐ¾Ð·Ð´Ð°ÐµÑ " +"ÑÑÑÑкÑÑÑÑ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ°Ñкой Ð´Ð»Ñ Ð¾Ð±ÑекÑа VM, ÑолÑко когда ÑÑо " +"дейÑÑвиÑелÑно нÑжно. Ðднако ÑÑÑÑкÑÑÑа ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ°Ñкой иÑÑоÑиÑеÑки имела " +"некоÑоÑÑе пÑоблемÑ:" + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:196 +msgid "" +"Under FreeBSD 3.X the swap management structure preallocates an array that " +"encompasses the entire object requiring swap backing store-even if only a " +"few pages of that object are swap-backed. This creates a kernel memory " +"fragmentation problem when large objects are mapped, or processes with large " +"runsizes (RSS) fork." +msgstr "" +"Ðо FreeBSD 3.X в ÑÑÑÑкÑÑÑе ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ð»Ð°ÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ°Ñки пÑедваÑиÑелÑно " +"вÑделÑеÑÑÑ Ð¼Ð°ÑÑив, коÑоÑÑй пÑедÑÑавлÑÐµÑ ÑелÑй обÑекÑ, ÑÑебÑÑÑий Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð² " +"облаÑÑи подкаÑки-даже еÑли ÑолÑко неÑколÑко ÑÑÑÐ°Ð½Ð¸Ñ ÑÑого обÑекÑа Ñ ÑанÑÑÑÑ Ð² " +"облаÑÑи подкаÑки. ÐÑо ÑÐ¾Ð·Ð´Ð°ÐµÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ ÑÑагменÑаÑии памÑÑи ÑдÑа в ÑлÑÑае, " +"когда в памÑÑÑ Ð¾ÑобÑажаÑÑÑÑ Ð±Ð¾Ð»ÑÑие обÑекÑÑ Ð¸Ð»Ð¸ когда веÑвÑÑÑÑ Ð¿ÑоÑеÑÑÑ, " +"занимаÑÑие болÑÑой обÑем памÑÑи пÑи ÑабоÑе (RSS)." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:197 +msgid "" +"Also, to keep track of swap space, a \"list of holes\" is kept in kernel " +"memory, and this tends to get severely fragmented as well. Since the \"list " +"of holes\" is a linear list, the swap allocation and freeing performance is " +"a non-optimal O(n)-per-page." +msgstr "" +"Также Ð´Ð»Ñ Ð¾ÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи подкаÑки в памÑÑи ÑдÑа поддеÑживаеÑÑÑ \"ÑпиÑок " +"дÑÑ\", и он Ñакже неÑколÑко ÑÑагменÑиÑован. Так как \"ÑпиÑок дÑÑ\" ÑвлÑеÑÑÑ " +"поÑледоваÑелÑнÑм ÑпиÑком, Ñо пÑоизводиÑелÑноÑÑÑ Ð¿Ñи ÑаÑпÑеделении и " +"вÑÑвобождении памÑÑи в облаÑÑи подкаÑки неопÑималÑно и ее ÑложноÑÑÑ Ð·Ð°Ð²Ð¸ÑÐ¸Ñ " +"Ð¾Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑва ÑÑÑÐ°Ð½Ð¸Ñ ÐºÐ°Ðº O(n)." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:198 +msgid "" +"It requires kernel memory allocations to take place during the swap freeing " +"process, and that creates low memory deadlock problems." +msgstr "" +"Также в пÑоÑеÑÑе вÑÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи в облаÑÑи подкаÑки ÑÑебÑеÑÑÑ Ð²Ñделение " +"памÑÑи в ÑдÑе, и ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº пÑоблемам блокиÑовки пÑи недоÑÑаÑке памÑÑи." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:199 +msgid "" +"The problem is further exacerbated by holes created due to the interleaving " +"algorithm." +msgstr "" +"ÐÑоблема еÑе более обоÑÑÑÑеÑÑÑ Ð¸Ð·-за дÑÑ, ÑоздаваемÑÑ Ð¿Ð¾ ÑеÑедÑÑÑемÑÑÑ " +"алгоÑиÑмÑ." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:200 +msgid "" +"Also, the swap block map can become fragmented fairly easily resulting in " +"non-contiguous allocations." +msgstr "" +"ÐÑоме Ñого, ÑпиÑок ÑаÑпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð±Ð»Ð¾ÐºÐ¾Ð² в облаÑÑи подкаÑки легко оказÑваеÑÑÑ " +"ÑÑагменÑиÑованнÑм, ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑаÑпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½ÐµÐ¿Ð¾ÑледоваÑелÑнÑÑ Ð¾Ð±Ð»Ð°ÑÑей." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:201 +msgid "" +"Kernel memory must also be allocated on the fly for additional swap " +"management structures when a swapout occurs." +msgstr "" +"ÐамÑÑÑ ÑдÑа Ñакже должна ÑаÑпÑеделÑÑÑÑÑ Ð¿Ð¾ Ñ Ð¾Ð´Ñ ÑабоÑÑ Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ " +"ÑÑÑÑкÑÑÑ Ð¿Ð¾ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ð»Ð°ÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ°Ñки пÑи вÑгÑÑзке ÑÑÑÐ°Ð½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи в ÑÑÑ " +"облаÑÑÑ." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:204 +msgid "" +"It is evident from that list that there was plenty of room for improvement. " +"For FreeBSD 4.X, I completely rewrote the swap subsystem:" +msgstr "" +"ÐÑевидно, ÑÑо меÑÑ Ð´Ð»Ñ ÑÑовеÑÑенÑÑвований пÑедоÑÑаÑоÑно. Ðо FreeBSD 4.X " +"подÑиÑÑема ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ð»Ð°ÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ°Ñки бÑла полноÑÑÑÑ Ð¿ÐµÑепиÑана мноÑ:" + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:206 +msgid "" +"Swap management structures are allocated through a hash table rather than a " +"linear array giving them a fixed allocation size and much finer granularity." +msgstr "" +"СÑÑÑкÑÑÑÑ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ð»Ð°ÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ°Ñки ÑаÑпÑеделÑÑÑÑÑ Ð¿Ñи помоÑи Ñ ÑÑ-" +"ÑаблиÑÑ, а не ÑеÑез линейнÑй маÑÑив, ÑÑо Ð´Ð°ÐµÑ Ð¸Ð¼ ÑикÑиÑованнÑй ÑÐ°Ð·Ð¼ÐµÑ Ð¿Ñи " +"ÑаÑпÑеделении и ÑабоÑÑ Ñ Ð³Ð¾Ñаздо менÑÑими ÑÑÑÑкÑÑÑами." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:207 +msgid "" +"Rather then using a linearly linked list to keep track of swap space " +"reservations, it now uses a bitmap of swap blocks arranged in a radix tree " +"structure with free-space hinting in the radix node structures. This " +"effectively makes swap allocation and freeing an O(1) operation." +msgstr "" +"ÐмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ Ð¾Ð´Ð½Ð¾Ð½Ð°Ð¿ÑавленнÑй ÑвÑзнÑй ÑпиÑок Ð´Ð»Ñ " +"оÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ Ð²ÑÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿ÑоÑÑÑанÑÑва в облаÑÑи подкаÑки, ÑепеÑÑ Ð¸ÑполÑзÑеÑÑÑ " +"побиÑÐ¾Ð²Ð°Ñ ÐºÐ°ÑÑа блоков облаÑÑи подкаÑки, вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð½Ð°Ñ Ð² оÑновном в виде " +"дÑевовидной ÑÑÑÑкÑÑÑÑ Ñ Ð¸Ð½ÑоÑмаÑией о Ñвободном пÑоÑÑÑанÑÑве, Ð½Ð°Ñ Ð¾Ð´ÑÑейÑÑ Ð² " +"ÑÐ·Ð»Ð°Ñ ÑÑÑÑкÑÑÑ. ÐÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº ÑомÑ, ÑÑо вÑделение и вÑÑвобождение памÑÑи в " +"облаÑÑи подкаÑки ÑÑановиÑÑÑ Ð¾Ð¿ÐµÑаÑией ÑложноÑÑи O(1)." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:208 +msgid "" +"The entire radix tree bitmap is also preallocated to avoid having to " +"allocate kernel memory during critical low memory swapping operations. After " +"all, the system tends to swap when it is low on memory so we should avoid " +"allocating kernel memory at such times to avoid potential deadlocks." +msgstr "" +"ÐÑе деÑево Ñакже ÑаÑпÑеделÑеÑÑÑ Ð·Ð°Ñанее Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ " +"ÑаÑпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи ÑдÑа во вÑÐµÐ¼Ñ Ð¾Ð¿ÐµÑаÑий Ñ Ð¾Ð±Ð»Ð°ÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ°Ñки пÑи " +"кÑиÑиÑеÑки малом обÑеме Ñвободной памÑÑи. РконÑе конÑов, ÑиÑÑема обÑаÑаеÑÑÑ " +"к облаÑÑи подкаÑки пÑи Ð½ÐµÑ Ð²Ð°Ñке памÑÑи, Ñак ÑÑо Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ " +"ÑаÑпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи ÑдÑа в Ñакие моменÑÑ Ð´Ð»Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°Ð½Ð¸Ñ Ð¿Ð¾ÑенÑиалÑнÑÑ " +"блокиÑовок." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:209 +msgid "" +"To reduce fragmentation the radix tree is capable of allocating large " +"contiguous chunks at once, skipping over smaller fragmented chunks." +msgstr "" +"ÐÐ»Ñ ÑменÑÑÐµÐ½Ð¸Ñ ÑÑагменÑаÑии деÑево Ð¼Ð¾Ð¶ÐµÑ ÑаÑпÑеделÑÑÑ Ð±Ð¾Ð»ÑÑой " +"поÑледоваÑелÑнÑй кÑÑок за Ñаз, пÑопÑÑÐºÐ°Ñ Ð¼ÐµÐ½ÑÑие ÑÑагменÑиÑованнÑе облаÑÑи." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:211 +msgid "" +"I did not take the final step of having an \"allocating hint pointer\" that " +"would trundle through a portion of swap as allocations were made to further " +"guarantee contiguous allocations or at least locality of reference, but I " +"ensured that such an addition could be made." +msgstr "" +"Я не Ñделал поÑледний Ñаг к Ð·Ð°Ð²ÐµÐ´ÐµÐ½Ð¸Ñ \"ÑказаÑÐµÐ»Ñ Ð½Ð° ÑаÑпÑеделение\", " +"коÑоÑÑй бÑÐ´ÐµÑ Ð¿ÐµÑедвигаÑÑÑÑ Ð¿Ð¾ ÑÑаÑÑÐºÑ Ð¾Ð±Ð»Ð°ÑÑи подкаÑки пÑи вÑделении памÑÑи " +"Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð² бÑдÑÑем ÑаÑпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑледоваÑелÑнÑÑ ÑÑаÑÑков, или по " +"кÑайней меÑе меÑÑÐ¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑÑÑлки, но Ñ Ñбежден, ÑÑо ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñделано." + +#. type: Title == +#: documentation/content/en/articles/vm-design/_index.adoc:213 +#, no-wrap +msgid "When to free a page" +msgstr "Ðогда оÑвобождаÑÑ ÑÑÑаниÑÑ" + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:218 +msgid "" +"Since the VM system uses all available memory for disk caching, there are " +"usually very few truly-free pages. The VM system depends on being able to " +"properly choose pages which are not in use to reuse for new allocations. " +"Selecting the optimal pages to free is possibly the single-most important " +"function any VM system can perform because if it makes a poor selection, the " +"VM system may be forced to unnecessarily retrieve pages from disk, seriously " +"degrading system performance." +msgstr "" +"Так как ÑиÑÑема VM иÑполÑзÑÐµÑ Ð²ÑÑ Ð´Ð¾ÑÑÑпнÑÑ Ð¿Ð°Ð¼ÑÑÑ Ð´Ð»Ñ ÐºÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¸Ñка, Ñо " +"обÑÑно дейÑÑвиÑелÑно незанÑÑÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð¾ÑÐµÐ½Ñ Ð¼Ð°Ð»Ð¾. СиÑÑема VM завиÑÐ¸Ñ Ð¾Ñ " +"Ñого, как она ÑоÑно вÑбиÑÐ°ÐµÑ Ð½ÐµÐ·Ð°Ð½ÑÑÑе ÑÑÑаниÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð²ÑоÑного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ " +"Ð´Ð»Ñ Ð½Ð¾Ð²ÑÑ ÑаÑпÑеделений. ÐпÑималÑнÑй вÑÐ±Ð¾Ñ ÑÑÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð²ÑÑвобождениÑ, " +"возможно, ÑвлÑеÑÑÑ Ñамой важной ÑÑнкÑией лÑбой VM-ÑиÑÑемÑ, из ÑÐµÑ , ÑÑо она " +"Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑ, поÑÐ¾Ð¼Ñ ÑÑо пÑи непÑавилÑном вÑбоÑе ÑиÑÑема VM вÑнÑждена " +"бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑаÑиваÑÑ ÑÑÑаниÑÑ Ñ Ð´Ð¸Ñка, знаÑиÑелÑно ÑÐ½Ð¸Ð¶Ð°Ñ Ð¿ÑоизводиÑелÑноÑÑÑ " +"вÑей ÑиÑÑемÑ." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:221 +msgid "" +"How much overhead are we willing to suffer in the critical path to avoid " +"freeing the wrong page? Each wrong choice we make will cost us hundreds of " +"thousands of CPU cycles and a noticeable stall of the affected processes, so " +"we are willing to endure a significant amount of overhead to be sure that " +"the right page is chosen. This is why FreeBSD tends to outperform other " +"systems when memory resources become stressed." +msgstr "" +"ÐакÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð½Ð°Ð³ÑÑÐ·ÐºÑ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑделиÑÑ Ð² кÑиÑиÑеÑком пÑÑи Ð´Ð»Ñ " +"Ð¸Ð·Ð±ÐµÐ¶Ð°Ð½Ð¸Ñ Ð²ÑÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð½Ðµ Ñой ÑÑÑаниÑÑ? ÐаждÑй непÑавилÑнÑй вÑÐ±Ð¾Ñ Ð±ÑÐ´ÐµÑ " +"ÑÑоиÑÑ Ð½Ð°Ð¼ ÑоÑни ÑÑÑÑÑ ÑакÑов ÑабоÑÑ ÑенÑÑалÑного пÑоÑеÑÑоÑа и замеÑное " +"замедление ÑабоÑÑ Ð·Ð°ÑÑонÑÑÑÑ Ð¿ÑоÑеÑÑов, Ñак ÑÑо Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑмиÑиÑÑÑÑ Ñо " +"знаÑиÑелÑнÑми издеÑжками Ð´Ð»Ñ Ñого, ÑÑÐ¾Ð±Ñ Ð±Ñла заведомо вÑбÑана пÑавилÑÐ½Ð°Ñ " +"ÑÑÑаниÑа. ÐÐ¾Ñ Ð¿Ð¾ÑÐµÐ¼Ñ FreeBSD пÑевоÑÑ Ð¾Ð´Ð¸Ñ Ð´ÑÑгие ÑиÑÑÐµÐ¼Ñ Ð² пÑоизводиÑелÑноÑÑи " +"пÑи Ð½ÐµÑ Ð²Ð°Ñке ÑеÑÑÑÑов памÑÑи." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:224 +msgid "" +"The free page determination algorithm is built upon a history of the use of " +"memory pages. To acquire this history, the system takes advantage of a page-" +"used bit feature that most hardware page tables have." +msgstr "" +"ÐлгоÑиÑм опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñвободной ÑÑÑаниÑÑ Ð½Ð°Ð¿Ð¸Ñан на оÑнове иÑÑоÑии " +"иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑÑÐ°Ð½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи. ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑÑой иÑÑоÑии ÑиÑÑема иÑполÑзÑÐµÑ " +"возможноÑÑи биÑа иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи, коÑоÑÑе имеÑÑÑÑ Ð² болÑÑинÑÑве " +"аппаÑаÑнÑÑ ÑаблиÑÐ°Ñ ÑÑÑÐ°Ð½Ð¸Ñ Ð¿Ð°Ð¼ÑÑи." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:230 +msgid "" +"In any case, the page-used bit is cleared and at some later point the VM " +"system comes across the page again and sees that the page-used bit has been " +"set. This indicates that the page is still being actively used. If the bit " +"is still clear it is an indication that the page is not being actively " +"used. By testing this bit periodically, a use history (in the form of a " +"counter) for the physical page is developed. When the VM system later needs " +"to free up some pages, checking this history becomes the cornerstone of " +"determining the best candidate page to reuse." +msgstr "" +"РлÑбом ÑлÑÑае, Ð±Ð¸Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑÑаниÑÑ Ð¾ÑиÑаеÑÑÑ, и в некоÑоÑÑй более " +"поздний Ð¼Ð¾Ð¼ÐµÐ½Ñ VM-ÑиÑÑема обÑаÑаеÑÑÑ Ðº ÑÑÑаниÑе Ñнова и обнаÑÑживаеÑ, ÑÑо " +"ÑÑÐ¾Ñ Ð±Ð¸Ñ ÑÑÑановлен. ÐÑо ÑказÑÐ²Ð°ÐµÑ Ð½Ð° Ñо, ÑÑо ÑÑÑаниÑа акÑивно иÑполÑзÑеÑÑÑ. " +"ÐеÑиодиÑеÑки пÑовеÑÑÑ ÑÑÐ¾Ñ Ð±Ð¸Ñ, накапливаеÑÑÑ Ð¸ÑÑоÑÐ¸Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ (в виде " +"ÑÑеÑÑика) ÑизиÑеÑкой ÑÑÑаниÑÑ. Ðогда позже VM-ÑиÑÑеме ÑÑебÑеÑÑÑ Ð²ÑÑвободиÑÑ " +"некоÑоÑÑе ÑÑÑаниÑÑ, пÑовеÑка иÑÑоÑии вÑÑÑÑÐ¿Ð°ÐµÑ ÑказаÑелем пÑи опÑеделении " +"наиболее веÑоÑÑной кандидаÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð²ÑоÑного иÑполÑзованиÑ." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:235 +msgid "" +"For those platforms that do not have this feature, the system actually " +"emulates a page-used bit. It unmaps or protects a page, forcing a page " +"fault if the page is accessed again. When the page fault is taken, the " +"system simply marks the page as having been used and unprotects the page so " +"that it may be used. While taking such page faults just to determine if a " +"page is being used appears to be an expensive proposition, it is much less " +"expensive than reusing the page for some other purpose only to find that a " +"process needs it back and then have to go to disk." +msgstr "" +"ÐÐ»Ñ ÑÐµÑ Ð¿Ð»Ð°ÑÑоÑм, ÑÑо не имеÑÑ ÑÑой возможноÑÑи, ÑиÑÑема ÑмÑлиÑÑÐµÑ ÑÑÐ¾Ñ Ð±Ð¸Ñ. " +"Ðна ÑÐ½Ð¸Ð¼Ð°ÐµÑ Ð¾ÑобÑажение или заÑиÑÐ°ÐµÑ ÑÑÑаниÑÑ, ÑÑо пÑÐ¸Ð²Ð¾Ð´Ð¸Ñ Ðº оÑибке доÑÑÑпа " +"к ÑÑÑаниÑе, еÑли к ÑÑÑаниÑе вÑполнÑеÑÑÑ Ð¿Ð¾Ð²ÑоÑное обÑаÑение. ÐÑи " +"возникновении ÑÑой оÑибки ÑиÑÑема пÑоÑÑо помеÑÐ°ÐµÑ ÑÑÑаниÑÑ ÐºÐ°Ðº иÑполÑзÑемÑÑ " +"и ÑÐ½Ð¸Ð¼Ð°ÐµÑ Ð·Ð°ÑиÑÑ Ñо ÑÑÑаниÑÑ, Ñак ÑÑо она Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ. ХоÑÑ " +"иÑполÑзование Ñакого пÑиема ÑолÑко Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑÑаниÑÑ " +"веÑÑма накладно, ÑÑо вÑгоднее, Ñем повÑоÑно иÑполÑзоваÑÑ ÑÑÑаниÑÑ Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ " +"Ñелей и обнаÑÑжиÑÑ, ÑÑо она Ñнова нÑжна пÑоÑеÑÑÑ Ð¸ подгÑÑжаÑÑ ÐµÐµ Ñ Ð´Ð¸Ñка." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:245 +msgid "" +"FreeBSD makes use of several page queues to further refine the selection of " +"pages to reuse as well as to determine when dirty pages must be flushed to " +"their backing store. Since page tables are dynamic entities under FreeBSD, " +"it costs virtually nothing to unmap a page from the address space of any " +"processes using it. When a page candidate has been chosen based on the page-" +"use counter, this is precisely what is done. The system must make a " +"distinction between clean pages which can theoretically be freed up at any " +"time, and dirty pages which must first be written to their backing store " +"before being reusable. When a page candidate has been found it is moved to " +"the inactive queue if it is dirty, or the cache queue if it is clean. A " +"separate algorithm based on the dirty-to-clean page ratio determines when " +"dirty pages in the inactive queue must be flushed to disk. Once this is " +"accomplished, the flushed pages are moved from the inactive queue to the " +"cache queue. At this point, pages in the cache queue can still be " +"reactivated by a VM fault at relatively low cost. However, pages in the " +"cache queue are considered to be \"immediately freeable\" and will be reused " +"in an LRU (least-recently used) fashion when the system needs to allocate " +"new memory." +msgstr "" +"FreeBSD иÑполÑзÑÐµÑ Ð½ÐµÑколÑко оÑеÑедей ÑÑÑÐ°Ð½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð²ÑбоÑа ÑÑÑÐ°Ð½Ð¸Ñ " +"Ð´Ð»Ñ Ð¿Ð¾Ð²ÑоÑного иÑполÑзованиÑ, а Ñакже Ð´Ð»Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ñого, когда же гÑÑзнÑе " +"ÑÑÑаниÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑбÑоÑÐµÐ½Ñ Ð² Ñ ÑанилиÑе. Так как ÑаблиÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ð²Ð¾ " +"FreeBSD ÑвлÑÑÑÑÑ Ð´Ð¸Ð½Ð°Ð¼Ð¸ÑеÑкими обÑекÑами, пÑакÑиÑеÑки ниÑего не ÑÑÐ¾Ð¸Ñ " +"вÑÑезаÑÑ ÑÑÑаниÑÑ Ð¸Ð· адÑеÑного пÑоÑÑÑанÑÑва лÑбого иÑполÑзÑÑÑего ее " +"пÑоÑеÑÑа. ÐоÑле Ñого, как Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑÐ°Ñ ÑÑÑаниÑа, на оÑнове ÑÑеÑÑика " +"иÑполÑзованиÑ, вÑбÑана, именно ÑÑо и вÑполнÑеÑÑÑ. СиÑÑема должна оÑлиÑаÑÑ " +"Ð¼ÐµÐ¶Ð´Ñ ÑиÑÑÑми ÑÑÑаниÑами, коÑоÑÑе ÑеоÑеÑиÑеÑки могÑÑ Ð±ÑÑÑ Ð²ÑÑÐ²Ð¾Ð±Ð¾Ð¶Ð´ÐµÐ½Ñ Ð² " +"лÑбое вÑемÑ, и гÑÑзнÑми ÑÑÑаниÑами, коÑоÑÑе ÑнаÑала Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿ÐµÑепиÑÐ°Ð½Ñ Ð² " +"Ñ ÑанилиÑе пеÑед Ñем, как Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ Ð¿Ð¾Ð²ÑоÑно. ÐоÑле " +"Ð½Ð°Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑей ÑÑÑаниÑÑ Ð¾Ð½Ð° пеÑемеÑаеÑÑÑ Ð² неакÑивнÑÑ Ð¾ÑеÑедÑ, еÑли " +"она ÑвлÑеÑÑÑ Ð³ÑÑзной, или в оÑеÑÐµÐ´Ñ ÐºÑÑа, еÑли она ÑиÑÑаÑ. ÐÑделÑнÑй " +"алгоÑиÑм, оÑновÑваÑÑийÑÑ Ð½Ð° оÑноÑении колиÑеÑÑва гÑÑзнÑÑ ÑÑÑÐ°Ð½Ð¸Ñ Ðº ÑиÑÑÑм, " +"опÑеделÑеÑ, когда гÑÑзнÑе ÑÑÑаниÑÑ Ð² неакÑивной оÑеÑеди Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑбÑоÑÐµÐ½Ñ " +"на диÑк. Ðогда ÑÑо вÑполниÑÑÑ, ÑбÑоÑеннÑе ÑÑÑаниÑÑ Ð¿ÐµÑемеÑаÑÑÑÑ Ð¸Ð· " +"неакÑивной оÑеÑеди в оÑеÑÐµÐ´Ñ ÐºÑÑа. Ð ÑÑÐ¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÑÑаниÑÑ Ð² оÑеÑеди кÑÑа " +"могÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð²ÑоÑно акÑивизиÑÐ¾Ð²Ð°Ð½Ñ VM Ñо ÑÑавниÑелÑно малÑми накладнÑми " +"ÑаÑÑ Ð¾Ð´Ð°Ð¼Ð¸. Ðднако ÑÑÑаниÑÑ Ð² оÑеÑеди кÑÑа пÑедполагаеÑÑÑ \"вÑÑвобождаÑÑ " +"немедленно\" и повÑоÑно иÑполÑзоваÑÑ Ð² LRU-поÑÑдке (менÑÑе вÑего " +"иÑполÑзÑемÑй), когда ÑиÑÑеме поÑÑебÑеÑÑÑ Ð²Ñделение дополниÑелÑной памÑÑи." + +#. type: .abstract-title +#: documentation/content/en/articles/vm-design/_index.adoc:249 +msgid "" +"It is important to note that the FreeBSD VM system attempts to separate " +"clean and dirty pages for the express reason of avoiding unnecessary flushes " +"of dirty pages (which eats I/O bandwidth), nor does it move pages between " +"the various page queues gratuitously when the memory subsystem is not being " +"stressed. This is why you will see some systems with very low cache queue " +"counts and high active queue counts when doing a `systat -vm` command. As " +"the VM system becomes more stressed, it makes a greater effort to maintain " +"the various page queues at the levels determined to be the most effective." +msgstr "" +"СÑÐ¾Ð¸Ñ Ð¾ÑмеÑиÑÑ, ÑÑо во FreeBSD VM-ÑиÑÑема пÑÑаеÑÑÑ ÑазделиÑÑ ÑиÑÑÑе и " +"гÑÑзнÑе ÑÑÑаниÑÑ Ð²Ð¾ избежание ÑÑоÑной Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи в ненÑжнÑÑ ÑбÑоÑÐ°Ñ " *** 490 LINES SKIPPED ***