mirror of
https://github.com/mohitmishra786/amILearningEnough.git
synced 2025-12-17 04:14:41 +03:00
Create linux-perf-benchmark-tools.md
This commit is contained in:
398
src/resources/linux/linux-perf-benchmark-tools.md
Normal file
398
src/resources/linux/linux-perf-benchmark-tools.md
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user