Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[QoS] Décidément, ça veut pas
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
El_Goretto
Advocate
Advocate


Joined: 29 May 2004
Posts: 2862
Location: Paris

PostPosted: Sat May 10, 2008 9:23 am    Post subject: [QoS] Décidément, ça veut pas Reply with quote

Bonjour,

Bon, je voulais savoir si d'autres gens avaient déjà joué avec la QoS sous nunux, en particuliers avec une freebox au bout de la ligne.

Parce que, ça fait bizarre de la dire, mais tous les setups que j'ai essayé (HTB pur, PRIO simple, TBF+PRIO simple...) "ça marche pas", à chaque fois que le traffic basse priorité (du bittorrent) est lancé (sans limite de bande passante côté applicatif), le traffic en haute priorité comme l'ICMP est retardé (ping de + de 1000ms).
Hors, ça m'agace d'autant plus que PRIO est sensé être bête comme ses pieds et traiter les paquets hautes priorité tant qu'il y en a avant de traiter les autres.

Bref, le setup TBF (pour limiter le traffic total à un peu moins que la capacité de ma ligne) + PRIO (pour traiter les différentes priorité de flux) aurait du donner des résultats. Mes paquets vont bien dans les files correctes, donc je ne vois pas un problème avec le paramétrage de la QoS, mais un problème bien caché que je n'arrive pas à démasquer.

Bon, là je vous demande juste si vous avez quelques idées, lundi je retourner tripoter un peu le truc, en re-simplifiant à mort mes filtres/classifiers (1 bitto, et le reste du monde).

Autre question: impossible de faire cohabiter HTB et PRIO, les filtres sont inefficaces (les mêmes que j'ai depuis le débuts, et sont normalement indépendants du reste), et tout le traffic passe dans la file root, donc zappe toute QoS. Si vous avez déjà réussi à faire çà... n'hésitez pas à faire partager votre expérience :)
_________________
-PC: 2500K/P8Z68V, 8Go DDR3 1600 1.35V, R9-290, ARC1220+5xWD500RE3, M4 256Go
-Home servers (hardened): µ-serv N40L, 2Go ECC + NF9D-2700, 4Go
-Réseau: ERL-3 + 3x switches GS108Tv2
-NAS: RDNU2000
Back to top
View user's profile Send private message
Darius4all
Tux's lil' helper
Tux's lil' helper


Joined: 16 Jun 2003
Posts: 128
Location: France

PostPosted: Sat May 10, 2008 3:19 pm    Post subject: Reply with quote

salut , probleme qui m'intéresse également ayant une FB et m'étant heurté a un fort ralentissement de traffic aprés activation du QoS.
je connais pas trop les différentes possibilités de cette option, je tourne actuellement sans mais je trouve le débit un peu lent par rapport a la meme machine sous XP.
je peux tester un peu les meme options que toi pour te faire un retour sur comment ca se passe chez moi.
dis moi les options que tu as compilé que je test ca.
_________________
Athlon64 3700+ | GeForce 6800GS | 2Go RAM | 2*300Go/Raid 0 | Shuttle SN26P
Core2 Duo T7500 | GeForce 8700M GT | 2Go RAM | 200Go 7200rpm | Clevo M570RU
Back to top
View user's profile Send private message
Leander256
l33t
l33t


Joined: 05 Jul 2003
Posts: 893
Location: Singapour

PostPosted: Fri May 16, 2008 4:59 am    Post subject: Reply with quote

J'ai fait pas mal mumuse avec la QoS il y a deux ans (sur un sagem fast 800), et j'arrivais a avoir des resultats mais ca restait assez bancal. Des que je faisais une configuration un peu complexe, ca ne fonctionnait pas vraiment comme prevu et il m'a fallu utiliser netfilter pour marquer tous les paquets pour pouvoir les filtrer correctement dans la QoS. Donc si tu n'as pas encore essaye ca, je te conseille de passer par netfilter pour marquer les paquets avec du "-j MARK --set-mark n".

<aigri>Et je trouve que les outils en ligne de commande pour manipuler la QoS sont vraiment pourraves</aigri>
Back to top
View user's profile Send private message
El_Goretto
Advocate
Advocate


