Переход к предыдущей публикации Все мы люди, все мы ошибаемся Александр Степанович Попов | Праотец мобильных телефонов Переход к следущей публикации

FreeBSD 7.2 - что нового?

Вторник, 5 мая, 2009 16:05:55 EEST

Исправления от 5 мая, 2009 17:59:50

FreeBSD 7.2 - что нового? Итак, 7.2 зарелизили. Не обошлось без “боков” - на последнем этапе подготовки выявили ошибку в  управлении блокировками (об этом подробно в конце). Изготовили патч, но в исходниках (cvs) исправления пока не внесены. (при написании этой публикации специально проcмотрел обновленные исходники c основного сервера cvsup.freebsd.org). Ладно, наложим патч.

Сегодня-завтра постараюсь обновить операционную систему на daemony.org. Поэтому не исключены (кратко)временные пропадания этого блога из Сети. А пока что перед обновлением не помешает заглянуть в список изменений (release notes) и ознакомиться с тем, что же добавилось нового, какие изменения и дополнения были внесены разработчиками.

Основные нововведения в FreeBSD 7.2-RELEASE

  1. Поддержка Superpages
    • Супер-страницы - это страницы памяти увеличенного размера с возможностью автоматической и прозрачной для приложений группировки в Superpages нескольких обычных страниц памяти. По-умолчанию возможность выключена, для активации нужно указать “vm.pmap.pg_ps_enabled=1″ в /boot/loader.conf.
  2. Увеличение адресного пространства памяти для работы ядра
    • Адресное пространство памяти доступное ядру увеличено для архитектуры amd64 до 6 Гб, а kmem map до 3.6 Гб (теперь значение устанавливается как 60% от адресного пространства ядра).
  3. Улучшения в работе системы изолированных окружения jail
    • Возможность назначения нескольких IP4/IP6 адресов.
    • Поддержка протокола SCTP.
    • Возможность жесткой привязки jail к заданному процессору с помощью утилиты cpuset.
    • Возможность запуска jail окружения с указанием использовать для него отдельную таблицу маршрутизации (FIB).
    • Возможность создания Jail без указания IP-адреса (без поддержки сети), по аналогии с chroot(8).
    • Для выполнения отладки в ddb(4) добавлены команды “show jails” и “show mount“.
    • Улучшена совместимость в плане работы 32-разрядных jail’ов на 64-разрядных системах.
  4. Изменения в наборе программ и утилит
    • В csup, аналоге cvsup, переписанном на языке Си, появилась поддержка режима CVSMode, при котором осуществляется загрузка CVS репозиториев целиком.
    • Из NetBSD портирован демон btpand с реализацией поддержки профилей Bluetooth Network Access Point (NAP), Group Ad-hoc Network (GN) и Personal Area Network User (PANU).
    • Добавлена новая утилита makefs для создания образа файловой системы на основе дерева директорий.
    • В утилите fsck(8) появилась опция “-D” с реализацией агрессивного режима восстановления серьезно поврежденной файловой системы, когда обычные способы восстановления не помогают или приводят к краху fsck.
    • DNS сервер BIND в базовой системе обновлен до версии 9.4.3-P2.
    • В систему портов добавлена возможность параллельной сборки, что значительно ускоряет процесс компиляции на многоядерных системах. Число параллельно выполняемых работ задается через параметр MAKE_JOBS_NUMBER в /etc/make.conf.
    • Официально поддерживаемая в портах версия KDE обновлена с 3.5.10 (x11/kde3) до 4.2.2 (x11/kde4). Добавлена новая версия GNOME 2.26, вместо 2.22.
  5. Улучшение поддержки файловых систем и работы с дисками
    • В glabel добавлена возможность использования ufsid меток для уникальной идентификации файловых систем.
    • В gjournal появилась поддержка журналирования корневой файловой системы.
    • В подсистеме cam(4) появилась возможность задания попыток чтения (sysctl kern.cam.cd.retry_count), что, например, позволяет значительно эффективнее работать утилитам подобным ddrescue при попытках чтения содержимого сбойных CD/DVD.
    • В коде VFS улучшена работа механизма совместной блокировки vnode, что позволяет повысить производительность. По умолчанию возможность выключена, для включения необходимо указать “sysctl vfs.lookup_shared=1“.
  6. Улучшение поддержки оборудования
    • Реализована полная поддержка процессоров семейства UltraSparc-III (Cheetah).
    • Добавлен новый драйвер sdhci(4) с поддержкой PCI SD хост контроллеров (кард-ридеров).
    • Обновлен модуль ядра DRM (Direct Rendering Manager) в котором улучшена поддержка GPU AMD/ATI r500, r600, r700, и IGP XGI V3XE/V5/V8, Intel i915.
    • Обновлены драйверы для сетевых карт Atheros, JMicron, SIS, RealTek, Broadcom. В fxp драйвере появилась поддержка TSO (TCP/IP segmentation offload), WoL (Wake on LAN), вычисления контрольных сумм и установка/очистка VLAN тегов силами сетевой карты.
    • Добавлена поддержка новых IDE/SATA/SAS контроллеров, например Marvell PATA M88SX6121 и nForce MCP67/MCP7.
    • Добавлен драйвер u3g(4) с поддержкой 3G модемов с USB интерфейсом, среди которых: Vodafone Mobile Connect Card 3G, Qualcomm CDMA MSM, Huawei E220, Novatel U740, Sierra MC875U.

