Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
P
Povídání o Linuxu
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Deploy
Releases
Package registry
Model registry
Operate
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Martin Mareš
Povídání o Linuxu
Compare revisions
703b0d75e7f87be1051d8ef9936509946f959c74 to 1882ae3ccdb2eec2e2dbf7343716b20c91d4dec3
Compare revisions
Changes are shown as if the
source
revision was being merged into the
target
revision.
Learn more about comparing revisions.
Source
mj/povidani-o-linuxu
Select target project
No results found
1882ae3ccdb2eec2e2dbf7343716b20c91d4dec3
Select Git revision
Branches
master
1 result
Swap
Target
mj/povidani-o-linuxu
Select target project
mj/povidani-o-linuxu
1 result
703b0d75e7f87be1051d8ef9936509946f959c74
Select Git revision
Branches
master
1 result
Show changes
Only incoming changes from source
Include changes to target since source was created
Compare
Commits on Source (2)
Oživuji tc.md
· 101f3cda
Martin Mareš
authored
1 year ago
101f3cda
TC
· 1882ae3c
Martin Mareš
authored
1 year ago
1882ae3c
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
tc.md
+66
-17
66 additions, 17 deletions
tc.md
with
66 additions
and
17 deletions
2023/
tc.md
→
tc.md
View file @
1882ae3c
# Traffic Control (náhodné poznámky)
## Priority paketů
### Hlavička IP
-
1 byte, jeho význam se postupně mění
-
původní význam (RFC 791):
-
3b priorita, 3b Type of Service, 2b RFU
-
TOS: flagy "low delay", "high throughput", "high reliability"
-
později se TOS rozšíříl o jeden z RFU bitů: "low monetary cost"
-
některé protokoly mají běžný TOS
-
předefinováno (RFC 2474):
-
6b pro DSCP (Differntiated Services Code Point) + 2b na ECN (viz níže)
-
ECN zabírá původní 2b RFU (low monetary cost prakticky nikdo nepoužíval)
-
DSCP má nějaké doporučené hodnoty odpovídající původním kombinacím pri+TOS,
zbytek je site-local
### Linux
-
paket má prioritu (
`u32 skb->priority`
)
-
může s ní manipulovat netfilter
-
u příchozích paketů se automaticky spočítá podle TOS (priority 0-7)
-
odchozí spojení:
`setsockopt(SO_PRIORITY)`
, na prioritu >6 je potřeba capability
-
také lze nastavit
`setsockopt(IP_TOS)`
, což přenastaví i prioritu
-
cgroup
`net_prio`
může overridovat prioritu pro procesy ve skupině
## Queueing Disciplines
-
ingress qdisc: může jenom klasifikovat a zahazovat pakety
-
lze obejít přeposíláním paketů do imq (Intermediate Queueing Device)
-
egress qdisc: může i zpožďovat pakety
-
fronta se síťovce přiřazuje pomocí tc qdisc
-
default: sysctl net.core.default_qdisc
-
ale pozor, některé síťovky mají svoji qdisc (třeba mq)
-
fronty mohou mít třídy
-
do tříd se rozděluje buďto automaticky nebo filtrem
-
k třídě může být připojena další qdisc
-
číslování major:minor
-
root je obvykle 1:0 (lze zkrátit na 1:)
-
vstup do qdisc je major:0, třídy uvnitř m
ohou mít
různé minors
-
vstup do qdisc je major:0, třídy uvnitř m
ají
různé minors
-
pfifo_fast
### Základní qdiscs
-
pfifo / bfifo
-
classless
-
fronta s omezením velikost v paketech (pfifo) nebo bytech (bfifo)
-
když se přeplní, zahazuje nejnovější paket (tail drop)
-
pfifo_fast (default)
-
classless
-
3 bands (priority)
-
tabulka překládající
4 bity TOS
na band
-
tabulka překládající
prioritu
na band
-
tbf (Token Bucket Filter)
-
classless
-
účtuje se v bytech
-
limit (maximální množství dat ve frontě na tokeny)
-
též jde zadat jako maximální latence
-
burst (velikost kyblíku)
-
mpu (minimální velikost paketu)
-
rate
-
mpu (minimální velikost paketu)
-
cell (zaokrouhlování velikosti paketu)
-
red (Random Early Detection)
-
classless
-
udržuje si průměrnou velikost fronty (EWMA)
-
podle toho upravuje pravděpodobnost označení paketu (ECN), případně zahození
-
pozor, není to shaper, ale jen fronta
-
sfq (Stochastic Fairness Queueing)
-
classless
-
identifikuje flows (na základě filtru nebo hash(ipproto src+dst addr+port))
-
round-robin přes flows
-
hešovací funkce se randomizuje po nastavitelném intervalu (=> kolize jen krátkodobé)
-
integrovaná RED
-
prio
-
classful
-
bands (priority)
-
filtry přidělují band
-
bands (priority), přidělují se buď filtrem, nebo se tabulkou překládá priorita paketu
-
pro každý band další qdisc
-
vždy odesílá band s nejvyšší prioritou, který má co odeslat
-
příklad:
# tc qdisc add dev eth0 root handle 1: prio
## This
*instantly*
creates classes 1:1, 1:2, 1:3
...
...
@@ -44,10 +95,6 @@
-
mqprio
-
jako mqueue, ale navíc umí priority
-
až 16 traffic classes, každé přiřadíme interval HW front
-
překlad sbk->priority na traffic class, priorita se získá z:
-
setsockopt
-
iptables
-
net_prio cgroup
-
umí HW-offloaded shaper pro každou třídu
## Filtry
...
...
@@ -58,8 +105,8 @@
Nebo:
# tc filter add dev eth0 p
arent 10:0 protocol ip
prio 1 u32 match ip dst 4.3.2.1/32 flowid 10:1
# tc filter add dev eth0 p
arent 10:0 protocol ip
prio 1 u32 match ip src 1.2.3.4/32 flowid 10:1
# tc filter add dev eth0 p
rotocol ip parent 10:
prio 1 u32 match ip dst 4.3.2.1/32 flowid 10:1
# tc filter add dev eth0 p
rotocol ip parent 10:
prio 1 u32 match ip src 1.2.3.4/32 flowid 10:1
# tc filter add dev eth0 protocol ip parent 10: prio 2 flowid 10:2
Nebo kombinace:
...
...
@@ -73,19 +120,21 @@ Nebo kombinace:
-
příjemnější matchování podle vlastností paketů (à la xtables)
-
též HW offloading
-
též jde klasifikovat podle fwmarků nebo routing realms (i pro zdrojové adresy!)
-
ematch (výrazy; umí i volat netfilterové podmínky a hledat v ipsetech)
-
cgroup (controller
`net_cls`
přiřazuje skupině class ID)
-
policing filter: umí pakety nad/pod nějakou mez průtoku/velikosti
-
zahazovat
-
reklasifikovat na best-effort
-
pipe: předat další akci v pořadí
-
reklasifikovat (znovu spustit filtr)
-
ht: hash table
-
xt: zavolá chain v xtables
-
ematch
-
akce:
-
drop
-
mirred (mirror nebo redirect na jiné zařízení)
-
lze definovat uživatelské (tc action)
-
xt: zavolá chain v xtables
-
vlan (změna VLAN tagu)
-
nat (1:1 NAT)
-
pedit (packet editor)
-
lze definovat uživatelské (tc action, něco jako podprogramy)
## Advanced Queue Management
...
...
This diff is collapsed.
Click to expand it.