00 PCIe nedir? — PCI'dan PCIe'ye evrim
PCI Express (PCIe), paralel PCI veri yolunun yerini alan seri, nokta-nokta, yüksek hızlı bir ara bağlantı standardıdır. 2003'ten bu yana PC ve gömülü sistemlerin temel I/O omurgasıdır.
Klasik PCI'nın sınırları
Paralel veri yolu: PCI, 32 veya 64 bit paralel veri hattı kullanırdı. Sinyal hızı arttıkça çizgiler arası gecikmeler (skew) kritik hale geldi ve maksimum frekansı 66 MHz ile sınırladı. Tüm cihazlar aynı paylaşımlı veri yolunu kullandığından tek seferde yalnızca bir transfer gerçekleşebilirdi. Kablo uzunluğu: elektriksel gereksinimler, paralel hattın fiziksel uzunluğunu kısıtladı. Bant genişliği: 64-bit/66 MHz PCI, 533 MB/s'e ulaşabiliyordu — bu, AGP ve modern ekran kartları için yetersizdi.
PCIe tasarım ilkeleri
PCIe, paralel veri yolunun yerini alırken eski PCI yazılım modelini korudu. Sürücüler değişmeden çalışmaya devam etti; yalnızca fiziksel ve link katmanları yenilendi.
┌─────────────────────────────────────────────────────────┐
│ PCIe Tasarım Kararları │
├─────────────────┬───────────────────────────────────────┤
│ Seri diferansiyel│ Her lane: TX+ TX- / RX+ RX- │
│ çift │ Diferansiyel sinyal → gürültü bağışıklığı│
├─────────────────┼───────────────────────────────────────┤
│ Nokta-nokta │ Paylaşımlı veri yolu yok → her cihaz│
│ bağlantı │ tam bant genişliğini kendisi kullanır│
├─────────────────┼───────────────────────────────────────┤
│ Çift yönlü │ TX ve RX ayrı → aynı anda gönder-al │
│ (full-duplex) │ (half-duplex PCI'ın iki katı) │
├─────────────────┼───────────────────────────────────────┤
│ Ölçeklenebilir │ x1, x2, x4, x8, x16 lane — bant │
│ lane sayısı │ genişliği ihtiyaca göre ayarlanır │
└─────────────────┴───────────────────────────────────────┘
PCI → PCIe geçişinin avantajları
| Özellik | PCI (64-bit/66 MHz) | PCIe Gen3 x16 | Kazanım |
|---|---|---|---|
| Bant genişliği | 533 MB/s | ~16 GB/s | ~30× |
| Topoloji | Paylaşımlı veri yolu | Nokta-nokta | Çakışma yok |
| Yön | Half-duplex | Full-duplex | 2× efektif BW |
| Kablo uzunluğu | ~20 cm (board) | Metrelerce (kablo) | Daha esnek |
| Sinyal hattı | 32/64 paralel | 2 (diferansiyel çift) | EMI azaldı |
| Hot-plug | Sınırlı | Tam destek | Üretim ortamı |
Bu bölümde
- PCI: paylaşımlı paralel veri yolu; 66 MHz'de skew sorunu, 533 MB/s tavan
- PCIe: seri diferansiyel çift, nokta-nokta, full-duplex — yazılım uyumluluğu korundu
- x1'den x16'ya lane sayısı, bant genişliğini doğrusal artırır
- PCIe Gen3 x16: ~16 GB/s — modern GPU ve NVMe SSD için temel
01 Fiziksel katman — lane, serdes, encoding
PCIe fiziksel katmanı, diferansiyel sinyal çiftlerini, serdes bloklarını ve bit akışı kodlamasını kapsar. Her nesil daha yüksek sembol hızı ve daha verimli kodlama kullanır.
Lane ve serdes yapısı
Her PCIe Lane:
┌────────────┐ ┌──────────┐ ┌────────────┐
│ TX Logic │───▶│ Serdes │───▶│ TX+ / TX- │──▶ (kablo/board trace)
└────────────┘ │ (PLL + │ └────────────┘
│Serializer)│
┌────────────┐ │ │ ┌────────────┐
│ RX Logic │◀───│ Deserializer │◀│ RX+ / RX- │◀── (karşı taraftan)
└────────────┘ └──────────┘ └────────────┘
x4 link = 4 ayrı lane (her biri bağımsız TX+RX çifti)
Serdes (Serializer/Deserializer): paralel veri bitlerini seri bit akışına çevirir (TX) ve seri akışı paralel veriye dönüştürür (RX). PLL (Phase-Locked Loop), saat sinyalini veri akışından kurtarır (CDR — Clock/Data Recovery).
Encoding: 8b/10b vs 128b/130b
Kodlama, DC dengeyi ve bit senkronizasyonunu sağlar. Gen1 ve Gen2, 8b/10b kullandı: her 8 bit veri için 10 bit gönderilir — %20 overhead. Gen3'ten itibaren 128b/130b: her 128 bit veri için 130 bit — yalnızca %1,5 overhead.
| Nesil | Sembol Hızı | Encoding | x1 BW (tek yön) | x16 BW (çift yön) |
|---|---|---|---|---|
| Gen1 | 2,5 GT/s | 8b/10b | 250 MB/s | 8 GB/s |
| Gen2 | 5,0 GT/s | 8b/10b | 500 MB/s | 16 GB/s |
| Gen3 | 8,0 GT/s | 128b/130b | ~985 MB/s | ~32 GB/s |
| Gen4 | 16,0 GT/s | 128b/130b | ~2 GB/s | ~64 GB/s |
| Gen5 | 32,0 GT/s | 128b/130b | ~4 GB/s | ~128 GB/s |
| Gen6 | 64,0 GT/s | FLIT/CRC | ~8 GB/s | ~256 GB/s |
Diferansiyel sinyal ve sinyal bütünlüğü
Diferansiyel çift: TX+ ve TX- zıt fazda sinyal taşır. Alıcı, iki sinyal arasındaki farkı (diferansiyel voltaj) ölçer. Ortak mod gürültüsü her iki hatta eşit etkilediğinden fark sabit kalır — üstün EMI bağışıklığı. Gömülü tasarımda PCB trace eşleştirmesi kritiktir: uzunluk, empedans (85Ω diferansiyel) ve via sayısı dikkatle yönetilmeli.
Bu bölümde
- Her lane: TX+/TX- ve RX+/RX- diferansiyel çift; serdes ile seri/paralel dönüşüm
- 8b/10b (Gen1/2): %20 overhead, DC denge; 128b/130b (Gen3+): yalnızca %1.5 overhead
- Gen1: 2.5 GT/s, Gen3: 8 GT/s, Gen5: 32 GT/s — her nesil ~2× sembol hızı
- Diferansiyel sinyal: ortak mod gürültüsü iptal — yüksek hız EMI toleransı
02 Link katmanı — DLLP, ACK/NAK, flow control
Data Link Layer (DLL), fiziksel katmanın üzerinde güvenilir TLP iletimi sağlar. ACK/NAK protokolü, sequence numarası ve yeniden gönderim (retry buffer) mekanizmaları burada çalışır.
DLLP (Data Link Layer Packet)
DLLP'ler, link katmanının kendi yönetim paketleridir — TLP'lerden bağımsız olarak gönderilir. Başlıca DLLP türleri:
ACK/NAK mekanizması ve retry buffer
Gönderici Alıcı
────────── ──────
TLP(seq=5) ──────────────────────────▶ CRC kontrol
Retry buffer'da tut ├─ OK → Ack(5) gönder
└─ Hata → Nak(5) gönder
Ack(5) ◀───────────
seq=5'i buffer'dan sil
Nak(5) gelirse:
seq=5'i retry buffer'dan tekrar gönder
Flow Control Credits
PCIe, receiver buffer taşmasını önlemek için kredi tabanlı flow control kullanır. Alıcı, her sanal kanal için üç credit türünü bildirir:
| Credit Türü | Açıklama | Birim |
|---|---|---|
| Posted Header (PH) | Posted yazma TLP header'ı | Header başına 1 |
| Posted Data (PD) | Posted yazma TLP verisi | 4-bayt birim |
| Non-Posted Header (NPH) | Read request, config RW | Header başına 1 |
| Completion Header (CPLH) | Read completion header | Header başına 1 |
| Completion Data (CPLD) | Read completion verisi | 4-bayt birim |
Gönderici, kredisi bitmeden yeni TLP gönderemez. Alıcı buffer'ından veri okundukça UpdateFC DLLP ile kredi iade edilir.
Bu bölümde
- DLLP: link katmanı yönetim paketi — Ack, Nak, FC update, PM geçiş
- Her TLP'ye sequence numarası atanır; gönderici retry buffer'da tutar, Ack gelince siler
- Nak gelirse retry buffer'dan tekrar gönderim yapılır — donanım düzeyinde güvenilirlik
- Flow control: kredi tükenmeden TLP gönderilemez; buffer taşması imkânsız
03 Transaction katmanı — TLP türleri
Transaction Layer Packet (TLP), PCIe'nin en üst katman paketidir. Bellek okuma/yazma, konfigürasyon erişimi ve mesajlar bu katmanda paketlenir.
TLP genel yapısı
┌──────────────────────────────────────────────────────┐
│ TLP Header (3 veya 4 DWord = 12 veya 16 bayt) │
│ ┌──────────┬──────────┬────────────┬──────────────┐ │
│ │ Fmt/Type│ Length │ Requester │ Tag │ │
│ │ (format+ │ (10-bit) │ ID (BDF) │ (8-bit) │ │
│ │ tip) │ │ │ │ │
│ └──────────┴──────────┴────────────┴──────────────┘ │
│ + Address (32 veya 64 bit) │
├──────────────────────────────────────────────────────┤
│ Data Payload (0–4096 bayt, 4-bayt hizalı) │
├──────────────────────────────────────────────────────┤
│ ECRC (opsiyonel, 4 bayt) │
└──────────────────────────────────────────────────────┘
TLP türleri
| TLP Türü | Fmt | Açıklama | Yanıt |
|---|---|---|---|
| Memory Read (MRd) | No-data | Bellek adresinden okuma isteği | Completion with Data |
| Memory Write (MWr) | With-data | Bellek adresine yazma (posted) | Yok (posted) |
| Config Read (CfgRd0/1) | No-data | Config space'den okuma | Completion with Data |
| Config Write (CfgWr0/1) | With-data | Config space'e yazma | Completion (no data) |
| IO Read (IORd) | No-data | I/O adres uzayından okuma | Completion with Data |
| IO Write (IOWr) | With-data | I/O adres uzayına yazma | Completion |
| Completion (Cpl/CplD) | ±data | Non-posted isteğin yanıtı | — |
| Message (Msg) | ±data | INTx, PME, kural dışı durum bildirim | Opsiyonel |
Posted vs Non-Posted işlemler
Posted: gönderici yanıt beklemez; Memory Write ve Mesajlar posted'dır. Gecikme gizlenir — performans avantajı. Non-Posted: gönderici Completion TLP bekler; Memory/Config/IO Read, Config Write non-posted'dır. Completion Timeout süre aşımı hata olarak raporlanır.
Tag mekanizması
Her non-posted isteğe 8-bit Tag atanır (Gen5+'te 10-bit). Requestor, aynı anda en fazla 256 bekleyen isteği takip edebilir. Completion TLP, aynı Tag'i taşır — böylece hangi isteğin yanıtı olduğu anlaşılır.
Bu bölümde
- TLP: Header (12/16 bayt) + Payload (0–4096 bayt) + opsiyonel ECRC
- MWr: posted (yanıt yok, düşük gecikme); MRd: non-posted (Completion bekler)
- Config TLP'ler: BIOS/OS başlangıcında BAR ve diğer kayıtları yapılandırmak için
- Tag: gönderici, bekleyen non-posted isteklerini Tag ile eşleştirir
04 Topoloji — RC, Switch, Endpoint, BDF
PCIe sistemi, Root Complex üzerinden dallanan bir ağaç topolojisinde çalışır. Her cihaz, Bus:Device:Function (BDF) adresiyle benzersiz tanımlanır.
PCIe Bileşenleri
CPU
│
┌┴─────────────────────────────────────────────────┐
│ Root Complex (RC) │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ Root Port 0 │ │ Root Port 1 │ ... │
└──┼─────────────┼──┼─────────────┼───────────────┘
│ │ │ │
│ │ ▼ ▼
▼ ┌───┴──────┐ [Endpoint: GPU]
[Endpoint: │ Switch │ Bus 1, Dev 0, Fn 0
NVMe SSD] │ Upstream │
Bus 1 │ Port │
Dev 0 └┬──────┬──┘
Fn 0 │ │
┌─┴──┐ ┌┴───┐
│DP0 │ │DP1 │ (Downstream Ports)
└─┬──┘ └─┬──┘
│ │
[NIC, Bus 2] [FPGA, Bus 3]
BDF Adres Uzayı
Bus: 8-bit, 0–255 (toplam 256 bus). Device: 5-bit, 0–31 (bus başına 32 cihaz). Function: 3-bit, 0–7 (cihaz başına 8 işlev — multi-function device). Tam adres 16-bit: [Bus 8] [Device 5] [Function 3]. PCIe config space 4 KB'dır; her BDF için ayrı config space.
| Bileşen | Türü | Açıklama |
|---|---|---|
| Root Complex (RC) | CPU tarafı köprü | CPU'yu PCIe ağacına bağlar; genellikle SoC/Chipset içinde |
| Root Port | RC'nin çıkış portları | Her root port bağımsız PCIe link; trafik burst'lerini yönetir |
| Switch (Upstream Port) | Yönlendirici | Bir upstream + N downstream port; fan-out sağlar |
| Endpoint (EP) | Hedef cihaz | NIC, GPU, NVMe, FPGA vb.; Type 0 config header kullanır |
| Bridge | PCI-PCIe köprüsü | Eski PCI kartları PCIe ortamına bağlar; Type 1 header |
Bu bölümde
- Root Complex: CPU-PCIe köprüsü; her root port bağımsız link ve bandwidth
- Switch: fan-out sağlar; upstream–downstream port yönlendirme
- BDF: 16-bit adres; lspci çıktısında "XX:YY.Z" formatında görünür
- Endpoint: Type 0 config header; BAR, interrupt, DMA mask buradan yapılandırılır
05 Config space — BAR, Capability list, AER
Her PCIe cihazı 4 KB config space barındırır. OS bu alanı okuyarak kaynakları keşfeder ve yapılandırır. BAR'lar MMIO/IO bölgelerini, Capability listesi ise gelişmiş özellikleri tanımlar.
Type 0 Config Header (Endpoint)
Offset Boyut Alan
0x00 2 Vendor ID
0x02 2 Device ID
0x04 2 Command register
0x06 2 Status register
0x08 1 Revision ID
0x09 3 Class Code (Base, Sub, Interface)
0x0C 1 Cache Line Size
0x0D 1 Latency Timer
0x0E 1 Header Type (0x00 = Type 0, 0x01 = Type 1)
0x0F 1 BIST
0x10 4 BAR0 (Base Address Register 0)
0x14 4 BAR1
0x18 4 BAR2
0x1C 4 BAR3
0x20 4 BAR4
0x24 4 BAR5
0x28 4 CardBus CIS Pointer
0x2C 2 Subsystem Vendor ID
0x2E 2 Subsystem ID
0x30 4 Expansion ROM Base Address
0x34 1 Capabilities Pointer ← extended cap listesinin başlangıcı
0x3C 1 Interrupt Line
0x3D 1 Interrupt Pin (0x01=INTA ... 0x04=INTD)
0x3E 1 Min Grant
0x3F 1 Max Latency
BAR — Base Address Register
BAR, cihazın MMIO veya IO alanını tanımlar. OS, BAR'a önce tüm bitleri 1 yazar, sonra okur — boyutu bu şekilde öğrenir. Ardından geçerli bir fiziksel adres atar.
# Belirli bir cihazın BAR0 değerini oku (örnek: 01:00.0)
setpci -s 01:00.0 BASE_ADDRESS_0
# lspci ile BAR detaylarını gör
lspci -v -s 01:00.0
# Region 0: Memory at f7000000 (64-bit, prefetchable) [size=16M]
# Region 2: I/O ports at e000 [size=256]
# BAR türleri: bit[0]=0 → MMIO, bit[0]=1 → IO
# MMIO bit[2:1]: 00=32-bit, 10=64-bit
# MMIO bit[3]: 1=prefetchable
Capability List
Bu bölümde
- Type 0 header: 64 bayt — Vendor/Device ID, Command/Status, 6 BAR, Cap pointer
- BAR boyutu keşfi: önce 0xFFFFFFFF yaz, geri oku, maskeyle boyutu hesapla
- Capability list: offset 0x34'ten başlayan bağlı liste; her cap ID + next pointer
- AER: donanım hataları kernel log'a yazar; dmesg'de "PCIe Bus Error" olarak görünür
06 Link training — LTSSM state machine
PCIe link, her iki taraftaki LTSSM (Link Training and Status State Machine) tarafından müzakere edilir. Hız, lane sayısı ve equalization bu süreçte belirlenir.
LTSSM durumları
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────┐
│ Detect │───▶│ Polling │───▶│ Config │───▶│ L0 │
│(receiver │ │(bit lock │ │(lane/ │ │(aktif│
│ detection)│ │ symbol │ │ speed │ │ veri │
└──────────┘ │ lock) │ │ müzakere)│ │ ilet.)│
└──────────┘ └──────────┘ └──┬───┘
│
┌──────────────────────────────┤
│ │
┌────▼────┐ ┌─────▼────┐
│ L0s │ │ L1 │
│(Standby │ │(düşük │
│ kısa) │ │ güç) │
└────┬────┘ └─────┬────┘
│ │
┌────▼────────────────────────────▼─┐
│ Recovery │
│ (hız yükselt, equ. yenile, L0'a │
│ dön veya L1'e geç) │
└────────────────────────────────────┘
Temel LTSSM durumları
| Durum | Açıklama |
|---|---|
| Detect | Karşı tarafta alıcı var mı? Empedans ölçümü |
| Polling | Bit senkronizasyonu, ordered set hizalama, symbol lock |
| Configuration | Lane sayısı, link numarası, lane numarası müzakeresi |
| L0 | Normal aktif durumu; TLP ve DLLP iletimi burada yapılır |
| Recovery | Hız değişikliği veya equalization için geçici; L0'a döner |
| L0s | Kısa bekleme modu; L0'a hızlı dönüş (ASPM L0s) |
| L1 | Derin bekleme; PLL kapatılabilir; daha uzun dönüş süresi |
| L2/L3 | Güç kaldırma; link sıfırlanır; büyük gecikmeyle dönüş |
Link equalization (Gen3+)
Gen3 ve sonrasında, yüksek frekanslı sinyallerin board trace üzerindeki kaybını telafi etmek için equalization zorunlu hale geldi. TX tarafı pre/post-emphasis, RX tarafı CTLE (Continuous Time Linear Equalizer) ve DFE (Decision Feedback Equalizer) kullanır. Recovery durumunda, EQ fazlarından geçilerek optimal ayar bulunur.
Bu bölümde
- LTSSM: her iki taraf bağımsız state machine; Detect→Polling→Config→L0 başlatma akışı
- L0: aktif veri iletimi; L0s/L1: ASPM güç tasarrufu; L2/L3: güç kaldırma
- Recovery: hız yükseltme veya link hatasından kurtulma; L0'a dönüş sağlar
- Equalization (Gen3+): TX emphasis + RX CTLE/DFE; board tasarımında kritik
07 Linux'ta PCIe görünümü — lspci, /sys/bus/pci
Linux, PCIe cihazlarını sysfs üzerinden kullanıcı alanına sunar. lspci ve setpci araçları, config space okumayı ve PCIe ağacını görselleştirmeyi kolaylaştırır.
lspci temel kullanım
# Tüm PCIe cihazları listele
lspci
# 00:00.0 Host bridge: Intel Corporation ...
# 01:00.0 Non-Volatile memory controller: Samsung ...
# 02:00.0 Ethernet controller: Realtek ...
# Ağaç görünümü (topoloji)
lspci -tv
# Belirli cihaz detayları (verbose)
lspci -vvv -s 01:00.0
# Tüm cihazların ayrıntılı çıktısı
lspci -vvv 2>/dev/null | less
# Belirli class koduna göre filtrele (0x010802 = NVMe)
lspci -d ::0108
# Kernel sürücü bilgisi
lspci -k -s 01:00.0
# 01:00.0 Non-Volatile memory controller: ...
# Kernel driver in use: nvme
# Kernel modules: nvme
/sys/bus/pci dizin yapısı
# PCIe cihaz dizini
ls /sys/bus/pci/devices/
# 0000:00:00.0 0000:01:00.0 0000:02:00.0 ...
# Cihaz bilgilerini oku
cat /sys/bus/pci/devices/0000:01:00.0/vendor
# 0x144d (Samsung)
cat /sys/bus/pci/devices/0000:01:00.0/device
# 0xa808
cat /sys/bus/pci/devices/0000:01:00.0/class
# 0x010802 (NVMe)
# Config space'i ham okuma (ilk 64 bayt)
xxd /sys/bus/pci/devices/0000:01:00.0/config | head -4
# Bağlı sürücü
readlink /sys/bus/pci/devices/0000:01:00.0/driver
# ../../../../bus/pci/drivers/nvme
# Bağlı cihazları sürücüden bul
ls /sys/bus/pci/drivers/nvme/
AER (Advanced Error Reporting) mesajları
# dmesg'de PCIe hatalarını izle
dmesg | grep -i "pcie\|aer\|correctable\|uncorrectable"
# Örnek AER mesajları:
# pcieport 0000:00:1d.0: AER: Corrected error received: 0000:01:00.0
# nvme 0000:01:00.0: AER: aer_status: 0x00002001, aer_mask: 0x00000000
# nvme 0000:01:00.0: [ 0] RxErr
# Sürekli izleme (rasdaemon ile)
sudo rasdaemon -r
ras-mc-ctl --errors
Bu bölümde
- lspci -tv: PCIe topolojisini ağaç olarak gösterir; hangi switch hangi EP'yi barındırıyor
- lspci -vvv: BAR, capability listesi, link durumu, hız ve genişlik bilgisi
- /sys/bus/pci/devices/XXXX:XX:XX.X/: vendor, device, class, config, driver
- AER: correctable (RxErr, BadTLP) ve uncorrectable (MalformedTLP, ACS Violation) ayrımı
08 Pratik: PCIe ağacını analiz etme ve Raspberry Pi CM4 M.2 HAT
lspci ile gerçek sistemde PCIe ağacını analiz et. Raspberry Pi CM4'ün PCIe Gen2 x1 arayüzü ve M.2 HAT üzerinden NVMe SSD bağlantısını adım adım incele.
Masaüstü sistemde PCIe ağaç analizi
#!/bin/bash
# pcie_audit.sh — PCIe ağacı ve link durumu özeti
echo "=== PCIe Topolojisi ==="
lspci -tv
echo ""
echo "=== Tüm PCIe Cihazlar (Link hızı dahil) ==="
lspci -vvv 2>/dev/null | awk '
/^[0-9a-f]/{dev=$0; next}
/LnkSta:/{print dev; print " "$0}
'
echo ""
echo "=== NVMe Cihazları ==="
lspci -d ::0108 -vv 2>/dev/null | grep -E "^[0-9]|LnkSta|LnkCap"
echo ""
echo "=== Ağ Kartları ==="
lspci -d ::0200 -vv 2>/dev/null | grep -E "^[0-9]|LnkSta"
echo ""
echo "=== Hata Sayaçları ==="
for dev in /sys/bus/pci/devices/*/; do
aer="$dev/aer_dev_correctable"
if [ -f "$aer" ]; then
total=$(awk '{sum+=$2} END{print sum}' "$aer" 2>/dev/null)
if [ "${total:-0}" -gt 0 ]; then
echo "HATA: $dev"
cat "$aer"
fi
fi
done
Raspberry Pi CM4 — PCIe Gen2 x1
Compute Module 4, BCM2711 SoC'unda tek bir PCIe Gen2 x1 lane barındırır. Bu lane, M.2 HAT üzerinden dışarı çıkartılarak NVMe SSD bağlanmasına olanak tanır.
# /boot/config.txt ayarları (CM4 için PCIe etkinleştirme)
# dtparam=pciex1 — PCIe x1 arayüzü etkinleştir
# dtparam=pciex1_gen=3 — Gen3 denemesi (bazı SSD'ler çalışır)
# PCIe durumunu doğrula
lspci
# 0000:00:00.0 PCI bridge: Broadcom Inc. BCM2711 PCIe Bridge
# 0000:01:00.0 Non-Volatile memory controller: WD Blue SN570
# Link hızını kontrol et
sudo lspci -vvv -s 01:00.0 | grep -E "LnkSta|LnkCap"
# LnkCap: Port #0, Speed 8GT/s, Width x4, ASPM L1, Exit Latency L1 <4us
# LnkSta: Speed 5GT/s (downgraded), Width x1 (downgraded)
# → CM4, Gen2 x1 — SSD Gen3 x4 desteklese de downgraded olur
# NVMe disk bilgisi
sudo nvme id-ctrl /dev/nvme0 | head -20
# Hızlı bant genişliği testi
dd if=/dev/nvme0n1 of=/dev/null bs=1M count=1024 status=progress
# 1073741824 bytes (1.1 GB, 1.0 GiB) copied, 2.14 s, 502 MB/s
# → PCIe Gen2 x1 teorik: ~400 MB/s okuma — CM4 için tipik sonuç
Bandwidth hesaplama
# Gen2 x1 (CM4):
# Sembol hızı: 5 GT/s
# Encoding: 8b/10b → %80 verimlilik
# BW = 5 GT/s × 1 lane × 0.8 = 4 Gbit/s = 500 MB/s (tek yön)
# Gen3 x4 (tipik NVMe slot):
# Sembol hızı: 8 GT/s
# Encoding: 128b/130b → ~%98.5 verimlilik
# BW = 8 GT/s × 4 lane × 0.985 = 31.5 Gbit/s ≈ 3.9 GB/s (tek yön)
# Protocol overhead (~15-20%) hesaba katılınca:
# Gen2 x1: ~400 MB/s gerçekçi
# Gen3 x4: ~3.2 GB/s gerçekçi
Bu bölümde
- lspci -tv: ağaç görünümü; bridge → downstream portlar → endpoint zinciri
- LnkSta "downgraded": SSD Gen3 x4 olsa da CM4 PCIe x1 Gen2'ye indirgenir
- CM4 gerçekçi okuma: ~400-500 MB/s; Gen2 x1 teorik tavan 500 MB/s
- dtparam=pciex1_gen=3 ile bazı SSD'lerde Gen3 denenebilir — sinyal kalitesine bağlı