По материалам opennet.ru

Кроме этого, уже на последнем этапе подготовки к релизу была выявлена ошибка в управлении блокировками при взаимодействии функций malloc(3) и функциями тредов. Когда многопоточный процесс вызывает системный вызов fork(2) в одном треде и функцию malloc(3) в другом потоке, это может привести к блокировке (deadlock) процесса потомка. Патч для исправления ошибки представлен здесь.

Коротко об этом обновлении (подробно здесь).

Обновляюсь как всегда классическим путем через пересборку “мира”, безо всяких freebsd-update. Хотя, кому этот способ больше по душе, то никто не запрещает.

Обновляем исходные коды системы через cvsup. Для этого создаем такой sup файл.

# cat /root/cvsup/src-all

#
# FreeBSD operation system source supfile for Daemony.org
#
*default host=cvsup1.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_7_2_0_RELEASE
*default delete use-rel-suffix
*default compress
src-all

Запускаем обновление исходных кодов системы:

# cvsup -g -L 2 /root/cvsup/src-all

Закончили обновлять исходники, патчим malloc.c в каталоге /usr/src/lib/libc/stdlib. Патч выглядит так:

@@ -4715,16 +4715,41 @@ _malloc_thread_cleanup(void)
 void
 _malloc_prefork(void)
 {
-	unsigned i;
+	bool again;
+	unsigned i, j;
+	arena_t *larenas[narenas], *tarenas[narenas];

 	/* Acquire all mutexes in a safe order. */

-	malloc_spin_lock(&arenas_lock);
-	for (i = 0; i < narenas; i++) {
-		if (arenas[i] != NULL)
-			malloc_spin_lock(&arenas[i]->lock);
-	}
-	malloc_spin_unlock(&arenas_lock);
+	/*
+	 * arenas_lock must be acquired after all of the arena mutexes, in
+	 * order to avoid potential deadlock with arena_lock_balance[_hard]().
+	 * Since arenas_lock protects the arenas array, the following code has
+	 * to race with arenas_extend() callers until it succeeds in locking
+	 * all arenas before locking arenas_lock.
+	 */
+	memset(larenas, 0, sizeof(arena_t *) * narenas);
+	do {
+		again = false;
+
+		malloc_spin_lock(&arenas_lock);
+		for (i = 0; i < narenas; i++) {
+			if (arenas[i] != larenas[i]) {
+				memcpy(tarenas, arenas, sizeof(arena_t *) *
+				    narenas);
+				malloc_spin_unlock(&arenas_lock);
+				for (j = 0; j < narenas; j++) {
+					if (larenas[j] != tarenas[j]) {
+						larenas[j] = tarenas[j];
+						malloc_spin_lock(
+						    &larenas[j]->lock);
+					}
+				}
+				again = true;
+				break;
+			}
+		}
+	} while (again);

 	malloc_mutex_lock(&base_mtx);

@@ -4739,6 +4764,7 @@ void
 _malloc_postfork(void)
 {
 	unsigned i;
+	arena_t *larenas[narenas];

 	/* Release all mutexes, now that fork() has completed. */

@@ -4750,12 +4776,12 @@ _malloc_postfork(void)

 	malloc_mutex_unlock(&base_mtx);

-	malloc_spin_lock(&arenas_lock);
+	memcpy(larenas, arenas, sizeof(arena_t *) * narenas);
+	malloc_spin_unlock(&arenas_lock);
 	for (i = 0; i < narenas; i++) {
-		if (arenas[i] != NULL)
-			malloc_spin_unlock(&arenas[i]->lock);
+		if (larenas[i] != NULL)
+			malloc_spin_unlock(&larenas[i]->lock);
 	}
-	malloc_spin_unlock(&arenas_lock);
 }

 /*

Помещаем это содержимое, например, в файл malloc.patch в каталог /usr/src/lib/libc/stdlib. Переходим в каталог и производим исправления:

# cd /usr/src/lib/libc/stdlib
# patch malloc.c malloc.patch
Hmm...  Looks like a unified diff to me...
Patching file malloc.c using Plan A...
Hunk #1 succeeded at 4715.
Hunk #2 succeeded at 4764.
Hunk #3 succeeded at 4776.
Hmm...  Ignoring the trailing garbage.
done

Оригинальный файл malloc.c размером 121589 байт. Патченный - 122377 байт.

Остальные действия по обновлению системы производятся как было уже описано ранее.

Всем удачного обновления. :cool:

Похожие публикации

Выделенные сервера дешевле обычного хостинга

Комментариев 7

Daemony 7 мая, 2009 16:21:56 EEST .:. ID #9570 .:.

Кстати, неплохо бы сделать возле кода кнопку “копировать” чтобы копировалось без нумерации, было бы удобней.
Ещё раз спасибо!

Пожалуйста. :) А насчет кнопки, так она есть.
В правом верхнем углу блока с кодом:

Специально syntaxhighlighter-plus плагин поставил. :)

andry 7 мая, 2009 15:45:23 EEST .:. ID #9565 .:.

А точно все лежит в нужных местах? Ведь по тексту ошибки как бы не найден патч.

Спасибо большое, уже разобрался, собирается мир. Лишнюю точку оставил от нумерации строк. Кстати, неплохо бы сделать возле кода кнопку “копировать” чтобы копировалось без нумерации, было бы удобней.

Ещё раз спасибо!

Daemony 7 мая, 2009 15:39:42 EEST .:. ID #9564 .:.

Не вышло пропатчить…

/usr/src/lib/libc/stdlib > patch malloc.c malloc.patch
Hmm… I can\’t seem to find a patch in there anywhere.

А точно все лежит в нужных местах? Ведь по тексту ошибки как бы не найден патч.

andry 7 мая, 2009 14:57:34 EEST .:. ID #9561 .:.

Не вышло пропатчить…

/usr/src/lib/libc/stdlib > patch malloc.c malloc.patch
Hmm… I can\’t seem to find a patch in there anywhere.

Всё сделал по инструкции, i386, 7.2-RELEASE #0

Daemony 5 мая, 2009 17:48:20 EEST .:. ID #9467 .:.

Я тож не собирался обновляться, но в виду усовершенствования поддержки jail хочется этим побаловаться… Может потом напишу еще на эту тему.

friend 5 мая, 2009 16:59:58 EEST .:. ID #9464 .:.

У меня уже практически 4 года стоит 5.3
Последнюю Фрю, что я ставил, была 6.2 - ничего не меняется. А 5.3 шуршит на ура, зачем меня не пойму :)

если новое железо. то есть смысл.

а ваще обновлятся тож не буду, но все равно в добрый путь.

Fl@sh 5 мая, 2009 16:24:11 EEST .:. ID #9460 .:.

У меня уже практически 4 года стоит 5.3
Последнюю Фрю, что я ставил, была 6.2 - ничего не меняется. А 5.3 шуршит на ура, зачем меня не пойму :)

Возник вопрос по этой теме, или есть что добавить? Говорите!

  1. Зарегистрированным пользователям вводить защитный код (captcha) не приходится.
  2. Загрузить свою аватарку Вы сможете, зарегистрировавшись на сервисе www.gravatar.com
Публикуя комментарий Вы подтверждаете, что ознакомились c Правилами и принимаете их!
HOMOSAPIENS ONLY! :)