FastNetMon

Thursday 18 November 2010

В чем отличия редакций server, virtual и generic в Ubuntu 10.10?

Итак, Вы решили поставить новое ядро в Ubuntu 10.10 (ну или любом из новых) и тут Вас постигает шок от огромного выбора редакций ядер (я рассматриваю лишь 64 битные ядра):
apt-cache search linux-image
alsa-base - ALSA driver configuration files
linux-image - Generic Linux kernel image.
linux-image-2.6.32-305-ec2 - Linux kernel image for version 2.6.32 on x86/x86_64
linux-image-ec2 - Linux kernel image for ec2 machines
linux-image-generic - Generic Linux kernel image
linux-image-server - Linux kernel image on Server Equipment.
linux-image-virtual - Linux kernel image for virtual machines
linux-image-2.6.35-22-generic - Linux kernel image for version 2.6.35 on x86/x86_64
linux-image-2.6.35-22-server - Linux kernel image for version 2.6.35 on x86_64
linux-image-2.6.35-22-virtual - Linux kernel image for version 2.6.35 on x86/x86_64

Немного скудной информации об этом есть здесь: https://help.ubuntu.com/10.10/serverguide/C/preparing-to-install.html#intro-kernel-diffs

Согласно ей, в редакции server имеются следующие отличия:
1. The Server Edition uses the Deadline I/O scheduler instead of the CFQ scheduler used by the Desktop Edition.

2. Preemption is turned off in the Server Edition.

3. The timer interrupt is 100 Hz in the Server Edition and 250 Hz in the Desktop Edition.

Но такая формалировка, во-первых, немного не тянет на достоверность, а, во-вторых, хочется конкретики в виде отличий в конфигах при сборке ядра :) Поэтому немножко поисследуем.

Стягиваем исходники ядра:
apt-get install linux-source-2.6.35 -y

Переходим в папку исходников:
cd /usr/src/linux-source-2.6.35

После недолгих поисков в папке debian.master/config/amd64/ обнаруживаем конфиги ядра для каждой из редакций (в терминологии авторов "различных flavour", то есть, ядра с различными вкусами, ага).

ls -la debian.master/config/amd64/
total 28
drwxr-xr-x 2 root root 4096 Nov 18 03:00 .
drwxr-xr-x 6 root root 4096 Nov 18 03:00 ..
-rw-r--r-- 1 root root 7054 Oct 17 00:36 config.common.amd64
-rw-r--r-- 1 root root 477 Oct 17 00:36 config.flavour.generic
-rw-r--r-- 1 root root 470 Oct 17 00:36 config.flavour.server
-rw-r--r-- 1 root root 471 Oct 17 00:36 config.flavour.virtual

Для наглядности привожу их все.

Стандартное ядро (desktop).
cat config.flavour.generic
#
# Config options for config.flavour.generic automatically generated by splitconfig.pl
#
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_DEADLINE is not set
CONFIG_DEFAULT_IOSCHED="cfq"
# CONFIG_MEMORY_HOTPLUG is not set
# CONFIG_PREEMPT_NONE is not set
CONFIG_PREEMPT_VOLUNTARY=y
CONFIG_SCSI_SPI_ATTRS=m
CONFIG_SCSI_SYM53C8XX_2=m
CONFIG_VIRTIO=m
CONFIG_VIRTIO_BLK=m
CONFIG_VIRTIO_NET=m
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_RING=m
CONFIG_XEN_BLKDEV_FRONTEND=m
CONFIG_XEN_NETDEV_FRONTEND=m

Редакция server.
cat config.flavour.server
#
# Config options for config.flavour.server automatically generated by splitconfig.pl
#
# CONFIG_DEFAULT_CFQ is not set
CONFIG_DEFAULT_DEADLINE=y
CONFIG_DEFAULT_IOSCHED="deadline"
CONFIG_MEMORY_HOTPLUG=y
CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_SCSI_SPI_ATTRS=y
CONFIG_SCSI_SYM53C8XX_2=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_RING=y
CONFIG_XEN_BLKDEV_FRONTEND=m
CONFIG_XEN_NETDEV_FRONTEND=m

Редакция virtual.
cat config.flavour.virtual
#
# Config options for config.flavour.virtual automatically generated by splitconfig.pl
#
# CONFIG_DEFAULT_CFQ is not set
CONFIG_DEFAULT_DEADLINE=y
CONFIG_DEFAULT_IOSCHED="deadline"
CONFIG_MEMORY_HOTPLUG=y
CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_SCSI_SPI_ATTRS=y
CONFIG_SCSI_SYM53C8XX_2=y
CONFIG_VIRTIO=y
CONFIG_VIRTIO_BLK=y
CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_RING=y
CONFIG_XEN_BLKDEV_FRONTEND=y
CONFIG_XEN_NETDEV_FRONTEND=y