Joined: 29 May 2004
Posts: 2862
Location: Paris

PostPosted: Fri May 16, 2008 7:07 am    Post subject: Reply with quote

Bon, OK, ce WE je "balance" mon script actuel.
J'utilise déjà iptables pour marquer les paquets parce que c'est le plus simple quand on touche déjà la syntaxe netfilter, puis j'ai récupéré des examples pour mapper avec tc ces marques sur des files QoS.
+ ce WE donc.
_________________
-PC: 2500K/P8Z68V, 8Go DDR3 1600 1.35V, R9-290, ARC1220+5xWD500RE3, M4 256Go
-Home servers (hardened): µ-serv N40L, 2Go ECC + NF9D-2700, 4Go
-Réseau: ERL-3 + 3x switches GS108Tv2
-NAS: RDNU2000
Back to top
View user's profile Send private message
El_Goretto
Advocate
Advocate


Joined: 29 May 2004
Posts: 2862
Location: Paris

PostPosted: Sun May 18, 2008 10:00 pm    Post subject: Reply with quote

Voici la version qui se voulait "basique", pour tester PRIO, uniquement encadré par TBF pour limiter la bande passante totale.

beck est le nom de la passerelle, main_gauche (MG) celui de ma station dans le LAN.
Ne paniquez pas, tout le début n'est que déclaration de variables.

Ici, l'objectif est d'avoir 3 files pour PRIO, 1 haute prio, une pour le traffic par défaut (du fait de la priomap), et une basse prio. Au final, j'ai un marquage fin, mais pour mes tests je ne colle le traffic marqué qu'en haute ou basse prio.

Code:

!/bin/sh

RATEUP=600

LSMOD="lsmod"
MODPROBE="modprobe"
IPTABLES="iptables"
IPTABLES_RESTORE="iptables-restore"
IP="ip"

GID_P2P="407"
GID_SQUID="31"

NET_LAN="192.169.0.0/24"
IP_BC_NET_LAN="192.169.0.255"
NET_DMZ="192.169.1.0/24"
NET_VPN="10.8.0.0/24"
NET_MCAST="239.0.0.0/8"

IP_MG_LAN="192.169.0.1"
IP_MG_LAN2="192.169.0.10"
IP_BECK_LAN="192.169.0.254"
IP_BECK_WAN=""
#---->IP WAN à modifier
IP_BECK_DMZ="192.169.1.254"
IP_BECK_VPN="10.8.0.1"

IF_DMZ="eth0"
IF_LAN="eth1"
IF_WAN="eth2"
IF_MER2Z="eth3"
IF_VPN="tap0"


## ports des services (quand rien n'est spécifié, les ports sont UDP _et_ TCP)
P_SKYPE="32202"
P_AMSN="6890:6900"
P_SUNRPC="111"
P_NFS="2049"
P_RPC="32765:32768"
P_SSH_TCP="2222,443"
P_TS_ADMIN_TCP="14534"
P_TS_CLIENT_UDP="8767"
P_BT_TCP="6901:6997"
P_HTS_TCP="6998"
P_ED2K_TCP="4600"
P_ED2K_UDP="4601,4603"
P_HUBDC_TCP="1111"
P_DCCLIENT_TCP="6999"
P_VPNLIGHT_UDP="1194"
P_QUAKE3_UDP="27960"
P_DOW_UDP="6112"
P_SINS_TCP="6112"
P_FEAR_UDP="27888"
P_FLATOUT_UDP="23756"
P_DNS="53"
P_DHCP_UDP="67,68"
P_RVOLT_UDP="47624"
P_RVOLT_TCP="47624,2300,2301"
P_CHAOSL_UDP="50426,2234"
P_SWAT4_UDP="10480:10484"
P_WENGO_UDP="5060,10600,10601,11132,44640"
P_FARCRY_UDP="49001"
P_FREE_MPOSTE_UDP="31336"
P_FREESPACE2_TCP="7117"
P_FREESPACE2_UDP="7808"
P_MURMUR="64738"
#P_FREE_MPOSTE_UDP="31336,31337,32808,32809"

