Sunday, July 10, 2022

Improving VDSL speed with Draytek routers.

Please note: this method is not guaranteed to work, neither guaranteed that DLM won't trigger line banding. It is, however, a method I found working in my case.


First of all. My line is configured as 80/8mbps, however, only 55/7.5mbps is attainable with stock Draytek 2760n Delight settings. It is working in Interleave mode. Said so, currently I'm synced with 59/7.5mbps and I'm still on the way to see if it can be further improved without any physical changes to the line.


Draytek has a console where there is this magical command: vdsl snr [-50~50] with which you can control your downline Signal to Noise Ratio margin. What I see in practice is that when you set it to 50, the modem will refuse to accept signal that is lower than standard SNR +5dB, which may be good to stabilize the line if the standard used by your provider is not enough and you want to manually find the sweet spot before the DLM triggers and possibly cuts the speed more that you could achieve as stable by setting the margin by hand.

My provider wants me to work with 8dB SNR, giving me around 55mbps downline. When I force it with +5dB margin I get 14dB SNR and sync speed around 40mbps. However, the CRC Count and ES Count still shows up with such setting, having absolutely no difference between 8dB and 14dB which makes me believe that the line is not well maintained by our provider here (Orange Polska), not properly shielded or using faulty devices (or shortwaves and other interference surges are so high that it can't be properly avoided), and even with 14dB SNR on 14dB attenuation generates errors and in exactly the same amount as with 8dB SNR.

The good thing is that vdsl snr command allows you to use negative margin and I can confirm it working to some extend on my line. Though, as simple as it is to set positive values, it's not that straight forward when you want DSLAM to give you more. I guarantee you that it doesn't like when you suddenly want to reset the line from your side and negotiate a lower SNR. I'm currently at -1dB offset, though the SNR is still 8dB, my sync downlink speed is higher and offsetting it by -0.1dB did indeed raise it by approx 0.5mbps at a time until I forgot to do it properly and had -0.2dB "stolen" from me.


So how to do it properly?

First you need to remember that your line is under constant measurement in search for errors and link times. Most forums usually define it as 15 min checkpoints and ~24h summary. Thus you SHOULD NOT reset your line too often or preferably at all or you may risk being banded. Said so, there is a bit of "magic" you can perform to reset the line very nicely for DSLAM that I found working well in my case. This method does not necessarily require you to take off the phone line wire and wait 30 min. In fact, disconnecting your phone line from the modem could possibly send some "not nice" noise back to DSLAM that you would like to avoid at all costs, just in case.


In order to see if it is possible to be synced at better speed you need to have a lot of patience and properly measure your line over time (vdsl status) to find the sweet spot when DSLAM "wants" to give you one of the best possible attainable speeds. For me it's 4~6AM my time.

Do NOT use vdsl snr with negative values right away. First use vdsl idle on and wait until your line resets by itself, making your modem quiet so DSLAM can gracefully RESET the line. After this you can either wait 30 minutes or not, it's up to you and maybe how easy it is to trigger line banding with your provider. The next thing is to decrement snr margin by very little, possibly by 1 (0.1dB) at a time, thus vdsl snr -1, vdsl snr -2 and so on and do it preferably every 24h (it can work more often but to avoid banding it is the best to wait between resets). Do not forget vdsl idle on, if you do, it is possible that you won't get any higher speeds and doing it later correctly may even result in DSLAM taking away 0.5mbps from you. You must do vdsl idle on first when reducing SNR margin below 0, acting like a gentleman with DSLAM.


My experience:

- every time I reduced SNR margin by -0.1dB I got +0.5mbps sync

- when I forgot vdsl idle on once I got the same sync with higher attainable speed

- when I corrected my mistake right away I ended up with 0.5mbps being taken from me

- when I yet again (3 time that day, after 2h) reduced SNR by -0.1dB I got back my 0.5mbps

- Result? After forgetting vdsl idle on just once I ended up with -0.2dB margin offset and absolutely no change in actual downlink rate which may be either a limit for me or I triggered DLM to band me a bit, though I was capable of regaining the speed at the loss of 0.2dB of fine-tuning.


Type ? for command help
vdsl status

  ---------------------- ATU-R Info (hw: annex A, f/w: annex A/B/C) -----------
   Running Mode            :      17A       State                : SHOWTIME
   DS Actual Rate          : 56506000 bps   US Actual Rate       :  7616000 bps
   DS Attainable Rate      : 61409048 bps   US Attainable Rate   :  7897000 bps
   DS Path Mode            :  Interleave    US Path Mode         :  Interleave 
   DS Interleave Depth     :      507       US Interleave Depth  :      101 
   NE Current Attenuation  :       18 dB    Cur SNR Margin       :        8  dB
   DS actual PSD           :   -10.-5 dB    US actual PSD        :    14. 5  dB
   NE CRC Count            :      176       FE CRC Count         :     9463
   NE ES Count             :       20       FE  ES Count         :     2349
   Xdsl Reset Times        :        0       Xdsl Link  Times     :        8
   ITU Version[0]          : 00000000       ITU Version[1]       : 00000000
   VDSL Firmware Version   : 05-07-09-0F-01-07   [with Vectoring support] 
   Power Management Mode   : DSL_G997_PMS_L0 
   Test Mode               : DISABLE 
  -------------------------------- ATU-C Info ---------------------------------
   Far Current Attenuation :       14 dB    Far SNR Margin       :        8  dB
   CO ITU Version[0]       : b5004244       CO ITU Version[1]    : 434da49e
   DSLAM CHIPSET VENDOR    : < BDCM >
vdsl idle

% Usage : adsl idle [on | tcpmessage | tcpmessage_off]
% DSL is under [DISABLE] test mode.
% DSL debug tool mode is off.
vdsl idle on

% DSL is under [IDLE/QUIET] test mode.
% DSL debug tool mode is off.
vdsl snr -3

VDSL SNR update successfully !
Restarting modem ...
vdsl status

  ---------------------- ATU-R Info (hw: annex A, f/w: annex A/B/C) -----------
   Running Mode            :      17A       State                : SHOWTIME
   DS Actual Rate          : 57186000 bps   US Actual Rate       :  7702000 bps
   DS Attainable Rate      : 61619704 bps   US Attainable Rate   :  7931000 bps
   DS Path Mode            :  Interleave    US Path Mode         :  Interleave 
   DS Interleave Depth     :      513       US Interleave Depth  :      101 
   NE Current Attenuation  :       18 dB    Cur SNR Margin       :        8  dB
   DS actual PSD           :   -10.-5 dB    US actual PSD        :    14. 5  dB
   NE CRC Count            :        0       FE CRC Count         :     9463
   NE ES Count             :        0       FE  ES Count         :     2349
   Xdsl Reset Times        :        0       Xdsl Link  Times     :        9
   ITU Version[0]          : 00000000       ITU Version[1]       : 00000000
   VDSL Firmware Version   : 05-07-09-0F-01-07   [with Vectoring support] 
   Power Management Mode   : DSL_G997_PMS_L0 
   Test Mode               : DISABLE 
  -------------------------------- ATU-C Info ---------------------------------
   Far Current Attenuation :       14 dB    Far SNR Margin       :        8  dB
   CO ITU Version[0]       : 00000000       CO ITU Version[1]    : 00000000
   DSLAM CHIPSET VENDOR    : < ----- >


The following day:

vdsl status

  ---------------------- ATU-R Info (hw: annex A, f/w: annex A/B/C) -----------
   Running Mode            :      17A       State                : SHOWTIME
   DS Actual Rate          : 57186000 bps   US Actual Rate       :  7702000 bps
   DS Attainable Rate      : 61563928 bps   US Attainable Rate   :  7931000 bps
   DS Path Mode            :  Interleave    US Path Mode         :  Interleave 
   DS Interleave Depth     :      513       US Interleave Depth  :      101 
   NE Current Attenuation  :       18 dB    Cur SNR Margin       :        8  dB
   DS actual PSD           :   -10.-5 dB    US actual PSD        :    14. 5  dB
   NE CRC Count            :       46       FE CRC Count         :     9475
   NE ES Count             :        8       FE  ES Count         :     2354
   Xdsl Reset Times        :        0       Xdsl Link  Times     :        9
   ITU Version[0]          : 00000000       ITU Version[1]       : 00000000
   VDSL Firmware Version   : 05-07-09-0F-01-07   [with Vectoring support] 
   Power Management Mode   : DSL_G997_PMS_L0 
   Test Mode               : DISABLE 
  -------------------------------- ATU-C Info ---------------------------------
   Far Current Attenuation :       14 dB    Far SNR Margin       :        8  dB
   CO ITU Version[0]       : b5004244       CO ITU Version[1]    : 434da49e
   DSLAM CHIPSET VENDOR    : < BDCM >
vdsl idle on

% DSL is under [IDLE/QUIET] test mode.
% DSL debug tool mode is off.
vdsl snr -4

VDSL SNR update successfully !
Restarting modem ...
vdsl status

  ---------------------- ATU-R Info (hw: annex A, f/w: annex A/B/C) -----------
   Running Mode            :      17A       State                : SHOWTIME
   DS Actual Rate          : 57631000 bps   US Actual Rate       :  7748000 bps
   DS Attainable Rate      : 61981992 bps   US Attainable Rate   :  8040000 bps
   DS Path Mode            :  Interleave    US Path Mode         :  Interleave 
   DS Interleave Depth     :      517       US Interleave Depth  :      101 
   NE Current Attenuation  :       18 dB    Cur SNR Margin       :        8  dB
   DS actual PSD           :   -10.-5 dB    US actual PSD        :    14. 5  dB
   NE CRC Count            :        0       FE CRC Count         :     9484
   NE ES Count             :        0       FE  ES Count         :     2355
   Xdsl Reset Times        :        0       Xdsl Link  Times     :       10
   ITU Version[0]          : 00000000       ITU Version[1]       : 00000000
   VDSL Firmware Version   : 05-07-09-0F-01-07   [with Vectoring support] 
   Power Management Mode   : DSL_G997_PMS_L0 
   Test Mode               : DISABLE 
  -------------------------------- ATU-C Info ---------------------------------
   Far Current Attenuation :       14 dB    Far SNR Margin       :        8  dB
   CO ITU Version[0]       : 00000000       CO ITU Version[1]    : 00000000
   DSLAM CHIPSET VENDOR    : < ----- >

 

SNR margin +4dB:




 

SNR margin -0.1dB:


SNR margin -1dB:



 

Your millage may differ.


Python script to produce images from your commands: vdsl showbins  and vdsl showbins up. Must be text file bins_dl.txt and bins_ul.txt respectively. Both starting with bin 0, 1, 2, 3 and ending with 4092, 4093, 4094, 4095. No enter allowed at the end of file. Saves three files (check line with filenames list variable). Labels may not be visible due to adjusted fit to image size - change plt.subplot_adjust numeric parameters if you prefer it otherwise.

import matplotlib.pyplot as plt

def loaddata(file):
    with open(file,mode="r") as f:
        data = f.read()
        data = data.replace("*","\n")
        bins_raw = data.split("\n")
        all_bins = []
        for bin in bins_raw:
            bin_data = bin.split()
            all_bins.append(bin_data)
    bins = []
    bits = []
    snrs = []
    gains = []
    for bin in all_bins:
        bins.append(int(bin[0]))
        bits.append(int(bin[3]))
        snrs.append(int(bin[1]))
        gains.append(int(bin[2]))
    return bins,bits,snrs,gains

data_dl = loaddata("bins_dl.txt")
data_ul = loaddata("bins_ul.txt")

ylabels = ["Bits", "SNR dB", "Gain .1dB"]
filenames = ["dsl_bits_per_bin.png","dsl_snr_per_bin.png","dsl_gain_per_bin.png"]

for x in range(0,3):
    plt.clf()
    plt.xlabel("Bins")
    plt.ylabel(ylabels[x])
    plt.bar(data_dl[0],data_dl[x+1], label="Downstream")
    plt.bar(data_ul[0],data_ul[x+1], label="Upstream")
    plt.subplots_adjust(bottom=0.05, left=0.07, right=1, top=1)
    plt.legend()
    plt.savefig(filenames[x],dpi=1200)


Commands, bins dump and image generating python could possibly be fully automated on Linux machine, using ssh for controlling and getting data from router. Including finding the best possible time to gracefully reset connection for best sync speeds at 24h+ interval.