Qos - skype app

hello
is there a way to solve QoS for a Skype app? I cant find anything while googling as they say skype doesnt reserve specific ports... these ports can change all the time.

thanks

Did you try SQM? Basically automatic QoS

2 Likes

not really, i think you have to setup it somehow and target it to skype protocol/ ports?

Yep, Skype since version 8 doesn't use dedicated ports. Although, it does appear to use UDP ports in the ephemeral range.

I also observed it will use tunnels and private networks like Wireguard to attempt to reach the far end.

1 Like

That is the beauty of SQM, you do not need to do it. SQM does it for you. It should solve 99% of bufferbloat cases.

@Bartvz so SQM can handle "somehow" skype etc?

Well, SQM by default will use flow-fair queueing, so as long as you do not have to many concurrent flows most things simply work. In addition, it also allows per-internal-IP-fairness which often works even better in spite of flow-heavy applications like bit-torrent, as long as the bit-torrent client is not run on the same computer as skype :wink:

SQM does not guarantee to solve all your QoS problems, but typically it should improve things such that you have more time and calm to research your optimal solution (and for a number of users it works/behaves "good enough" so that they do not bother). Have look at https://openwrt.org/docs/guide-user/network/traffic-shaping/sqm for first steps and for the details (including the per-internal-IP-fairness).

2 Likes

thank you, will check!

