aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/ru/books/developers-handbook/testing
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/content/ru/books/developers-handbook/testing')
-rw-r--r--documentation/content/ru/books/developers-handbook/testing/_index.adoc187
-rw-r--r--documentation/content/ru/books/developers-handbook/testing/_index.po802
2 files changed, 989 insertions, 0 deletions
diff --git a/documentation/content/ru/books/developers-handbook/testing/_index.adoc b/documentation/content/ru/books/developers-handbook/testing/_index.adoc
new file mode 100644
index 0000000000..a801c9644f
--- /dev/null
+++ b/documentation/content/ru/books/developers-handbook/testing/_index.adoc
@@ -0,0 +1,187 @@
+---
+authors:
+description: 'Регрессионное и нагрузочное тестирование'
+next: books/developers-handbook/partii
+params:
+ path: /books/developers-handbook/testing/
+prev: books/developers-handbook/policies
+showBookMenu: true
+tags: ["Regression", "Performance Testing", "Testing", "Tinderbox"]
+title: 'Глава 6. Регрессионное и нагрузочное тестирование'
+weight: 7
+---
+
+[[testing]]
+= Регрессионное и нагрузочное тестирование
+:doctype: book
+:toc: macro
+:toclevels: 1
+:icons: font
+:sectnums:
+:sectnumlevels: 6
+:sectnumoffset: 6
+:partnums:
+:source-highlighter: rouge
+:experimental:
+:images-path: books/developers-handbook/
+
+ifdef::env-beastie[]
+ifdef::backend-html5[]
+:imagesdir: ../../../../images/{images-path}
+endif::[]
+ifndef::book[]
+include::shared/authors.adoc[]
+include::shared/mirrors.adoc[]
+include::shared/releases.adoc[]
+include::shared/attributes/attributes-{{% lang %}}.adoc[]
+include::shared/{{% lang %}}/teams.adoc[]
+include::shared/{{% lang %}}/mailing-lists.adoc[]
+include::shared/{{% lang %}}/urls.adoc[]
+toc::[]
+endif::[]
+ifdef::backend-pdf,backend-epub3[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+endif::[]
+
+ifndef::env-beastie[]
+toc::[]
+include::../../../../../shared/asciidoctor.adoc[]
+endif::[]
+
+Регрессионные тесты используются для проверки определенной части системы, чтобы убедиться, что она работает как ожидается, и для предотвращения повторного появления старых ошибок.
+
+Инструменты для регрессионного тестирования FreeBSD можно найти в дереве исходных кодов FreeBSD в каталоге [.filename]#src/tools/regression#.
+
+[[testing-micro-benchmark]]
+== Контрольный список для бенчмарка низкоуровневых операций
+
+Этот раздел содержит рекомендации по проведению корректного бенчмарка низкоуровненых операций на FreeBSD или самой FreeBSD.
+
+Невозможно использовать все приведенные ниже рекомендации каждый раз, но чем больше их применяется, тем лучше способность теста выявлять небольшие различия.
+
+* Отключить APM и любые другие манипуляции с часами (ACPI ?).
+* Запускайте тесты в однопользовательском режиме. Например, man:cron[8] и другие демоны только добавляют шум. Демон man:sshd[8] также может вызвать проблемы. Если требуется доступ по SSH во время тестирования, либо отключите перегенерацию ключа SSHv1, либо завершите родительский демон `sshd` во время тестов.
+* Не запускайте man:ntpd[8].
+* Если события man:syslog[3] генерируются, запустите man:syslogd[8] с пустым [.filename]#/etc/syslogd.conf#, в противном случае не запускайте его.
+* Минимизируйте дисковые операции ввода-вывода, по возможности избегайте их полностью.
+* Не монтируйте файловые системы, которые не требуются.
+* Смонтируйте [.filename]#/#, [.filename]#/usr# и любые другие файловые системы в режиме только для чтения, если это возможно. Это исключает обновления atime на диске (и т.д.) из общей картины ввода-вывода.
+* Переинициализируйте тестовую файловую систему с возможностью чтения/записи с помощью man:newfs[8] и заполните её из файла man:tar[1] или man:dump[8] перед каждым запуском. Размонтируйте и смонтируйте её перед началом теста. Это обеспечит согласованную структуру файловой системы. Для теста worldstone это применимо к [.filename]#/usr/obj# (просто переинициализируйте с помощью `newfs` и смонтируйте). Для достижения 100% воспроизводимости заполните файловую систему из файла man:dd[1] (например: `dd if=myimage of=/dev/ad0s1h bs=1m`)
+* Используйте разделы man:md[4] с поддержкой malloc или предзагруженные.
+* Перезагружайтесь между отдельными итерациями теста, это обеспечивает более согласованное состояние.
+* Удалите все необязательные драйверы устройств из ядра. Например, если USB не нужен для теста, не включайте поддержку USB в ядре. Драйверы, которые подключаются, часто имеют работающие таймауты.
+* Отключите неиспользуемое оборудование. Отсоедините диски с помощью man:atacontrol[8] и man:camcontrol[8], если диски не используются для тестирования.
+* Не настраивайте сеть, если она не тестируется, или дождитесь завершения тестирования, чтобы отправить результаты на другой компьютер.
+* Отключите "турбо-режимы", так как они делают тактовую частоту явно зависимой от окружающей среды. Это означает, что результаты тестирования на 100% идентичном коде могут зависеть от времени суток, употребления кофе или газировки или даже от количества людей в офисе.
+
+Если система должна быть подключена к общедоступной сети, следите за всплесками широковещательного трафика. Даже если они почти незаметны, они будут занимать циклы процессора. Многоадресная рассылка имеет аналогичные предостережения.
+* Размещайте каждую файловую систему на отдельном диске. Это минимизирует задержки, вызванные оптимизацией перемещения головок диска.
+* Минимизируйте вывод на последовательные или VGA-консоли. Запись вывода в файлы снижает дрожание. (Консоли на последовательном порту легко становятся узким местом.) Не касайтесь клавиатуры во время выполнения теста, даже нажатия kbd:[пробел] или kbd:[back-space] отражаются в числах.
+* Убедитесь, что тест достаточно длинный, но не слишком. Если тест слишком короткий, возникают проблемы с временными метками. Если он слишком длинный, изменения температуры и дрейф повлияют на частоту кварцевых кристаллов в компьютере. Эмпирическое правило: больше минуты, меньше часа.
+* Попытайтесь поддерживать температуру вокруг машины как можно более стабильной. Это влияет как на кварцевые резонаторы, так и на алгоритмы работы дисковых накопителей. Для получения действительно стабильных часов рассмотрите возможность использования стабилизированного тактового сигнала. Например, используйте OCXO + PLL и подавайте выходной сигнал в тактовые схемы вместо кварцевого резонатора на материнской плате. Для получения дополнительной информации по этому вопросу свяжитесь с {phk}.
+* Выполните тест как минимум 3 раза, но лучше запустить более 20 раз как для кода "до", так и для кода "после". По возможности чередуйте запуски (т.е. не следует запускать 20 раз "до", а затем 20 раз "после"), это поможет выявить влияние окружения. Не чередуйте строго 1:1, а лучше 3:3, чтобы можно было обнаружить эффекты взаимодействия.
++
+Хороший шаблон: `bababa{bbbaaa}*`. Это дает подсказку после первых 1+1 прогонов (так что можно остановить тест, если всё идет совсем не так), стандартное отклонение после первых 3+3 (дает хорошее представление, стоит ли проводить длительный прогон), а также тренды и показатели взаимодействия позже.
+* Используйте man:ministat[1], чтобы определить, являются ли числа значимыми. Рекомендуется приобрести книгу "Cartoon guide to statistics" ISBN: 0062731025, особенно если вы забыли или никогда не изучали стандартное отклонение и t-критерий Стьюдента.
+* Не используйте фоновый man:fsck[8], если тест не является бенчмарком фонового `fsck`. Также отключите `background_fsck` в [.filename]#/etc/rc.conf#, если бенчмарк не запускается как минимум через 60+«время работы ``fsck``» секунд после загрузки, так как man:rc[8] пробуждается и проверяет, нужно ли запускать `fsck` для каких-либо файловых систем, когда включен фоновый `fsck`. Аналогично, убедитесь, что нет оставшихся снимков, если только бенчмарк не является тестом со снимками.
+* Если тесты производительности показывают неожиданно низкие результаты, проверьте такие факторы, как высокий объем прерываний из неожиданного источника. Сообщалось, что некоторые версии ACPI могут "вести себя неправильно" и генерировать избыточные прерывания. Для диагностики необычных результатов тестов сделайте несколько снимков `vmstat -i` и поищите что-то необычное.
+* Будьте внимательны к параметрам оптимизации для ядра и пользовательского пространства, а также отладки. Легко упустить что-то и позже понять, что тест сравнивал не одно и то же.
+* Никогда не проводите тестирование производительности с включёнными параметрами ядра `WITNESS` и `INVARIANTS`, если тест не направлен на оценку производительности именно этих функций. `WITNESS` может привести к снижению производительности на 400% и более. Аналогично, параметры userspace man:malloc[3] по умолчанию отличаются в -CURRENT от тех, что поставляются в релизах.
+
+[[testing-tinderbox]]
+== Tinderbox для исходного текста FreeBSD
+
+Исходный Tinderbox состоит из:
+
+* Скрипта сборки [.filename]#tinderbox#, который автоматизирует выгрузку определённой версии исходного кода FreeBSD и её сборку.
+* Скрипта-супервизора [.filename]#tbmaster#, который отслеживает отдельные экземпляры Tinderbox, записывает их вывод и отправляет уведомления о сбоях по электронной почте.
+* Скрипта CGI с именем [.filename]#index.cgi#, который читает набор журналов tbmaster и представляет их в виде удобочитаемой HTML-сводки.
+* Набора серверов сборки, которые постоянно тестируют последние изменения наиболее важных веток кода FreeBSD.
+* Веб-сервера, хранящего полный набор журналов Tinderbox и отображающий актуальную сводку.
+
+Скрипты поддерживаются и были разработаны {des}, и сейчас написаны на Perl, что стало шагом вперед по сравнению с их первоначальной версией в виде shell-скриптов. Все скрипты и конфигурационные файлы хранятся в https://www.freebsd.org/cgi/cvsweb.cgi/projects/tinderbox/[/projects/tinderbox/].
+
+Для получения дополнительной информации о скриптах tinderbox и tbmaster на данном этапе обратитесь к соответствующим руководствам: tinderbox(1) и tbmaster(1).
+
+== Скрипт index.cgi
+
+Скрипт [.filename]#index.cgi# генерирует HTML-сводку журналов tinderbox и tbmaster. Хотя изначально он предназначался для использования в качестве CGI-скрипта, как следует из его названия, этот скрипт также может быть запущен из командной строки или из задачи man:cron[8], в таком случае он будет искать логи в директории, где расположен сам скрипт. Он автоматически определяет контекст, генерируя HTTP-заголовки при запуске в качестве CGI-скрипта. Он соответствует стандартам XHTML и использует CSS для стилизации.
+
+Скрипт начинает работу в блоке `main()`, пытаясь проверить, что он выполняется на официальном сайте Tinderbox. Если это не так, создается страница с указанием, что это не официальный сайт, и предоставляется URL официального сайта.
+
+Далее выполняется сканирование каталога журналов для получения перечня конфигураций, веток и архитектур, для которых существуют файлы журналов, чтобы избежать жесткого задания списка в скрипте и потенциального появления пустых строк или столбцов. Эта информация извлекается из имен файлов журналов, соответствующих следующему шаблону:
+
+[.programlisting]
+....
+tinderbox-$config-$branch-$arch-$machine.{brief,full}
+....
+
+Конфигурации, используемые на официальных серверах сборки Tinderbox, названы в соответствии с ветками, которые они собирают. Например, конфигурация `releng_8` используется для сборки `RELENG_8`, а также всех поддерживаемых веток выпусков.
+
+После успешного завершения всей процедуры запуска для каждой конфигурации вызывается `do_config()`.
+
+Функция `do_config()` генерирует HTML для отдельной конфигурации Tinderbox.
+
+Он работает, сначала создавая строку заголовка, затем перебирая каждую сборку ветки с указанной конфигурацией, формируя одну строку результатов для каждой следующим образом:
+
+* Для каждого элемента:
+
+** Для каждой машины в рамках этой архитектуры:
+
+*** Если существует краткий файл журнала, то:
+
+**** Вызвать `success()`, чтобы определить результат сборки.
+**** Вывести размер изменения.
+**** Вывести размер краткого файла журнала со ссылкой на сам файл журнала.
+**** Если также существует полный файл журнала, то:
+
+***** Вывести размер полного файла журнала со ссылкой на сам файл журнала.
+
+*** В противном случае:
+
+**** Нечего не выводить.
+
+Упомянутая выше функция `success()` проверяет краткий лог-файл на наличие строки "tinderbox run completed", чтобы определить, был ли сборка успешной.
+
+Конфигурации и ветви сортируются в соответствии с их рангом. Это вычисляется следующим образом:
+
+* `HEAD` и `CURRENT` имеют ранг 9999.
+* `RELENG_x` имеет ранг __``xx``__99.
+* `RELENG_x_y` имеет ранг _xxyy_.
+
+Это означает, что `HEAD` всегда имеет наивысший приоритет, а ветви `RELENG` ранжируются в числовом порядке, причём каждая ветвь `STABLE` имеет более высокий приоритет, чем ветви выпусков, ответвлённые от неё. Например, для FreeBSD 8 порядок от наивысшего к низшему будет следующим:
+
+* `RELENG_8` (ранг ветки 899).
+* `RELENG_8_3` (ранг ветки 803).
+* `RELENG_8_2` (ранг ветки 802).
+* `RELENG_8_1` (ранг ветки 801).
+* `RELENG_8_0` (ранг ветки 800).
+
+Цвета, которые Tinderbox использует для каждой ячейки в таблице, определяются CSS. Успешные сборки отображаются зелёным текстом; неудачные сборки отображаются красным текстом. Цвет блекнет со временем с момента соответствующей сборки, приближаясь к серому каждые полчаса.
+
+== Официальные серверы сборки
+
+Официальные серверы сборки Tinderbox размещены на площадке http://www.sentex.ca[Sentex Data Communications], которая также предоставляет хостинг для кластера Netperf FreeBSD.
+
+В настоящее время работают три сервера сборки:
+
+_freebsd-current.sentex.ca_ собирает:
+
+* `HEAD` для amd64, arm, i386, i386/pc98, ia64, mips, powerpc, powerpc64 и sparc64.
+* `RELENG_9` и поддерживаемые ветки 9._X_ для amd64, arm, i386, i386/pc98, ia64, mips, powerpc, powerpc64 и sparc64.
+
+_freebsd-stable.sentex.ca_ собирает:
+
+* `RELENG_8` и поддерживаемые ветки 8._X_ для amd64, i386, i386/pc98, ia64, mips, powerpc и sparc64.
+
+_freebsd-legacy.sentex.ca_ собирает:
+
+* `RELENG_7` и поддерживаемые ветки 7._X_ для amd64, i386, i386/pc98, ia64, powerpc и sparc64.
+
+== Официальный сайт со сводками
+
+Сводки и журналы с официальных серверов сборки доступны в сети по адресу http://tinderbox.FreeBSD.org[http://tinderbox.FreeBSD.org], размещены на {des} и настроены следующим образом:
+
+* Задание man:cron[8] проверяет серверы сборки через регулярные интервалы и загружает все новые файлы журналов с помощью man:rsync[1].
+* Apache настроен на использование [.filename]#index.cgi# в качестве `DirectoryIndex`.
diff --git a/documentation/content/ru/books/developers-handbook/testing/_index.po b/documentation/content/ru/books/developers-handbook/testing/_index.po
new file mode 100644
index 0000000000..220968249a
--- /dev/null
+++ b/documentation/content/ru/books/developers-handbook/testing/_index.po
@@ -0,0 +1,802 @@
+# SOME DESCRIPTIVE TITLE
+# Copyright (C) YEAR The FreeBSD Project
+# This file is distributed under the same license as the FreeBSD Documentation package.
+# Vladlen Popolitov <vladlenpopolitov@list.ru>, 2025.
+msgid ""
+msgstr ""
+"Project-Id-Version: FreeBSD Documentation VERSION\n"
+"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"PO-Revision-Date: 2025-06-27 04:45+0000\n"
+"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
+"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
+"documentation/booksdevelopers-handbooktesting_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: Title =
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:1
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:15
+#, no-wrap
+msgid "Regression and Performance Testing"
+msgstr "Регрессионное и нагрузочное тестирование"
+
+#. type: Yaml Front Matter Hash Value: title
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:1
+#, no-wrap
+msgid "Chapter 6. Regression and Performance Testing"
+msgstr "Глава 6. Регрессионное и нагрузочное тестирование"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:53
+msgid ""
+"Regression tests are used to exercise a particular bit of the system to "
+"check that it works as expected, and to make sure that old bugs are not "
+"reintroduced."
+msgstr ""
+"Регрессионные тесты используются для проверки определенной части системы, "
+"чтобы убедиться, что она работает как ожидается, и для предотвращения "
+"повторного появления старых ошибок."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:55
+msgid ""
+"The FreeBSD regression testing tools can be found in the FreeBSD source tree "
+"in the directory [.filename]#src/tools/regression#."
+msgstr ""
+"Инструменты для регрессионного тестирования FreeBSD можно найти в дереве "
+"исходных кодов FreeBSD в каталоге [.filename]#src/tools/regression#."
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:57
+#, no-wrap
+msgid "Micro Benchmark Checklist"
+msgstr "Контрольный список для бенчмарка низкоуровневых операций"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:60
+msgid ""
+"This section contains hints for doing proper micro-benchmarking on FreeBSD "
+"or of FreeBSD itself."
+msgstr ""
+"Этот раздел содержит рекомендации по проведению корректного бенчмарка "
+"низкоуровненых операций на FreeBSD или самой FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:62
+msgid ""
+"It is not possible to use all of the suggestions below every single time, "
+"but the more used, the better the benchmark's ability to test small "
+"differences will be."
+msgstr ""
+"Невозможно использовать все приведенные ниже рекомендации каждый раз, но чем "
+"больше их применяется, тем лучше способность теста выявлять небольшие "
+"различия."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:64
+msgid "Disable APM and any other kind of clock fiddling (ACPI ?)."
+msgstr "Отключить APM и любые другие манипуляции с часами (ACPI ?)."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:65
+msgid ""
+"Run in single user mode. E.g., man:cron[8], and other daemons only add "
+"noise. The man:sshd[8] daemon can also cause problems. If ssh access is "
+"required during testing either disable the SSHv1 key regeneration, or kill "
+"the parent `sshd` daemon during the tests."
+msgstr ""
+"Запускайте тесты в однопользовательском режиме. Например, man:cron[8] и "
+"другие демоны только добавляют шум. Демон man:sshd[8] также может вызвать "
+"проблемы. Если требуется доступ по SSH во время тестирования, либо отключите "
+"перегенерацию ключа SSHv1, либо завершите родительский демон `sshd` во время "
+"тестов."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:66
+msgid "Do not run man:ntpd[8]."
+msgstr "Не запускайте man:ntpd[8]."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:67
+msgid ""
+"If man:syslog[3] events are generated, run man:syslogd[8] with an empty "
+"[.filename]#/etc/syslogd.conf#, otherwise, do not run it."
+msgstr ""
+"Если события man:syslog[3] генерируются, запустите man:syslogd[8] с пустым "
+"[.filename]#/etc/syslogd.conf#, в противном случае не запускайте его."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:68
+msgid "Minimize disk-I/O, avoid it entirely if possible."
+msgstr ""
+"Минимизируйте дисковые операции ввода-вывода, по возможности избегайте их "
+"полностью."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:69
+msgid "Do not mount file systems that are not needed."
+msgstr "Не монтируйте файловые системы, которые не требуются."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:70
+msgid ""
+"Mount [.filename]#/#, [.filename]#/usr#, and any other file system as read-"
+"only if possible. This removes atime updates to disk (etc.) from the I/O "
+"picture."
+msgstr ""
+"Смонтируйте [.filename]#/#, [.filename]#/usr# и любые другие файловые "
+"системы в режиме только для чтения, если это возможно. Это исключает "
+"обновления atime на диске (и т.д.) из общей картины ввода-вывода."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:71
+msgid ""
+"Reinitialize the read/write test file system with man:newfs[8] and populate "
+"it from a man:tar[1] or man:dump[8] file before every run. Unmount and mount "
+"it before starting the test. This results in a consistent file system "
+"layout. For a worldstone test this would apply to [.filename]#/usr/obj# "
+"(just reinitialize with `newfs` and mount). To get 100% reproducibility, "
+"populate the file system from a man:dd[1] file (i.e.: `dd if=myimage of=/dev/"
+"ad0s1h bs=1m`)"
+msgstr ""
+"Переинициализируйте тестовую файловую систему с возможностью чтения/записи с "
+"помощью man:newfs[8] и заполните её из файла man:tar[1] или man:dump[8] "
+"перед каждым запуском. Размонтируйте и смонтируйте её перед началом теста. "
+"Это обеспечит согласованную структуру файловой системы. Для теста worldstone "
+"это применимо к [.filename]#/usr/obj# (просто переинициализируйте с помощью "
+"`newfs` и смонтируйте). Для достижения 100% воспроизводимости заполните "
+"файловую систему из файла man:dd[1] (например: `dd if=myimage of=/dev/ad0s1h "
+"bs=1m`)"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:72
+msgid "Use malloc backed or preloaded man:md[4] partitions."
+msgstr "Используйте разделы man:md[4] с поддержкой malloc или предзагруженные."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:73
+msgid ""
+"Reboot between individual iterations of the test, this gives a more "
+"consistent state."
+msgstr ""
+"Перезагружайтесь между отдельными итерациями теста, это обеспечивает более "
+"согласованное состояние."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:74
+msgid ""
+"Remove all non-essential device drivers from the kernel. For instance if USB "
+"is not needed for the test, do not put USB in the kernel. Drivers which "
+"attach often have timeouts ticking away."
+msgstr ""
+"Удалите все необязательные драйверы устройств из ядра. Например, если USB не "
+"нужен для теста, не включайте поддержку USB в ядре. Драйверы, которые "
+"подключаются, часто имеют работающие таймауты."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:75
+msgid ""
+"Unconfigure hardware that are not in use. Detach disks with "
+"man:atacontrol[8] and man:camcontrol[8] if the disks are not used for the "
+"test."
+msgstr ""
+"Отключите неиспользуемое оборудование. Отсоедините диски с помощью "
+"man:atacontrol[8] и man:camcontrol[8], если диски не используются для "
+"тестирования."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:76
+msgid ""
+"Do not configure the network unless it is being tested, or wait until after "
+"the test has been performed to ship the results off to another computer."
+msgstr ""
+"Не настраивайте сеть, если она не тестируется, или дождитесь завершения "
+"тестирования, чтобы отправить результаты на другой компьютер."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:78
+msgid ""
+"Disable \"Turbo-modes\" because they make the clock frequency explicitly "
+"depend on the environment. This means that benchmark runs on 100% identical "
+"code, may depend on time of day, coffee vs. soda or even how many other "
+"people are in the office."
+msgstr ""
+"Отключите \"турбо-режимы\", так как они делают тактовую частоту явно "
+"зависимой от окружающей среды. Это означает, что результаты тестирования на "
+"100% идентичном коде могут зависеть от времени суток, употребления кофе или "
+"газировки или даже от количества людей в офисе."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:80
+msgid ""
+"If the system must be connected to a public network, watch out for spikes of "
+"broadcast traffic. Even though it is hardly noticeable, it will take up CPU "
+"cycles. Multicast has similar caveats."
+msgstr ""
+"Если система должна быть подключена к общедоступной сети, следите за "
+"всплесками широковещательного трафика. Даже если они почти незаметны, они "
+"будут занимать циклы процессора. Многоадресная рассылка имеет аналогичные "
+"предостережения."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:81
+msgid ""
+"Put each file system on its own disk. This minimizes jitter from head-seek "
+"optimizations."
+msgstr ""
+"Размещайте каждую файловую систему на отдельном диске. Это минимизирует "
+"задержки, вызванные оптимизацией перемещения головок диска."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:82
+msgid ""
+"Minimize output to serial or VGA consoles. Running output into files gives "
+"less jitter. (Serial consoles easily become a bottleneck.) Do not touch "
+"keyboard while the test is running, even kbd:[space] or kbd:[back-space] "
+"shows up in the numbers."
+msgstr ""
+"Минимизируйте вывод на последовательные или VGA-консоли. Запись вывода в "
+"файлы снижает дрожание. (Консоли на последовательном порту легко становятся "
+"узким местом.) Не касайтесь клавиатуры во время выполнения теста, даже "
+"нажатия kbd:[пробел] или kbd:[back-space] отражаются в числах."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:83
+msgid ""
+"Make sure the test is long enough, but not too long. If the test is too "
+"short, timestamping is a problem. If it is too long temperature changes and "
+"drift will affect the frequency of the quartz crystals in the computer. Rule "
+"of thumb: more than a minute, less than an hour."
+msgstr ""
+"Убедитесь, что тест достаточно длинный, но не слишком. Если тест слишком "
+"короткий, возникают проблемы с временными метками. Если он слишком длинный, "
+"изменения температуры и дрейф повлияют на частоту кварцевых кристаллов в "
+"компьютере. Эмпирическое правило: больше минуты, меньше часа."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:84
+msgid ""
+"Try to keep the temperature as stable as possible around the machine. This "
+"affects both quartz crystals and disk drive algorithms. To get real stable "
+"clock, consider stabilized clock injection. E.g., get a OCXO + PLL, inject "
+"output into clock circuits instead of motherboard xtal. Contact {phk} for "
+"more information about this."
+msgstr ""
+"Попытайтесь поддерживать температуру вокруг машины как можно более "
+"стабильной. Это влияет как на кварцевые резонаторы, так и на алгоритмы "
+"работы дисковых накопителей. Для получения действительно стабильных часов "
+"рассмотрите возможность использования стабилизированного тактового сигнала. "
+"Например, используйте OCXO + PLL и подавайте выходной сигнал в тактовые "
+"схемы вместо кварцевого резонатора на материнской плате. Для получения "
+"дополнительной информации по этому вопросу свяжитесь с {phk}."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:85
+msgid ""
+"Run the test at least 3 times but it is better to run more than 20 times "
+"both for \"before\" and \"after\" code. Try to interleave if possible (i.e.: "
+"do not run 20 times before then 20 times after), this makes it possible to "
+"spot environmental effects. Do not interleave 1:1, but 3:3, this makes it "
+"possible to spot interaction effects."
+msgstr ""
+"Выполните тест как минимум 3 раза, но лучше запустить более 20 раз как для "
+"кода \"до\", так и для кода \"после\". По возможности чередуйте запуски "
+"(т.е. не следует запускать 20 раз \"до\", а затем 20 раз \"после\"), это "
+"поможет выявить влияние окружения. Не чередуйте строго 1:1, а лучше 3:3, "
+"чтобы можно было обнаружить эффекты взаимодействия."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:88
+msgid ""
+"A good pattern is: `bababa{bbbaaa}*`. This gives hint after the first 1+1 "
+"runs (so it is possible to stop the test if it goes entirely the wrong way), "
+"a standard deviation after the first 3+3 (gives a good indication if it is "
+"going to be worth a long run) and trending and interaction numbers later on."
+msgstr ""
+"Хороший шаблон: `bababa{bbbaaa}*`. Это дает подсказку после первых 1+1 "
+"прогонов (так что можно остановить тест, если всё идет совсем не так), "
+"стандартное отклонение после первых 3+3 (дает хорошее представление, стоит "
+"ли проводить длительный прогон), а также тренды и показатели взаимодействия "
+"позже."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:89
+msgid ""
+"Use man:ministat[1] to see if the numbers are significant. Consider buying "
+"\"Cartoon guide to statistics\" ISBN: 0062731025, highly recommended, if you "
+"have forgotten or never learned about standard deviation and Student's T."
+msgstr ""
+"Используйте man:ministat[1], чтобы определить, являются ли числа значимыми. "
+"Рекомендуется приобрести книгу \"Cartoon guide to statistics\" ISBN: "
+"0062731025, особенно если вы забыли или никогда не изучали стандартное "
+"отклонение и t-критерий Стьюдента."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:90
+msgid ""
+"Do not use background man:fsck[8] unless the test is a benchmark of "
+"background `fsck`. Also, disable `background_fsck` in [.filename]#/etc/"
+"rc.conf# unless the benchmark is not started at least 60+\"``fsck`` "
+"runtime\" seconds after the boot, as man:rc[8] wakes up and checks if `fsck` "
+"needs to run on any file systems when background `fsck` is enabled. "
+"Likewise, make sure there are no snapshots lying around unless the benchmark "
+"is a test with snapshots."
+msgstr ""
+"Не используйте фоновый man:fsck[8], если тест не является бенчмарком "
+"фонового `fsck`. Также отключите `background_fsck` в [.filename]#/etc/"
+"rc.conf#, если бенчмарк не запускается как минимум через 60+«время работы "
+"``fsck``» секунд после загрузки, так как man:rc[8] пробуждается и проверяет, "
+"нужно ли запускать `fsck` для каких-либо файловых систем, когда включен "
+"фоновый `fsck`. Аналогично, убедитесь, что нет оставшихся снимков, если "
+"только бенчмарк не является тестом со снимками."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:91
+msgid ""
+"If the benchmark show unexpected bad performance, check for things like high "
+"interrupt volume from an unexpected source. Some versions of ACPI have been "
+"reported to \"misbehave\" and generate excess interrupts. To help diagnose "
+"odd test results, take a few snapshots of `vmstat -i` and look for anything "
+"unusual."
+msgstr ""
+"Если тесты производительности показывают неожиданно низкие результаты, "
+"проверьте такие факторы, как высокий объем прерываний из неожиданного "
+"источника. Сообщалось, что некоторые версии ACPI могут \"вести себя "
+"неправильно\" и генерировать избыточные прерывания. Для диагностики "
+"необычных результатов тестов сделайте несколько снимков `vmstat -i` и "
+"поищите что-то необычное."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:92
+msgid ""
+"Make sure to be careful about optimization parameters for kernel and "
+"userspace, likewise debugging. It is easy to let something slip through and "
+"realize later the test was not comparing the same thing."
+msgstr ""
+"Будьте внимательны к параметрам оптимизации для ядра и пользовательского "
+"пространства, а также отладки. Легко упустить что-то и позже понять, что "
+"тест сравнивал не одно и то же."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:93
+msgid ""
+"Do not ever benchmark with the `WITNESS` and `INVARIANTS` kernel options "
+"enabled unless the test is interested to benchmarking those features. "
+"`WITNESS` can cause 400%+ drops in performance. Likewise, userspace "
+"man:malloc[3] parameters default differently in -CURRENT from the way they "
+"ship in production releases."
+msgstr ""
+"Никогда не проводите тестирование производительности с включёнными "
+"параметрами ядра `WITNESS` и `INVARIANTS`, если тест не направлен на оценку "
+"производительности именно этих функций. `WITNESS` может привести к снижению "
+"производительности на 400% и более. Аналогично, параметры userspace "
+"man:malloc[3] по умолчанию отличаются в -CURRENT от тех, что поставляются в "
+"релизах."
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:95
+#, no-wrap
+msgid "The FreeBSD Source Tinderbox"
+msgstr "Tinderbox для исходного текста FreeBSD"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:98
+msgid "The source Tinderbox consists of:"
+msgstr "Исходный Tinderbox состоит из:"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:100
+msgid ""
+"A build script, [.filename]#tinderbox#, that automates checking out a "
+"specific version of the FreeBSD source tree and building it."
+msgstr ""
+"Скрипта сборки [.filename]#tinderbox#, который автоматизирует выгрузку "
+"определённой версии исходного кода FreeBSD и её сборку."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:101
+msgid ""
+"A supervisor script, [.filename]#tbmaster#, that monitors individual "
+"Tinderbox instances, logs their output, and emails failure notices."
+msgstr ""
+"Скрипта-супервизора [.filename]#tbmaster#, который отслеживает отдельные "
+"экземпляры Tinderbox, записывает их вывод и отправляет уведомления о сбоях "
+"по электронной почте."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:102
+msgid ""
+"A CGI script named [.filename]#index.cgi# that reads a set of tbmaster logs "
+"and presents an easy-to-read HTML summary of them."
+msgstr ""
+"Скрипта CGI с именем [.filename]#index.cgi#, который читает набор журналов "
+"tbmaster и представляет их в виде удобочитаемой HTML-сводки."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:103
+msgid ""
+"A set of build servers that continually test the tip of the most important "
+"FreeBSD code branches."
+msgstr ""
+"Набора серверов сборки, которые постоянно тестируют последние изменения "
+"наиболее важных веток кода FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:104
+msgid ""
+"A webserver that keeps a complete set of Tinderbox logs and displays an up-"
+"to-date summary."
+msgstr ""
+"Веб-сервера, хранящего полный набор журналов Tinderbox и отображающий "
+"актуальную сводку."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:107
+msgid ""
+"The scripts are maintained and were developed by {des}, and are now written "
+"in Perl, a move on from their original incarnation as shell scripts. All "
+"scripts and configuration files are kept in https://www.freebsd.org/cgi/"
+"cvsweb.cgi/projects/tinderbox/[/projects/tinderbox/]."
+msgstr ""
+"Скрипты поддерживаются и были разработаны {des}, и сейчас написаны на Perl, "
+"что стало шагом вперед по сравнению с их первоначальной версией в виде shell-"
+"скриптов. Все скрипты и конфигурационные файлы хранятся в https://"
+"www.freebsd.org/cgi/cvsweb.cgi/projects/tinderbox/[/projects/tinderbox/]."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:109
+msgid ""
+"For more information about the tinderbox and tbmaster scripts at this stage, "
+"see their respective man pages: tinderbox(1) and tbmaster(1)."
+msgstr ""
+"Для получения дополнительной информации о скриптах tinderbox и tbmaster на "
+"данном этапе обратитесь к соответствующим руководствам: tinderbox(1) и "
+"tbmaster(1)."
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:110
+#, no-wrap
+msgid "The index.cgi Script"
+msgstr "Скрипт index.cgi"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:117
+msgid ""
+"The [.filename]#index.cgi# script generates the HTML summary of tinderbox "
+"and tbmaster logs. Although originally intended to be used as a CGI script, "
+"as indicated by its name, this script can also be run from the command line "
+"or from a man:cron[8] job, in which case it will look for logs in the "
+"directory where the script is located. It will automatically detect "
+"context, generating HTTP headers when it is run as a CGI script. It "
+"conforms to XHTML standards and is styled using CSS."
+msgstr ""
+"Скрипт [.filename]#index.cgi# генерирует HTML-сводку журналов tinderbox и "
+"tbmaster. Хотя изначально он предназначался для использования в качестве CGI-"
+"скрипта, как следует из его названия, этот скрипт также может быть запущен "
+"из командной строки или из задачи man:cron[8], в таком случае он будет "
+"искать логи в директории, где расположен сам скрипт. Он автоматически "
+"определяет контекст, генерируя HTTP-заголовки при запуске в качестве CGI-"
+"скрипта. Он соответствует стандартам XHTML и использует CSS для стилизации."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:120
+msgid ""
+"The script starts in the `main()` block by attempting to verify that it is "
+"running on the official Tinderbox website. If it is not, a page indicating "
+"it is not an official website is produced, and a URL to the official site is "
+"provided."
+msgstr ""
+"Скрипт начинает работу в блоке `main()`, пытаясь проверить, что он "
+"выполняется на официальном сайте Tinderbox. Если это не так, создается "
+"страница с указанием, что это не официальный сайт, и предоставляется URL "
+"официального сайта."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:123
+msgid ""
+"Next, it scans the log directory to get an inventory of configurations, "
+"branches and architectures for which log files exist, to avoid hard-coding a "
+"list into the script and potentially ending up with blank rows or columns. "
+"This information is derived from the names of the log files matching the "
+"following pattern:"
+msgstr ""
+"Далее выполняется сканирование каталога журналов для получения перечня "
+"конфигураций, веток и архитектур, для которых существуют файлы журналов, "
+"чтобы избежать жесткого задания списка в скрипте и потенциального появления "
+"пустых строк или столбцов. Эта информация извлекается из имен файлов "
+"журналов, соответствующих следующему шаблону:"
+
+#. type: delimited block . 4
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:127
+#, no-wrap
+msgid "tinderbox-$config-$branch-$arch-$machine.{brief,full}\n"
+msgstr "tinderbox-$config-$branch-$arch-$machine.{brief,full}\n"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:131
+msgid ""
+"The configurations used on the official Tinderbox build servers are named "
+"for the branches they build. For example, the `releng_8` configuration is "
+"used to build `RELENG_8` as well as all still-supported release branches."
+msgstr ""
+"Конфигурации, используемые на официальных серверах сборки Tinderbox, названы "
+"в соответствии с ветками, которые они собирают. Например, конфигурация "
+"`releng_8` используется для сборки `RELENG_8`, а также всех поддерживаемых "
+"веток выпусков."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:133
+msgid ""
+"Once all of this startup procedure has been successfully completed, "
+"`do_config()` is called for each configuration."
+msgstr ""
+"После успешного завершения всей процедуры запуска для каждой конфигурации "
+"вызывается `do_config()`."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:135
+msgid ""
+"The `do_config()` function generates HTML for a single Tinderbox "
+"configuration."
+msgstr ""
+"Функция `do_config()` генерирует HTML для отдельной конфигурации Tinderbox."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:138
+msgid ""
+"It works by first generating a header row, then iterating over each branch "
+"build with the specified configuration, producing a single row of results "
+"for each in the following manner:"
+msgstr ""
+"Он работает, сначала создавая строку заголовка, затем перебирая каждую "
+"сборку ветки с указанной конфигурацией, формируя одну строку результатов для "
+"каждой следующим образом:"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:140
+msgid "For each item:"
+msgstr "Для каждого элемента:"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:142
+msgid "For each machine within that architecture:"
+msgstr "Для каждой машины в рамках этой архитектуры:"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:144
+msgid "If a brief log file exists, then:"
+msgstr "Если существует краткий файл журнала, то:"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:146
+msgid "Call `success()` to determine the outcome of the build."
+msgstr "Вызвать `success()`, чтобы определить результат сборки."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:147
+msgid "Output the modification size."
+msgstr "Вывести размер изменения."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:148
+msgid ""
+"Output the size of the brief log file with a link to the log file itself."
+msgstr "Вывести размер краткого файла журнала со ссылкой на сам файл журнала."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:149
+msgid "If a full log file also exists, then:"
+msgstr "Если также существует полный файл журнала, то:"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:151
+msgid ""
+"Output the size of the full log file with a link to the log file itself."
+msgstr "Вывести размер полного файла журнала со ссылкой на сам файл журнала."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:153
+msgid "Otherwise:"
+msgstr "В противном случае:"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:155
+msgid "No output."
+msgstr "Нечего не выводить."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:157
+msgid ""
+"The `success()` function mentioned above scans a brief log file for the "
+"string \"tinderbox run completed\" in order to determine whether the build "
+"was successful."
+msgstr ""
+"Упомянутая выше функция `success()` проверяет краткий лог-файл на наличие "
+"строки \"tinderbox run completed\", чтобы определить, был ли сборка успешной."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:160
+msgid ""
+"Configurations and branches are sorted according to their branch rank. This "
+"is computed as follows:"
+msgstr ""
+"Конфигурации и ветви сортируются в соответствии с их рангом. Это вычисляется "
+"следующим образом:"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:162
+msgid "`HEAD` and `CURRENT` have rank 9999."
+msgstr "`HEAD` и `CURRENT` имеют ранг 9999."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:163
+msgid "`RELENG_x` has rank __``xx``__99."
+msgstr "`RELENG_x` имеет ранг __``xx``__99."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:164
+msgid "`RELENG_x_y` has rank _xxyy_."
+msgstr "`RELENG_x_y` имеет ранг _xxyy_."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:167
+msgid ""
+"This means that `HEAD` always ranks highest, and `RELENG` branches are "
+"ranked in numerical order, with each `STABLE` branch ranking higher than the "
+"release branches forked off of it. For instance, for FreeBSD 8, the order "
+"from highest to lowest would be:"
+msgstr ""
+"Это означает, что `HEAD` всегда имеет наивысший приоритет, а ветви `RELENG` "
+"ранжируются в числовом порядке, причём каждая ветвь `STABLE` имеет более "
+"высокий приоритет, чем ветви выпусков, ответвлённые от неё. Например, для "
+"FreeBSD 8 порядок от наивысшего к низшему будет следующим:"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:169
+msgid "`RELENG_8` (branch rank 899)."
+msgstr "`RELENG_8` (ранг ветки 899)."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:170
+msgid "`RELENG_8_3` (branch rank 803)."
+msgstr "`RELENG_8_3` (ранг ветки 803)."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:171
+msgid "`RELENG_8_2` (branch rank 802)."
+msgstr "`RELENG_8_2` (ранг ветки 802)."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:172
+msgid "`RELENG_8_1` (branch rank 801)."
+msgstr "`RELENG_8_1` (ранг ветки 801)."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:173
+msgid "`RELENG_8_0` (branch rank 800)."
+msgstr "`RELENG_8_0` (ранг ветки 800)."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:177
+msgid ""
+"The colors that Tinderbox uses for each cell in the table are defined by "
+"CSS. Successful builds are displayed with green text; unsuccessful builds "
+"are displayed with red text. The color fades as time passes since the "
+"corresponding build, with every half an hour bringing the color closer to "
+"grey."
+msgstr ""
+"Цвета, которые Tinderbox использует для каждой ячейки в таблице, "
+"определяются CSS. Успешные сборки отображаются зелёным текстом; неудачные "
+"сборки отображаются красным текстом. Цвет блекнет со временем с момента "
+"соответствующей сборки, приближаясь к серому каждые полчаса."
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:178
+#, no-wrap
+msgid "Official Build Servers"
+msgstr "Официальные серверы сборки"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:181
+msgid ""
+"The official Tinderbox build servers are hosted by http://"
+"www.sentex.ca[Sentex Data Communications], who also host the FreeBSD Netperf "
+"Cluster."
+msgstr ""
+"Официальные серверы сборки Tinderbox размещены на площадке http://"
+"www.sentex.ca[Sentex Data Communications], которая также предоставляет "
+"хостинг для кластера Netperf FreeBSD."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:183
+msgid "Three build servers currently exist:"
+msgstr "В настоящее время работают три сервера сборки:"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:185
+msgid "_freebsd-current.sentex.ca_ builds:"
+msgstr "_freebsd-current.sentex.ca_ собирает:"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:187
+msgid ""
+"`HEAD` for amd64, arm, i386, i386/pc98, ia64, mips, powerpc, powerpc64, and "
+"sparc64."
+msgstr ""
+"`HEAD` для amd64, arm, i386, i386/pc98, ia64, mips, powerpc, powerpc64 и "
+"sparc64."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:188
+msgid ""
+"`RELENG_9` and supported 9._X_ branches for amd64, arm, i386, i386/pc98, "
+"ia64, mips, powerpc, powerpc64, and sparc64."
+msgstr ""
+"`RELENG_9` и поддерживаемые ветки 9._X_ для amd64, arm, i386, i386/pc98, "
+"ia64, mips, powerpc, powerpc64 и sparc64."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:190
+msgid "_freebsd-stable.sentex.ca_ builds:"
+msgstr "_freebsd-stable.sentex.ca_ собирает:"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:192
+msgid ""
+"`RELENG_8` and supported 8._X_ branches for amd64, i386, i386/pc98, ia64, "
+"mips, powerpc and sparc64."
+msgstr ""
+"`RELENG_8` и поддерживаемые ветки 8._X_ для amd64, i386, i386/pc98, ia64, "
+"mips, powerpc и sparc64."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:194
+msgid "_freebsd-legacy.sentex.ca_ builds:"
+msgstr "_freebsd-legacy.sentex.ca_ собирает:"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:196
+msgid ""
+"`RELENG_7` and supported 7._X_ branches for amd64, i386, i386/pc98, ia64, "
+"powerpc, and sparc64."
+msgstr ""
+"`RELENG_7` и поддерживаемые ветки 7._X_ для amd64, i386, i386/pc98, ia64, "
+"powerpc и sparc64."
+
+#. type: Title ==
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:197
+#, no-wrap
+msgid "Official Summary Site"
+msgstr "Официальный сайт со сводками"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:200
+msgid ""
+"Summaries and logs from the official build servers are available online at "
+"http://tinderbox.FreeBSD.org[http://tinderbox.FreeBSD.org], hosted by {des} "
+"and set up as follows:"
+msgstr ""
+"Сводки и журналы с официальных серверов сборки доступны в сети по адресу "
+"http://tinderbox.FreeBSD.org[http://tinderbox.FreeBSD.org], размещены на "
+"{des} и настроены следующим образом:"
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:202
+msgid ""
+"A man:cron[8] job checks the build servers at regular intervals and "
+"downloads any new log files using man:rsync[1]."
+msgstr ""
+"Задание man:cron[8] проверяет серверы сборки через регулярные интервалы и "
+"загружает все новые файлы журналов с помощью man:rsync[1]."
+
+#. type: Plain text
+#: documentation/content/en/books/developers-handbook/testing/_index.adoc:202
+msgid "Apache is set up to use [.filename]#index.cgi# as `DirectoryIndex`."
+msgstr ""
+"Apache настроен на использование [.filename]#index.cgi# в качестве "
+"`DirectoryIndex`."