Итак, для начала сравним редакции virtual и server:
diff -u config.flavour.server config.flavour.virtual
--- config.flavour.server 2010-10-17 00:36:17.000000000 +0400
+++ config.flavour.virtual 2010-10-17 00:36:17.000000000 +0400
@@ -1,5 +1,5 @@
#
-# Config options for config.flavour.server automatically generated by splitconfig.pl
+# Config options for config.flavour.virtual automatically generated by splitconfig.pl
#
# CONFIG_DEFAULT_CFQ is not set
CONFIG_DEFAULT_DEADLINE=y
@@ -14,5 +14,5 @@
CONFIG_VIRTIO_NET=y
CONFIG_VIRTIO_PCI=y
CONFIG_VIRTIO_RING=y
-CONFIG_XEN_BLKDEV_FRONTEND=m
-CONFIG_XEN_NETDEV_FRONTEND=m
+CONFIG_XEN_BLKDEV_FRONTEND=y
+CONFIG_XEN_NETDEV_FRONTEND=y

Согласно официальной вики Xen, эти опции требуются для корректой работы сервера в качестве Xen DomU в режиме паравиртуализации, http://wiki.xen.org/xenwiki/XenParavirtOps

Разница между generic и server редакциями чуть больше:
diff -u config.flavour.generic config.flavour.server
--- config.flavour.generic 2010-10-17 00:36:17.000000000 +0400
+++ config.flavour.server 2010-10-17 00:36:17.000000000 +0400
@@ -1,18 +1,18 @@
#
-# Config options for config.flavour.generic automatically generated by splitconfig.pl
+# Config options for config.flavour.server automatically generated by splitconfig.pl
#
-CONFIG_DEFAULT_CFQ=y
-# CONFIG_DEFAULT_DEADLINE is not set
-CONFIG_DEFAULT_IOSCHED="cfq"
-# CONFIG_MEMORY_HOTPLUG is not set
-# CONFIG_PREEMPT_NONE is not set
-CONFIG_PREEMPT_VOLUNTARY=y
-CONFIG_SCSI_SPI_ATTRS=m
-CONFIG_SCSI_SYM53C8XX_2=m
-CONFIG_VIRTIO=m
-CONFIG_VIRTIO_BLK=m
-CONFIG_VIRTIO_NET=m
-CONFIG_VIRTIO_PCI=m
-CONFIG_VIRTIO_RING=m
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_DEADLINE=y
+CONFIG_DEFAULT_IOSCHED="deadline"
+CONFIG_MEMORY_HOTPLUG=y
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_SCSI_SPI_ATTRS=y
+CONFIG_SCSI_SYM53C8XX_2=y
+CONFIG_VIRTIO=y
+CONFIG_VIRTIO_BLK=y
+CONFIG_VIRTIO_NET=y
+CONFIG_VIRTIO_PCI=y
+CONFIG_VIRTIO_RING=y
CONFIG_XEN_BLKDEV_FRONTEND=m
CONFIG_XEN_NETDEV_FRONTEND=m

Итого, в редакции сервер планировщик ввода-вывода CFQ заменяется на Deadline, что ж сомнительная замена, но вполне допустимая. Также включается поддержка горячего добавления памяти на сервер CONFIG_MEMORY_HOTPLUG. В generic активен CONFIG_PREEMPT_VOLUNTARY, в то время как в серверной редакции CONFIG_PREEMPT_NONE, подробнее прочесть, что это за звери можно здесь: http://lxr.linux.no/linux/kernel/Kconfig.preempt. Также в server редакции добавляются в ядро (в generic они модулями) две крайне экзотичные и в упор мне не известные фишки: CONFIG_SCSI_SPI_ATTRS и CONFIG_SCSI_SYM53C8XX_2. А также поддержка VIRTIO (CONFIG_VIRTIO, CONFIG_VIRTIO_*) в серверной редакции поставляется вкомпилированной в ядро, а не в модулях.

2 comments :

  1. Вау, спасибо за проделанную работу, просветлил крайне ясно, снк.

    ReplyDelete
  2. Всегда пожалуйста :) Но фишки по вирутализации нужно рассмотреть отдельно и более подробно.

    ReplyDelete

Note: only a member of this blog may post a comment.