Показаны сообщения с ярлыком Linux kernel. Показать все сообщения
Показаны сообщения с ярлыком Linux kernel. Показать все сообщения

вторник, 12 июня 2012 г.

Профайлинг ядра Linux

В современных ядрах в папке tools/perf обитает чудесная утилита, которая позволяет посмотреть, чем таким интересным занимается ядро и отпрофайлить все это дело ./perf top:
                                          
Так можно отлаживать системы в случае большого потребления прцоессора системой.

вторник, 6 марта 2012 г.

Что означает ошибка "BUG: soft lockup - CPU#0 stuck for Xs!" ?

Она означает, что на данном ядре не происходила операция reschedule в течение X секунд. Иными словами (на моем уровне понимания), один процесс все это время монопольно занимал все ядро целиком и другие процессы не могли от него получить процессорного времени (то есть, как раз выполнить тот самый решедулинг - приостановить один процесс и предоставить процессорное время другому). Иными словами, это блокировка, которая блокирует работу одного/нескольких ядер. Чем вызвана - причин множество, в том числе баг ядра.

Источник: http://www.cs.fsu.edu/~baker/devices/lxr/http/source/linux/kernel/softlockup.c

Проблема никак не фиксится. Если у Вас OpenVZ и 2.6.32 ядро, то обновитесь до упора, но если жто не решит проблем со стабильностью - откатывайтесь на centos 5, могу помочь с полным рецептом для этого дела.

Как настроить автоматический ребут Linux систем при возникновении кернел паника?

Очень просто: http://www.cyberciti.biz/tips/reboot-linux-box-after-a-kernel-panic.html

понедельник, 4 июля 2011 г.

Как заставить Linux перезагрузиться при возникновении panic ошибки?

Для этого достаточно задать параметр kernel.panic в файле /etc/sysctl.conf и применить изменения. При установке данного параметра в нулевое значение перезагрузки при panic происходить не будет, при установке в любое положительное значение (строго больше нуля) будет происходить перезагрузка через заданное количество секунд.

Итого, добавляем в файл /etc/sysctl.conf строку
kernel.panic = 15
После этого применяем изменения:
sysctl -p

Все, после этого при возникновении panic ошибки машина перезагрузится и продолжит работать корректно. Но, обращаю внимание, это неправильный способ решения проблемы, правильный заключается в поиске проблемы и ее решении.

суббота, 28 мая 2011 г.

Как посмотреть значения лимитов ulimit для конкретного процесса?

Вот так:
cat /proc/21231/limits
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 10485760 unlimited bytes
Max core file size 0 unlimited bytes
Max resident set unlimited unlimited bytes
Max processes 193185 193185 processes
Max open files 1000000 1000000 files
Max locked memory 65536 65536 bytes
Max address space unlimited unlimited bytes
Max file locks unlimited unlimited locks
Max pending signals 193185 193185 signals
Max msgqueue size 819200 819200 bytes
Max nice priority 0 0
Max realtime priority 0 0
Max realtime timeout unlimited unlimited us

Где 21231 - это pid процесса, для которого нужно посмотреть лимит.

воскресенье, 24 апреля 2011 г.

Как правильно добавлять модули ядра в автозапуск на RHEL 5/CentOS 5

Вот так: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-kernel-modules-persistant.html

Проверено, работает :)

Интересные последствия активации параметра ядра acpi=off

Один из сайд-эффектов этой настройки заключается в том, что отключается гипер-тридинг на соверменных процессорах. То есть, без этого параметра ядер было 8, а с ним стало 4:
cat /proc/cmdline
ro root=UUID=f98218f9-1428-4879-b567-f314235cff8e acpi=off vga=0x317
root@ovz32 ~ # cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 26
model name : Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz
stepping : 5
cpu MHz : 3074.424
cache size : 8192 KB
physical id : 0
siblings : 4
core id : 0
cpu cores : 4
apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx
rdtscp lm constant_tsc ida nonstop_tsc pni monitor ds_cpl vmx est tm2
cx16 xtpr popcnt lahf_lm
bogomips : 6154.69
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management: [8]

processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 26
model name : Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz
stepping : 5
cpu MHz : 3074.424
cache size : 8192 KB
physical id : 0
siblings : 4
core id : 1
cpu cores : 4
apicid : 2
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx
rdtscp lm constant_tsc ida nonstop_tsc pni monitor ds_cpl vmx est tm2
cx16 xtpr popcnt lahf_lm
bogomips : 6147.66
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management: [8]

processor : 2
vendor_id : GenuineIntel
cpu family : 6
model : 26
model name : Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz
stepping : 5
cpu MHz : 3074.424
cache size : 8192 KB
physical id : 0
siblings : 4
core id : 2
cpu cores : 4
apicid : 4
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx
rdtscp lm constant_tsc ida nonstop_tsc pni monitor ds_cpl vmx est tm2
cx16 xtpr popcnt lahf_lm
bogomips : 6024.78
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management: [8]

processor : 3
vendor_id : GenuineIntel
cpu family : 6
model : 26
model name : Intel(R) Core(TM) i7 CPU 950 @ 3.07GHz
stepping : 5
cpu MHz : 3074.424
cache size : 8192 KB
physical id : 0
siblings : 4
core id : 3
cpu cores : 4
apicid : 6
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx
rdtscp lm constant_tsc ida nonstop_tsc pni monitor ds_cpl vmx est tm2
cx16 xtpr popcnt lahf_lm
bogomips : 6147.65
clflush size : 64
cache_alignment : 64
address sizes : 36 bits physical, 48 bits virtual
power management: [8]

пятница, 8 апреля 2011 г.

Как восстановить удаленный файл в Линукс, если он еще открыт в каком-либо приложении?

Все очень просто.

