When making CMS purchasing decisions, the platform of choice can significantly impact the total solution cost. This comes in the form of both sw licensing costs for multiple servers and total cost of ownership. Of note here is the very significant performance gains realized with the recent Linux 2.6 kernel. IBM staff engineers tested identical [Apache and J2EE] web servers in a controlled environment, simulating prolonged system load and multiple user interaction models. These were not CMS tests specifically, but were complex, multi-threaded, and data-driven applications, not unlike a CMS. The short: comparing identical SMP systems, one with the 2.6 kernel and one with the 2.4 kernel, the 2.6 system served 6 times the number of web pages. This is a significant fact when considering platforms and production architectures for larger CMS solutions. Anything Java, ColdFusion, or PHP will run on Linux. Linux webserver performance comparison From the article, the recent improvements to the Linux kernel include: New hardware support Linux supports a wide range of hardware platforms. The 2.6 kernel supports new architectures, such as the 64-bit PowerPC, the 64-bit AMD Opteron, and embedded processors. Hyper-threading Hyper-threading, an innovation from Intel, is a major hardware enhancement supported by the 2.6 kernel. Basically, hyper-threading can create multiple virtual processors based on a single physical processor using simultaneous multi-threading technology (SMT); multiple application threads can be run simultaneously on one processor. To take full advantage of it, applications need to be multithreaded. Hyper-threading offers many benefits to Web servers and application servers. It can increase the number of transactions that can be processed, provide faster server response time, and enable servers to handle larger workloads and more user requests. Currently, Intel Pentium 4 Xeon processors have hyper-threading hardware built-in. NUMA (Non-Uniform Memory Access) NUMA is another major feature that has been added in the Linux 2.6 kernel to improve system performance. In the traditional model for multiprocessor support (symmetric multiprocessing, or SMP), each processor has equal access to memory and I/O. The high contention rate of the processor bus becomes a performance bottleneck. The NUMA architecture can increase processor speed without increasing the load on the processor bus. In NUMA systems, each processor is close to some parts of memory and further from others. Processors are arranged in smaller regions called nodes. Each node has its own processors and memory; the nodes can talk to each other. It is quicker for processors to gain access to memory in a local node than in different nodes. Minimizing the inter-node communications can improve the system performance. To support NUMA hardware, the Linux kernel adapts a series of enhancements in several areas, including the scheduler, multi-path I/O, a user-level API to let a user understand the allocation of processor and memory resources to be used, and internal kernel APIs to let the kernel subsystems understand NUMA topology. NEC Azusa, IBM x440, and IBM NUMA-Q are examples of NUMA machines. Expanded device support In the 2.6 kernel, more types of devices have been supported. The 2.6 kernel has also expanded the limitation of the major number from 255 to 4095 and has allowed more than one million subdevices per type. This should give high-end enterprise systems sufficient support. Threading improvements The 2.6 kernel adapts the new thread library, Native POSIX Thread Library (NPTL). This new library is based on a 1:1 model and full POSIX compliance. A test done by Red Hat indicates that on an old IA-32 dual 450MHz PII Xeon system, 100,000 threads could be created and destroyed in 2.3 seconds (with up to 50 threads running at any one time) using NPTL. NPTL gives the kernel a major performance boost for multi-threading applications in an SMP environment. It is especially valuable for heavily multi-threaded enterprise level application, such as Java® applications, as well as Web server and application server applications. Another threading improvement in the 2.6 kernel is that the number of PIDs that can be allocated has increased from 32,000 to 1 billion. The threading change improves the application-starting performance on heavily loaded systems. The 2.4 kernel sometimes suffers with higher numbers of PIDs requested by applications due to the low PID limit it allows. O(1) scheduler The O(1) scheduler was accepted into the official Linux 2.5 kernel tree in 2002. The O(1) scheduler increases Linux scalability and overall performance by improving throughput with large numbers of processes, especially on large SMP. O(1) scales well with a large number of tasks and CPUs and has strong affinity, to avoid tasks bouncing between the CPUs. The O(1) scheduler also allows for load-balancing across CPUs and NUMA-aware load-balancing. I/O improvements Block I/O Layer The Block I/O Layer in the 2.6 kernel has been rewritten to improve kernel scalability and performance. The global I/O request lock in 2.4 has been removed. The block I/O buffer (kiobuf) in the 2.6 kernel allows I/O requests larger than PAGE_SIZE. Most of the problems that are seen are caused by the use of the buffer head and kiobuf and are addressed in the new layer. The I/O scheduler was completely rewritten. There are also major improvements that have been made on SCSI support. Asynchronous I/O Asynchronous I/O is new in the 2.6 kernel. It provides ways for enterprise applications such as Web servers and databases to scale up without resorting to complex internal pooling mechanisms for network connections. Other improvements In addition to these enhancements, there are some other remarkable changes and new features worth mentioning. For example, the 2.6 kernel provides support for several new file systems, including JFS, XFS, NFS v4, and the Andrew File System (AFS). New networking protocols and features such as Stream Control Transmission Protocol (SCTP), Internet Protocol Security (IPSec), improved IPv6 support, and IP Payload Compression (IPComp) provide Linux 2.6 kernel users better network security and transmission quality. Read the article.