diff --git a/src/resources/linux/linux-perf-benchmark-tools.md b/src/resources/linux/linux-perf-benchmark-tools.md new file mode 100644 index 00000000..8a06ac05 --- /dev/null +++ b/src/resources/linux/linux-perf-benchmark-tools.md @@ -0,0 +1,398 @@ +# Linux Performance Benchmark Tools Guide + +## Table of Contents +1. [System Architecture Overview](#system-architecture-overview) +2. [Benchmark Tools by Layer](#benchmark-tools-by-layer) +3. [Hardware Layer Benchmarks](#hardware-layer-benchmarks) +4. [Operating System Layer Benchmarks](#operating-system-layer-benchmarks) +5. [Application Layer Benchmarks](#application-layer-benchmarks) +6. [Network Performance Tools](#network-performance-tools) +7. [Detailed Tool Reference](#detailed-tool-reference) + +## System Architecture Overview + +The Linux system architecture can be benchmarked at multiple layers using specialized tools. Here's a breakdown of the architecture and associated benchmark tools: + +### Hardware Components +- CPUs +- GPUs/TPUs +- DRAM +- HBM (High Bandwidth Memory) +- FPGAs +- I/O Controllers +- Network Controllers +- SMC (System Management Controller) +- Fans + +### Operating System Components +1. Device Drivers +2. Block Device +3. Network Device +4. Virtual Memory +5. File Systems +6. TCP/UDP +7. IP Stack +8. System Call Interface +9. Scheduler + +### Application Layer +- Applications +- System Libraries +- VFS (Virtual File System) +- Sockets + +## Benchmark Tools by Layer + +### System Benchmarks + +#### sysbench +```bash +# CPU benchmark +sysbench cpu run + +# Memory benchmark +sysbench memory run + +# File I/O benchmark +sysbench fileio --file-test-mode=seqwr run + +# MySQL benchmark +sysbench mysql-oltp-read-write run + +# Common options +--threads=4 # Number of threads to use +--time=60 # Test duration in seconds +--events=1000 # Number of events to process +``` + +#### UnixBench +```bash +# Run complete benchmark suite +./Run + +# Run specific tests +./Run dhry2reg +./Run whetstone +./Run execl +./Run file1 +./Run shell1 + +# Multi-CPU tests +./Run -c 4 # Test with 4 copies +``` + +### Application Level Benchmarks + +#### ab (Apache Benchmark) +```bash +# Basic HTTP GET benchmark +ab -n 1000 -c 10 http://localhost/ + +# POST request benchmark +ab -n 1000 -c 10 -p post.data http://localhost/form + +# Common options +-k # Use HTTP KeepAlive +-H "Header: value" # Add custom header +-C "cookie=value" # Add cookie +-T "content/type" # Set content-type +``` + +#### wrk (HTTP Benchmarking Tool) +```bash +# Basic HTTP benchmark +wrk -t12 -c400 -d30s http://localhost + +# With custom script +wrk -t2 -c100 -d30s -s script.lua http://localhost + +# Common options +-t12 # 12 threads +-c400 # 400 connections +-d30s # 30 second duration +--timeout 30s # 30 second timeout +``` + +### Hardware Benchmarks + +#### MLPerf (Machine Learning Performance) +```bash +# Run training benchmark +mlperf-train --config=resnet50 --framework=tensorflow + +# Run inference benchmark +mlperf-inference --scenario=Server --model=resnet50 + +# Common options +--backend=gpu # Use GPU backend +--precision=fp16 # Use FP16 precision +--dataset=imagenet # Specify dataset +``` + +#### perf bench +```bash +# Scheduler benchmarks +perf bench sched pipe +perf bench sched messaging + +# Memory benchmarks +perf bench mem memcpy +perf bench mem memset + +# Futex benchmarks +perf bench futex wake +perf bench futex wake-parallel +``` + +### Storage Benchmarks + +#### fio (Flexible I/O Tester) +```bash +# Sequential read test +fio --name=seq-read --rw=read --size=4G + +# Random write test +fio --name=rand-write --rw=randwrite --bs=4k --size=1G + +# Mixed workload +fio --name=mixed --rw=randrw --bs=4k --size=1G + +# Common options +--iodepth=16 # I/O queue depth +--direct=1 # Use O_DIRECT +--numjobs=4 # Number of parallel jobs +--runtime=60 # Test duration in seconds +``` + +#### dd (Disk Performance) +```bash +# Write speed test +dd if=/dev/zero of=test bs=1G count=1 oflag=direct + +# Read speed test +dd if=test of=/dev/null bs=1G count=1 iflag=direct + +# Common options +bs=1M # Block size +count=1000 # Number of blocks +conv=fdatasync # Sync data before finishing +``` + +### Network Benchmarks + +#### iperf/iperf3 +```bash +# Server mode +iperf3 -s + +# Client mode TCP test +iperf3 -c server_ip + +# UDP bandwidth test +iperf3 -c server_ip -u -b 100M + +# Common options +-P 4 # Number of parallel streams +-i 1 # Report interval +-t 30 # Test duration +-w 256K # Window size +``` + +#### ttcp (Test TCP) +```bash +# Receiver mode +ttcp -r -s + +# Transmitter mode +ttcp -t -s server_ip + +# Common options +-l 8192 # Buffer size +-n 2048 # Number of buffers +-p 5001 # Port number +``` + +### System Call Benchmarks + +#### lmbench +```bash +# Run complete benchmark suite +lmbench-run + +# Memory latency benchmark +lat_mem_rd 1024 512 + +# Context switch benchmark +lat_ctx -s 64K 2 4 8 16 + +# Common options +-P 1 # Number of processes +-W 3 # Warmup time +-N 5 # Number of runs +``` + +### System Tools + +#### jmeter (Application Performance Testing) +```bash +# Run test plan +jmeter -n -t test.jmx -l results.jtl + +# Generate HTML report +jmeter -g results.jtl -o report_directory + +# Common options +-Jthreads=10 # Number of threads +-Jduration=300 # Test duration +-Jrampup=60 # Ramp-up period +``` + +### Network Diagnostic Tools + +#### hping3 +```bash +# TCP SYN flood test +hping3 -S -p 80 --flood target_ip + +# ICMP ping test +hping3 -1 target_ip + +# Common options +--fast # Send packets fast +--rand-source # Random source address +-i u100 # Wait 100 microseconds between packets +``` + +#### pchar (Network Performance) +```bash +# Measure path characteristics +pchar network_path + +# Common options +-i interface # Specify interface +-q # Quiet mode +-v # Verbose output +``` + +### Hardware Parameter Tools + +#### hdparm (Hard Drive Parameters) +```bash +# Disk read timing +hdparm -t /dev/sda + +# Cache read timing +hdparm -T /dev/sda + +# Common options +-i # Show device information +-I # Detailed device information +--direct # Use O_DIRECT +``` + +## Best Practices for Benchmarking + +1. **Preparation** + - Clean system state + - Consistent environment + - Minimal background processes + - Representative workloads + +2. **Execution** + - Multiple iterations + - Varying parameters + - Record all conditions + - Monitor system state + +3. **Analysis** + - Statistical analysis + - Outlier detection + - Performance regression + - Bottleneck identification + +4. **Documentation** + - Hardware configuration + - Software versions + - Test parameters + - Environmental factors + +### Common Benchmarking Scenarios + +1. **Web Server Performance** +```bash +# Using ab +ab -n 10000 -c 100 http://localhost/ +# Using wrk +wrk -t4 -c100 -d30s http://localhost/ +``` + +2. **Database Performance** +```bash +# Using sysbench +sysbench oltp_read_write --table-size=1000000 prepare +sysbench oltp_read_write --table-size=1000000 run +``` + +3. **Storage Performance** +```bash +# Using fio +fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=4k --size=4g +``` + +4. **Network Performance** +```bash +# Using iperf3 +iperf3 -c server_ip -t 60 -P 4 +``` + +### Performance Metrics to Monitor + +1. **CPU Metrics** + - Utilization + - Load average + - Context switches + - Cache hits/misses + +2. **Memory Metrics** + - Usage + - Page faults + - Swap usage + - Cache efficiency + +3. **Disk Metrics** + - IOPS + - Throughput + - Latency + - Queue depth + +4. **Network Metrics** + - Bandwidth + - Latency + - Packet loss + - Connection states + +### Additional Resources + +1. **Documentation** + - Man pages for tools + - Vendor documentation + - Performance tuning guides + - Benchmark specifications + +2. **Monitoring Tools** + - Grafana + - Prometheus + - Telegraf + - Ganglia + +3. **Analysis Tools** + - R Statistical Software + - Python with NumPy/Pandas + - Jupyter Notebooks + - Excel/LibreOffice Calc + +4. **Community Resources** + - Linux Performance website + - Performance mailing lists + - Tool-specific forums + - Academic papers