@moeller0 i set it by the howto and speed (download) was reduced from 250mbit to 60mbit on client ... bit odd ;-(

what device are you using? some older devices have limited CPU speed, SQM requires a fair amount of CPU, and is limited by the one-core speed, can't use multiple cores.

2 Likes

Could you please post the output of the following commands run on the router via ssh:

cat /proc/cpu

cat /etc/openwrt_release

ifstatus wan | grep device

cat /etc/config/sqm

tc -s qdisc

SQM_DEBUG=1 SQM_VERBOSITY_MAX=8 /etc/init.d/sqm stop

SQM_DEBUG=1 SQM_VERBOSITY_MAX=8 /etc/init.d/sqm start

That should help in figuring out what is going on

sure, thanks

root@LEDE:~# cat /proc/cpuinfo
processor       : 0
model name      : ARMv7 Processor rev 2 (v7l)
BogoMIPS        : 25.00
Features        : half thumb fastmult vfp edsp vfpv3 tls idiva idivt vfpd32 lpae
CPU implementer : 0x56
CPU architecture: 7
CPU variant     : 0x2
CPU part        : 0x584
CPU revision    : 2

processor       : 1
model name      : ARMv7 Processor rev 2 (v7l)
BogoMIPS        : 25.00
Features        : half thumb fastmult vfp edsp vfpv3 tls idiva idivt vfpd32 lpae
CPU implementer : 0x56
CPU architecture: 7
CPU variant     : 0x2
CPU part        : 0x584
CPU revision    : 2

Hardware        : Marvell Armada 370/XP (Device Tree)
Revision        : 0000
Serial          : 0000000000000000

root@LEDE:~# cat /etc/openwrt_release
DISTRIB_ID='OpenWrt'
DISTRIB_RELEASE='19.07.3'
DISTRIB_REVISION='r11063-85e04e9f46'
DISTRIB_TARGET='mvebu/cortexa9'
DISTRIB_ARCH='arm_cortex-a9_vfpv3-d16'
DISTRIB_DESCRIPTION='OpenWrt 19.07.3 r11063-85e04e9f46'
DISTRIB_TAINTS=''

root@LEDE:~# ifstatus wan | grep device
        "l3_device": "eth1",
        "device": "eth1",


root@LEDE:~# cat /etc/config/sqm

config queue 'eth1'
        option interface 'eth1'
        option qdisc_advanced '0'
        option enabled '1'
        option upload '30000'
        option debug_logging '0'
        option verbosity '5'
        option qdisc 'cake'
        option script 'piece_of_cake.qos'
        option overhead '44'
        option linklayer 'ethernet'
        option download '280000'

tc -s qdisc 
qdisc noqueue 0: dev lo root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc mq 0: dev eth0 root
 Sent 10396940502 bytes 9338647 pkt (dropped 1, overlimits 0 requeues 889)
 backlog 0b 0p requeues 889
qdisc fq_codel 0: dev eth0 parent :8 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 4Mb ecn
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :7 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 4Mb ecn
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :6 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 4Mb ecn
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :5 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 4Mb ecn
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :4 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 4Mb ecn
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :3 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 4Mb ecn
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :2 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 4Mb ecn
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
 maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc fq_codel 0: dev eth0 parent :1 limit 10240p flows 1024 quantum 1514 target 5.0ms interval 100.0ms memory_limit 4Mb ecn
 Sent 10396940502 bytes 9338647 pkt (dropped 1, overlimits 0 requeues 889)
 backlog 0b 0p requeues 889
  maxpacket 26532 drop_overlimit 0 new_flow_count 899 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc cake 800f: dev eth1 root refcnt 9 bandwidth 30Mbit besteffort triple-isolate nonat nowash no-ack-filter split-gso rtt 100.0ms noatm overhe
ad 44
 Sent 3512688140 bytes 4674771 pkt (dropped 7331, overlimits 7496663 requeues 15)
 backlog 0b 0p requeues 15
 memory used: 937216b of 4Mb
 capacity estimate: 30Mbit
 min/max network layer size:           28 /    1500
 min/max overhead-adjusted size:       72 /    1544
 average network hdr offset:           14

                  Tin 0
  thresh         30Mbit
  target          5.0ms
  interval      100.0ms
  pk_delay       20.7ms
  av_delay        8.9ms
  sp_delay         67us
  backlog            0b
  pkts          4682102
  bytes      3523435297
  way_inds       371116
  way_miss       128151
  way_cols            0
  drops            7331
  marks               0
  ack_drop            0
  sp_flows            3
  bk_flows            1
  un_flows            0
  max_len         19162
  quantum           915

qdisc ingress ffff: dev eth1 parent ffff:fff1 ----------------
 Sent 7333614932 bytes 7054007 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc noqueue 0: dev br-lan root refcnt 2
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc fq_codel 0: dev tun0 root refcnt 2 limit 10240p flows 1024 quantum 1500 target 5.0ms interval 100.0ms memory_limit 4Mb ecn
 Sent 4724 bytes 89 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  maxpacket 0 drop_overlimit 0 new_flow_count 0 ecn_mark 0
  new_flows_len 0 old_flows_len 0
qdisc cake 8010: dev ifb4eth1 root refcnt 2 bandwidth 280Mbit besteffort triple-isolate nonat wash no-ack-filter split-gso rtt 100.0ms noatm ove
rhead 44
 Sent 7530125148 bytes 7053511 pkt (dropped 496, overlimits 4765267 requeues 0)
 backlog 0b 0p requeues 0
 memory used: 6508112b of 14000000b
 capacity estimate: 280Mbit
 min/max network layer size:           46 /    1480
 min/max overhead-adjusted size:       90 /    1524
 average network hdr offset:           14

                  Tin 0
  thresh        280Mbit
  target          5.0ms
  interval      100.0ms
  pk_delay         53us
  av_delay         17us
  sp_delay          4us
  backlog            0b
  pkts          7054007
  bytes      7530851634
  way_inds       293062
  way_miss       123973
  way_cols            0
  drops             496
  marks               0
  ack_drop            0
  sp_flows            3
  bk_flows            1
  un_flows            0
  max_len         67804
  quantum          1514


~

root@LEDE:~# SQM_DEBUG=1 SQM_VERBOSITY_MAX=8 /etc/init.d/sqm stop
/usr/lib/sqm/run.sh: line 57: can't create : nonexistent directory
SQM: Stopping SQM on eth1
root@LEDE:~#
SQM: sqm_start_default: Starting piece_of_cake.qos
SQM: ifb associated with interface eth1:
SQM: Currently no ifb is associated with eth1, this is normal during starting of the sqm system.
SQM: cmd_wrapper: ip: SUCCESS: /sbin/ip link add name ifb4eth1 type ifb
SQM: fn_exists: function candidate name: egress
SQM: fn_exists: TYPE_OUTPUT: egress is a function
SQM: fn_exists: return value: 0
SQM: egress
SQM: cmd_wrapper: tc: invocation silenced by request, FAILURE either expected or acceptable.
SQM: cmd_wrapper: tc: FAILURE (2): /usr/sbin/tc qdisc del dev eth1 root
SQM: cmd_wrapper: tc: LAST ERROR: RTNETLINK answers: No such file or directory
SQM: LLA: default link layer adjustment method for cake is cake
SQM: cake link layer adjustments:  overhead 44 mpu 0
SQM: cmd_wrapper: tc: SUCCESS: /usr/sbin/tc qdisc add dev eth1 root cake bandwidth 30000kbit overhead 44 mpu 0 besteffort
SQM: sqm_start_default: egress shaping activated
SQM: cmd_wrapper: ip: SUCCESS: /sbin/ip link add name TMP_IFB_4_SQM type ifb
SQM: cmd_wrapper: tc: SUCCESS: /usr/sbin/tc qdisc replace dev TMP_IFB_4_SQM ingress
SQM: QDISC ingress is useable.
SQM: cmd_wrapper: ip: SUCCESS: /sbin/ip link set dev TMP_IFB_4_SQM down
SQM: cmd_wrapper: ip: SUCCESS: /sbin/ip link delete TMP_IFB_4_SQM type ifb
SQM: fn_exists: function candidate name: ingress
SQM: fn_exists: TYPE_OUTPUT: ingress is a function
SQM: fn_exists: return value: 0
SQM: ingress
SQM: cmd_wrapper: tc: invocation silenced by request, FAILURE either expected or acceptable.
SQM: cmd_wrapper: tc: FAILURE (2): /usr/sbin/tc qdisc del dev eth1 handle ffff: ingress
SQM: cmd_wrapper: tc: LAST ERROR: RTNETLINK answers: Invalid argument
SQM: cmd_wrapper: tc: SUCCESS: /usr/sbin/tc qdisc add dev eth1 handle ffff: ingress
SQM: cmd_wrapper: tc: invocation silenced by request, FAILURE either expected or acceptable.
SQM: cmd_wrapper: tc: FAILURE (2): /usr/sbin/tc qdisc del dev ifb4eth1 root
SQM: cmd_wrapper: tc: LAST ERROR: RTNETLINK answers: No such file or directory
SQM: LLA: default link layer adjustment method for cake is cake
SQM: cake link layer adjustments:  overhead 44 mpu 0
SQM: cmd_wrapper: tc: SUCCESS: /usr/sbin/tc qdisc add dev ifb4eth1 root cake bandwidth 280000kbit overhead 44 mpu 0 besteffort wash
SQM: cmd_wrapper: ip: SUCCESS: /sbin/ip link set dev ifb4eth1 up
SQM: cmd_wrapper: tc: SUCCESS: /usr/sbin/tc filter add dev eth1 parent ffff: protocol all prio 10 u32 match u32 0 0 flowid 1:1 action mirred egress redirect dev ifb4eth1
SQM: sqm_start_default: ingress shaping activated
SQM: piece_of_cake.qos was started on eth1 successfully

There is one more strange thing, my main router has 500/30 connection, from that router i have direct eth link to that openwrt router, and on openwrt router on eth ports i am getting 250/30 max... strange

Thanks for the data, no smoking gun in there...

Could you perform and post a dslreports speedtest from a machine connected via ethernet to the OpenWrt router both with SQM disabled and with SQM enabled please? Recommendations for configuraing and reporting/linking the test result are here.

That indeed is strange. I assume that happens with SQM disabled?