具体来说,我想知道服务器版本中是否有针对磁盘缓存大小的补丁或配置调整。我运行的是小型系统 (256M RAM),想尝试将磁盘缓存大小保持在较小水平,以便为应用程序提供更多内存。
我发现这一页在 Ubuntu 的网站上,它既没有回答我的问题,也没有关于 9.04 版本的信息。
答案1
我猜主要的区别在于服务器内核不像桌面内核那样具有抢占性。这有点复杂:
简单来说,抢占意味着将进程 A 从 CPU 踢出,转而让进程 B 使用。最终用户希望系统具有响应能力。因此,桌面将运行抢占式内核,这样可以优先考虑用户交互而不是运行程序。这意味着内核可以“踢出”后台程序,通过授予用户程序 CPU 运行时间,让用户程序优先使用 CPU,甚至在后台程序的时间片结束之前以及在后台程序放弃 CPU 之前。
另一方面,服务器被设计为在后台运行几个程序(如 Apache),而不与用户交互。因此,服务器将运行非抢占式内核,并针对在后台运行程序进行优化。
您可以阅读一些有关 Ubuntu 内核配置的内容这里。这篇文章是几年前的,但我敢肯定抢占位仍然是 Ubuntu 桌面和服务器内核之间最大的区别之一。另一个区别是 I/O 调度程序的选择:服务器使用截止期限调度程序,桌面使用 CFQ。诚然,我从链接的文章中获取了这一点。
至于磁盘缓存,Linux 会缓存。就这样。Linux 会很乐意使用全部您的 RAM 作为磁盘缓存。无论您有 512MB 还是 1GB RAM,都没关系:Linux 会在认为合适时使用它。据我所知,没有对此进行调整。
还要知道,这样做没有坏处:由于您的程序需要更多 RAM,因此用于缓存的 RAM 会更少。您的 VM 只有 256MB,其中一部分用作缓存,这不会影响程序的性能:如果程序请求 RAM,它们会立即获得,但代价是缓存更少。这是一件好事TM。再说一遍:用作缓存的内存仍可用于您的应用程序。如果内核认为合适,它将被立即回收并提供给内存需求大的应用程序。运行不同的内核不会改变这一点。
答案2
看起来大部分差异都与时钟、pae 和 xen 有关。
--- config-2.6.28-15-generic 2009-09-09 05:56:49.000000000 -0700
+++ config-2.6.28-15-server 2009-09-09 06:13:24.000000000 -0700
@@ -3659,7 +3659,7 @@
CONFIG_UWB_WHCI=m
CONFIG_UWB_WLP=m
CONFIG_V4L_USB_DRIVERS=y
-CONFIG_VERSION_SIGNATURE="Ubuntu 2.6.28-15.52-generic"
+CONFIG_VERSION_SIGNATURE="Ubuntu 2.6.28-15.52-server"
CONFIG_VETH=m
CONFIG_VFAT_FS=m
# CONFIG_VGACON_SOFT_SCROLLBACK is not set
@@ -3932,34 +3932,41 @@
# CONFIG_ZONE_DMA32 is not set
CONFIG_ZONE_DMA_FLAG=1
#
-# Config options for config.generic automatically generated by splitconfig.pl
+# Config options for config.server automatically generated by splitconfig.pl
#
-# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
-CONFIG_DCA=m
-CONFIG_DEFAULT_CFQ=y
-# CONFIG_DEFAULT_DEADLINE is not set
-CONFIG_DEFAULT_IOSCHED="cfq"
-CONFIG_DMADEVICES=y
-# CONFIG_DMATEST is not set
-CONFIG_DMA_ENGINE=y
-CONFIG_HIGHMEM4G=y
-# CONFIG_HIGHMEM64G is not set
-CONFIG_HZ=250
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-CONFIG_IGB_DCA=y
-CONFIG_INTEL_IOATDMA=m
-CONFIG_IXGBE_DCA=y
-# CONFIG_LGUEST is not set
-# CONFIG_LGUEST_GUEST is not set
-CONFIG_M586=y
-# CONFIG_M686 is not set
-CONFIG_MYRI10GE_DCA=y
-CONFIG_NET_DMA=y
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-# CONFIG_PREEMPT_NONE is not set
-CONFIG_PREEMPT_VOLUNTARY=y
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_X86_ALIGNMENT_16=y
-CONFIG_X86_E_POWERSAVER=m
-CONFIG_X86_F00F_BUG=y
+CONFIG_ARCH_PHYS_ADDR_T_64BIT=y
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_DEADLINE=y
+CONFIG_DEFAULT_IOSCHED="deadline"
+# CONFIG_HIGHMEM4G is not set
+CONFIG_HIGHMEM64G=y
+CONFIG_HVC_IRQ=y
+CONFIG_HVC_XEN=y
+CONFIG_HZ=100
+CONFIG_HZ_100=y
+# CONFIG_HZ_250 is not set
+CONFIG_I2O_EXT_ADAPTEC_DMA64=y
+# CONFIG_M586 is not set
+CONFIG_M686=y
+CONFIG_PHYS_ADDR_T_64BIT=y
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_RESOURCES_64BIT=y
+CONFIG_X86_CMOV=y
+CONFIG_X86_CMPXCHG64=y
+CONFIG_X86_DEBUGCTLMSR=y
+# CONFIG_X86_DS is not set
+# CONFIG_X86_E_POWERSAVER is not set
+CONFIG_X86_PAE=y
+CONFIG_X86_TSC=y
+CONFIG_X86_USE_PPRO_CHECKSUM=y
+CONFIG_XEN=y
+CONFIG_XEN_BALLOON=y
+CONFIG_XEN_BLKDEV_FRONTEND=m
+# CONFIG_XEN_DEBUG_FS is not set
+CONFIG_XEN_FBDEV_FRONTEND=m
+CONFIG_XEN_KBDDEV_FRONTEND=m
+CONFIG_XEN_MAX_DOMAIN_MEMORY=8
+CONFIG_XEN_NETDEV_FRONTEND=m
+CONFIG_XEN_SAVE_RESTORE=y
+CONFIG_XEN_SCRUB_PAGES=y
答案3
当我尝试在笔记本电脑上使用超过 2GB 的内存时,我发现了一件重要的事情,当时我的笔记本电脑运行的是 32 位 Ubuntu 和桌面内核。将桌面内核替换为服务器内核,启用 PAE,这样它就可以处理更多内存。最后,我还是把 64 位 Ubuntu 放在了上面。
答案4
由于 Ubuntu 12.04 Precise 中发生了变化,因此进行了更新:
自 12.04 以来,由于 linux-image-server 合并到 linux-image-generic,Ubuntu 桌面和 Ubuntu 服务器之间的内核没有区别。
来源:https://help.ubuntu.com/community/ServerFaq
关于此问题的讨论可以参见:https://lists.ubuntu.com/archives/kernel-team/2011-October/017471.html