system-r:~# wc -l /etc/apache2/apache2.conf
0 /etc/apache2/apache2.conf
system-r:~# lsof | grep apache2.conf
ispmgr 6655 root 18u REG 9,2 0 21381891 /etc/apache2/apache2.conf
ispmgr 6655 root 37u REG 9,2 15552 21382423 /etc/apache2/apache2.conf.snap (deleted)
system-r:~# cd /proc/6655/fd
system-r:/proc/6655/fd# wc -l 37
398 37
system-r:/proc/6655/fd# cp 37 /root/apache2_recovered.conf
system-r:/proc/6655/fd# wc -l /root/apache2_recovered.conf
398 /root/apache2_recovered.conf
system-r:/proc/6655/fd# stat /root/apache2_recovered.conf
File: `/root/apache2_recovered.conf'
Size: 15552 Blocks: 32 IO Block: 4096 regular file
Device: 902h/2306d Inode: 6971410 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-04-07 23:48:39.000000000 +0400
Modify: 2011-04-07 23:48:35.000000000 +0400
Change: 2011-04-07 23:48:35.000000000 +0400

среда, 19 января 2011 г.

Высокая нагрузка на диск со стороны kjournald в CentOS (по iotop)

Есть вот такие показания iotop:
Total DISK READ: 31.42 K/s | Total DISK WRITE: 3.00 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
2376 be/3 root 0.00 B/s 80.29 K/s 0.00 % 99.99 % [kjournald]

Машина - CentOS, на диске очень большое число мелких файлов, опции монтирования - стандартные.


Пока нашел лишь вот такое: http://www.linux.org.ru/forum/admin/5204549и http://forum.kernelnewbies.org/read.php?11,853,853

воскресенье, 5 декабря 2010 г.

Интересная опция Linux ядра

ip_nonlocal_bind - BOOLEAN If set, allows processes to bind() to non-local IP addresses, which can be quite useful - but may break some applications.

Кому не слабо придумать ей практическое применение?

Что такое TIME_WAIT статус tcp сокета в Linux?

http://www.softlab.ntua.gr/facilities/documentation/unix/unix-socket-faq/unix-socket-faq-2.html#ss2.7

В двух словах:
When you close a socket, the server goes into a TIME_WAIT state, just to be really really sure that all the data has gone through

А вот пару слов, почему они могут быть вредны, эти самые TIME_WAIT соединения: http://wiki.apache.org/HttpComponents/FrequentlyAskedConnectionManagementQuestions

Есть пара вариантов, как избежать пагубного влияния большого числа TIME_WAIT на обработку соединений, они включаются ключами sysctl:
tcp_tw_recycle - BOOLEAN
Enable fast recycling TIME-WAIT sockets. Default value is 0. It should not be changed without advice/request of technical experts.

tcp_tw_reuse - BOOLEAN
Allow to reuse TIME-WAIT sockets for new connections when it is safe from protocol viewpoint. Default value is 0. It should not be changed without advice/request of technical experts.

Источник: документация ядра Линукс, Documentation/networking/ip-sysctl.txt

Типы состояния tcp сокетов в Linux

ESTABLISHED The socket has an established connection.
SYN_SENT The socket is actively attempting to establish a connection.
SYN_RECV A connection request has been received from the network.
FIN_WAIT1 The socket is closed, and the connection is shutting down.
FIN_WAIT2 Connection is closed, and the socket is waiting for a shutdown from the remote end.
TIME_WAIT The socket is waiting after close to handle packets still in the network.
CLOSE The socket is not being used.
CLOSE_WAIT The remote end has shut down, waiting for the socket to close.
LAST_ACK The remote end has shut down, and the socket is closed. Waiting for acknowledgement.
LISTEN The socket is listening for incoming connections. Such sockets are not included in the output unless you specify the --listening (-l) or --all (-a) option.
CLOSING Both sockets are shut down but we still don’t have all our data sent.
UNKNOWN The state of the socket is unknown.

Источник: man netstat

Nginx + memcached = connect() to 127.0.0.1:11211 failed (99: Cannot assign requested address) while connecting to upstream

При нагрузочном тестировании:
ab -c 45 -n 1000000 http://domain.ru/

Вот такая радость в логах Nginx 0.7.65:
2010/12/05 21:54:14 [crit] 21537#0: *14117 connect() to 127.0.0.1:11211 failed (99: Cannot assign requested address) while connecting to upstream, client: xx.xx.xx.xx server: domain.ru, request: "POST /test.php HTTP/1.1", subrequest: "/test.php", upstream: "memcached://127.0.0.1:11211", host: "domain.ru"

Как симптом море TIME_WAIT ов:
netstat -an |grep TIME_WAIT | grep 11211 | wc -l
24203

Фиксить нужно так:
Нужно увеличить число исходящих портов. Как это сделать в Линуксе - не знаю.
--
Игорь Сысоев

Но проблема в том, что пул этих адресов итак огромен:
sysctl -a|grep range
net.ipv4.ip_local_port_range = 32768 61000

Далее идет вот такое обсуждение перенастройки на 1024-65535:
now my benchmark test works fine. are there any other problems
when i run debian with this large port range?

No, there should no be problems.
You may set 1024-65535.

Есть еще вариант:
sysctl -a | grep recycl
net.ipv4.tcp_tw_recycle = 0

sysctl -a | grep reuse
net.ipv4.tcp_tw_reuse = 0

Итого, резюмируя, лично я делаю так (18000 потому, что с 21 по 17900 у меня висят различные демоны):
echo "net.ipv4.ip_local_port_range = 18000 61000" >> /etc/sysctl.conf
sysctl -p

И не забываем перезаупстить Nginx:
/etc/init.d/nginx restart

Итого, мы где-то на 15 000 портов расширили интервал исходящих портов и ошибка должна исчезнуть.

Источник: вот и вот

Последовательность запуска задач в пределах заданного runlevel в Debian

С пониманием, когда запускается какой runlevel, обычно проблем нету, но есть проблемы с пониманием, как задачи упорядочиваются внутри конкретного runlevel. Рассмотрим на примере /etc/rcS.d/. В данной папке есть очень много файлов с именами вида SNNимя, где NN - двухзначное число:
ls
README S05keymap.sh S20module-init-tools S35quota S45mountnfs.sh S70x11-common
S01glibc.sh S07hdparm S25mdadm-raid S36mountall-bootclean.sh S46mountnfs-bootclean.sh S75sudo
S02hostname.sh S08hwclockfirst.sh S26lvm2 S36udev-mtab S47lm-sensors S99stop-bootlogd-single
S02mountkernfs.sh S10checkroot.sh S30checkfs.sh S37mountoverflowtmp S48console-screen.sh
S03udev S11hwclock.sh S30procps S39ifupdown S55bootmisc.sh
S04mountdevsubfs.sh S12mtab.sh S34fuse S40networking S55urandom
S05bootlogd S18ifupdown-clean S35mountall.sh S43portmap S70screen-cleanup

Последовательность тут очень простая: загрузка начинается со скриптов c меньшим номером и переходит к скриптам с большим номером.

Оригинал:
The two-digit number mm is used to determine the order in which to run the scripts: low-numbered links have their scripts run first. For example, the K20 scripts will be executed before the K30 scripts. This is used when a certain service must be started before another. For example, the name server bind might need to be started before the news server inn so that inn can set up its access lists. In this case, the script that starts bind would have a lower number than the script that starts inn so that it runs first:
/etc/rc2.d/S17bind
/etc/rc2.d/S70inn

Есть очень удобный способ просмотра последовательности запуска:
find /etc/rcS.d/ | sort -g
/etc/rcS.d/
/etc/rcS.d/README
/etc/rcS.d/S01glibc.sh
/etc/rcS.d/S02hostname.sh
/etc/rcS.d/S02mountkernfs.sh
/etc/rcS.d/S03udev
/etc/rcS.d/S04mountdevsubfs.sh
/etc/rcS.d/S05bootlogd
/etc/rcS.d/S05keymap.sh
/etc/rcS.d/S07hdparm
/etc/rcS.d/S08hwclockfirst.sh
/etc/rcS.d/S10checkroot.sh
/etc/rcS.d/S11hwclock.sh
/etc/rcS.d/S12mtab.sh
/etc/rcS.d/S18ifupdown-clean
/etc/rcS.d/S20module-init-tools
/etc/rcS.d/S25mdadm-raid
/etc/rcS.d/S26lvm2
/etc/rcS.d/S30checkfs.sh
/etc/rcS.d/S30procps
/etc/rcS.d/S34fuse
/etc/rcS.d/S35mountall.sh
/etc/rcS.d/S35quota
/etc/rcS.d/S36mountall-bootclean.sh
/etc/rcS.d/S36udev-mtab
/etc/rcS.d/S37mountoverflowtmp
/etc/rcS.d/S39ifupdown
/etc/rcS.d/S40networking
/etc/rcS.d/S43portmap
/etc/rcS.d/S45mountnfs.sh
/etc/rcS.d/S46mountnfs-bootclean.sh
/etc/rcS.d/S47lm-sensors
/etc/rcS.d/S48console-screen.sh
/etc/rcS.d/S55bootmisc.sh
/etc/rcS.d/S55urandom
/etc/rcS.d/S70screen-cleanup
/etc/rcS.d/S70x11-common
/etc/rcS.d/S75sudo
/etc/rcS.d/S99stop-bootlogd-single

Источник: http://www.debian.org/doc/debian-policy/ch-opersys.html#s-sysvinit

четверг, 18 ноября 2010 г.

Лимитирование полосы пропускания посредством tc на Linux

http://www.cyberciti.biz/faq/linux-traffic-shaping-using-tc-to-control-http-traffic/

В чем отличия редакций 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_*) в серверной редакции поставляется вкомпилированной в ядро, а не в модулях.