## ce qui suit est toujours en TCP (logique...)
P_HTTP="80"
P_HTTPS="443"
P_FTP="21"
P_FTPDATA="20"
P_POP3="110"
P_POP3S="995"
P_SMTP="25"
P_SMTPS="465"

if [ "$1" ] && [ "$1" != "iptables" ] && [ "$1" != "qos" ] && [ "$1" != "status" ] && [ "$1" != "stop" ]
then
   echo "erreur, mauvais parametre"
   exit 1
fi

if [ "$1" = "status" ]
then
        echo "[qdisc]"
        tc -s qdisc show dev $IF_WAN
        echo "[class]"
        tc -s class show dev $IF_WAN
        echo "[filter]"
        tc -s filter show dev $IF_WAN
        echo "[iptables]"
        $IPTABLES -t mangle -L MYSHAPER-OUT -v -x 2> /dev/null
        exit
fi


$IPTABLES -t mangle -D POSTROUTING -o $IF_WAN -j MYSHAPER-OUT 2> /dev/null > /dev/null
$IPTABLES -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null
$IPTABLES -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null
tc qdisc del dev $IF_WAN root    2> /dev/null > /dev/null

if [ "$1" = "stop" ] || [ "$1" = "iptables" ]
then
        echo "Shaping removed on $IF_WAN."
        if [ "$1" = "stop" ]
   then
      exit
   fi
fi

if [ "$1" != "iptables" ]
then

###########################################################
#
# Outbound Shaping (limits total bandwidth to RATEUP)

# set queue size to give latency of about 2 seconds on low-prio packets
# valeur initiale de 30
$IP link set dev $IF_WAN qlen 1000

# changes mtu on the outbound device.  Lowering the mtu will result
# in lower latency but will also cause slightly lower throughput due
# to IP and TCP protocol overhead.
#$IP link set dev $IF_WAN mtu 100

tc qdisc add dev $IF_WAN  root handle 1: tbf rate ${RATEUP}kbit latency 10000ms burst 154000

tc qdisc add dev $IF_WAN  parent 1: handle 10: prio priomap 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
tc qdisc add dev $IF_WAN  parent 10:1 handle 100: pfifo
tc qdisc add dev $IF_WAN  parent 10:2 handle 200: sfq
tc qdisc add dev $IF_WAN  parent 10:3 handle 300: sfq


# filter traffic into classes by fwmark - here we direct traffic into priority class according to
#                                         the fwmark set on the packet (we set fwmark with iptables
#                                         later).
tc filter add dev $IF_WAN parent 10:0 prio 1 protocol ip handle 20 fw flowid 10:1
tc filter add dev $IF_WAN parent 10:0 prio 2 protocol ip handle 21 fw flowid 10:1
tc filter add dev $IF_WAN parent 10:0 prio 3 protocol ip handle 22 fw flowid 10:1
tc filter add dev $IF_WAN parent 10:0 prio 4 protocol ip handle 23 fw flowid 10:3
tc filter add dev $IF_WAN parent 10:0 prio 5 protocol ip handle 24 fw flowid 10:3
tc filter add dev $IF_WAN parent 10:0 prio 6 protocol ip handle 25 fw flowid 10:3
tc filter add dev $IF_WAN parent 10:0 prio 7 protocol ip handle 26 fw flowid 10:3

# add MYSHAPER-OUT chain to the mangle table in iptables - this sets up the table we'll use
#                                                      to filter and mark packets.
$IPTABLES -t mangle -N MYSHAPER-OUT
$IPTABLES -t mangle -I POSTROUTING -o $IF_WAN -j MYSHAPER-OUT


# add fwmark entries to classify different types of traffic - Set fwmark from 20-26 according to
#                                                             desired class. 20 is highest prio.

$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --dport 53 -j MARK --set-mark 20                # DNS name resolution (small packets)
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --dport 53 -j RETURN
$IPTABLES -t mangle -A MYSHAPER-OUT -p udp --dport 53 -j MARK --set-mark 20                # DNS name resolution (small packets)
$IPTABLES -t mangle -A MYSHAPER-OUT -p udp --dport 53 -j RETURN
#Pour mettre les paquets SYN et ACK prioritaires
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 20
#$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --tcp-flags SYN,RST,ACK SYN -j RETURN
#$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --tcp-flags ACK ACK -j MARK --set-mark 20
#$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp --tcp-flags ACK ACK -j RETURN

