Front cover
Contents
Notices
Trademarks
Preface
How this paper is structured
The team that wrote this paper
Become a published author
Comments welcome
Chapter 1. Understanding the Linux operating system
1.1 Linux process management
1.1.1 What is a process?
1.1.2 Life cycle of a process
1.1.3 Thread
1.1.4 Process priority and nice level
1.1.5 Context switching
1.1.6 Interrupt handling
1.1.7 Process state
1.1.8 Process memory segments
1.1.9 Linux CPU scheduler
1.2 Linux memory architecture
1.2.1 Physical and virtual memory
1.2.2 Virtual memory manager
1.3 Linux file systems
1.3.1 Virtual file system
1.3.2 Journaling
1.3.3 Ext2
1.3.4 Ext3
1.3.5 ReiserFS
1.3.6 Journal File System
1.3.7 XFS
1.4 Disk I/O subsystem
1.4.1 I/O subsystem architecture
1.4.2 Cache
1.4.3 Block layer
1.4.4 I/O device driver
1.4.5 RAID and storage system
1.5 Network subsystem
1.5.1 Networking implementation
1.5.2 TCP/IP
1.5.3 Offload
1.5.4 Bonding module
1.6 Understanding Linux performance metrics
1.6.1 Processor metrics
1.6.2 Memory metrics
1.6.3 Network interface metrics
1.6.4 Block device metrics
Chapter 2. Monitoring and benchmark tools
2.1 Introduction
2.2 Overview of tool functions
2.3 Monitoring tools
2.3.1 top
2.3.2 vmstat
2.3.3 uptime
2.3.4 ps and pstree
2.3.5 free
2.3.6 iostat
2.3.7 sar
2.3.8 mpstat
2.3.9 numastat
2.3.10 pmap
2.3.11 netstat
2.3.12 iptraf
2.3.13 tcpdump / ethereal
2.3.14 nmon
2.3.15 strace
2.3.16 Proc file system
2.3.17 KDE System Guard
2.3.18 Gnome System Monitor
2.3.19 Capacity Manager
2.4 Benchmark tools
2.4.1 LMbench
2.4.2 IOzone
2.4.3 netperf
2.4.4 Other useful tools
Chapter 3. Analyzing performance bottlenecks
3.1 Identifying bottlenecks
3.1.1 Gathering information
3.1.2 Analyzing the server’s performance
3.2 CPU bottlenecks
3.2.1 Finding CPU bottlenecks
3.2.2 SMP
3.2.3 Performance tuning options
3.3 Memory bottlenecks
3.3.1 Finding memory bottlenecks
3.3.2 Performance tuning options
3.4 Disk bottlenecks
3.4.1 Finding disk bottlenecks
3.4.2 Performance tuning options
3.5 Network bottlenecks
3.5.1 Finding network bottlenecks
3.5.2 Performance tuning options
Chapter 4. Tuning the operating system
4.1 Tuning principles
4.1.1 Change management
4.2 Installation considerations
4.2.1 Installation
4.2.2 Check the current configuration
4.2.3 Minimize resource use
4.2.4 SELinux
4.2.5 Compiling the kernel
4.3 Changing kernel parameters
4.3.1 Where the parameters are stored
4.3.2 Using the sysctl command
4.4 Tuning the processor subsystem
4.4.1 Tuning process priority
4.4.2 CPU affinity for interrupt handling
4.4.3 Considerations for NUMA systems
4.5 Tuning the vm subsystem
4.5.1 Setting kernel swap and pdflush behavior
4.5.2 Swap partition
4.5.3 HugeTLBfs
4.6 Tuning the disk subsystem
4.6.1 Hardware considerations before installing Linux
4.6.2 I/O elevator tuning and selection
4.6.3 File system selection and tuning
4.7 Tuning the network subsystem
4.7.1 Considerations of traffic characteristics
4.7.2 Speed and duplexing
4.7.3 MTU size
4.7.4 Increasing network buffers
4.7.5 Additional TCP/IP tuning
4.7.6 Performance impact of Netfilter
4.7.7 Offload configuration
4.7.8 Increasing the packet queues
4.7.9 Increasing the transmit queue length
4.7.10 Decreasing interrupts
Appendix A. Testing configurations
Hardware and software configurations
Linux installed on guest IBM z/VM systems
Linux installed on IBM System x servers
Abbreviations and acronyms
Related publications
IBM Redbooks
Other publications
Online resources
How to get IBM Redbooks
Help from IBM
Index
Back cover