#alternatives pour les ACKs:
#$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m length --length 0:64 -j MARK --set-mark 20 # small packets (probably just ACKs)
#$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m length --length 0:64 -j RETURN
#autre alternatives pour les ACKs (necessite u32):
# To speed up downloads while an upload is going on, put ACK packets in
# the interactive class:
#tc filter add dev $IF_WAN parent 1: protocol ip prio 0 u32 \
#   match ip protocol 6 0xff \
#   match u8 0x05 0x0f at 0 \
#   match u16 0x0000 0xffc0 at 2 \
#   match u8 0x10 0xff at 33 \
#   flowid 1:20


$IPTABLES -t mangle -A MYSHAPER-OUT -p icmp -j MARK --set-mark 21               # ICMP (ping) - high prio, impress friends
$IPTABLES -t mangle -A MYSHAPER-OUT -p icmp -j RETURN
$IPTABLES -t mangle -A MYSHAPER-OUT -p udp -m multiport --sports $P_TS_CLIENT_UDP,$P_MURMUR -j MARK --set-mark 21
$IPTABLES -t mangle -A MYSHAPER-OUT -p udp -m multiport --sports $P_TS_CLIENT_UDP,$P_MURMUR -j RETURN
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m multiport --sports $P_TS_ADMIN_TCP,$P_MURMUR -j MARK --set-mark 21
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m multiport --sports $P_TS_ADMIN_TCP,$P_MURMUR -j RETURN
#pour le surf qui passe par squid:
#$IPTABLES -t mangle -A MYSHAPER-OUT -m owner --gid-owner $GID_SQUID -j MARK --set-mark 21

#priorise (presque) a fond MG:
$IPTABLES -t mangle -A MYSHAPER-OUT -s $IP_MG_LAN -j MARK --set-mark 22
$IPTABLES -t mangle -A MYSHAPER-OUT -s $IP_MG_LAN -j RETURN
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m multiport --dports $P_SSH_TCP -j MARK --set-mark 22    # acceder a d'autres ssh
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m multiport --dports $P_SSH_TCP -j RETURN

$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -s $IP_BECK_WAN -m multiport --sports $P_SSH_TCP -j MARK --set-mark 23    # secure shell
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -s $IP_BECK_WAN -m multiport --sports $P_SSH_TCP -j RETURN

$IPTABLES -t mangle -A MYSHAPER-OUT -m owner --gid-owner $GID_P2P -j MARK --set-mark 26
$IPTABLES -t mangle -A MYSHAPER-OUT -m owner --gid-owner $GID_P2P -j RETURN

# Les paquets restants sont marqués selon le TOS (Type of Service)
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m tos --tos Minimize-Delay -m mark --mark 0 -j MARK --set-mark 21
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m tos --tos Maximize-Throughput -m mark --mark 0 -j MARK --set-mark 24
$IPTABLES -t mangle -A MYSHAPER-OUT -p tcp -m tos --tos Minimize-Cost -m mark --mark 0 -j MARK --set-mark 26

$IPTABLES -t mangle -A MYSHAPER-OUT -m mark --mark 0 -j MARK --set-mark 25      # redundant- mark any unmarked packets as 25 (low prio)



# Done with outbound shaping
#
####################################################


echo "Outbound shaping added to $IF_WAN.  Rate: ${RATEUP}Kbit/sec."
# uncomment following line if you only want upstream shaping.
# exit

fi

[ensuite ya les règles iptables "classiques"]

_________________
-PC: 2500K/P8Z68V, 8Go DDR3 1600 1.35V, R9-290, ARC1220+5xWD500RE3, M4 256Go
-Home servers (hardened): µ-serv N40L, 2Go ECC + NF9D-2700, 4Go
-Réseau: ERL-3 + 3x switches GS108Tv2
-NAS: RDNU2000
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum