There are several ways to decrease your lag, and stabilize your ping in black desert that I have found through testing. I've been keeping most of these secret to myself, but have decided to share them with you, and hope these stay between only those I share it with. Thank-you.
Some of these changes you might see around the web but many are custom to Black Desert and specialized to it's connection and the way it sends and receives packets.
Before going further I have to put in this disclaimer. This is advanced computer work that is messing around with the core of how your computer operates. I take no responsibility if you mess up and brick your windows install or any problems that occur because of anything you do. Now that that's out of the way, we shall precede. Thank-you.
First step is to Disable Nagles Algorithm, this will allow your computer to send packets to the server without having to completely fill your MTU allowing faster transmission and receive of data.
For all of the following fixes you will need to open the regestry editor. Open Run (Windows key + R) and type RegEdit and hit enter.
EDIT: ALL OF THE FOLLOWING DWORD VALUES ARE IN DECIMAL WHEN INPUTTING.
Disable Nagles Algorithm
Go to the following path in the folders you see on the left.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces{NIC-id} the "NIC-id" section will be one of the folders that seem to be random digits. Click on each one of them till you find your IP address, only one should have it listed.
If you don't know how to find your IP open run and type CMD.
Once the command windows opens you will want to type in ipconfig and hit enter. Your IP address will be listed in the data displayed.
Once you find which NIC-id is the correct one for you, right click in the right hand pane amongst the "Files" and click Create New DWORD value.
Name this DWORD value TcpAckFrequency. (this and all of the values are case sensitive.)
Double click on the new DWORD you made and set it's value to 1. (DWORD value, 1=disable, 2=default, 2-n=send ACKs if outstanding ACKs before timed interval. Setting not present by default).
For gaming performance it is recommended you disable it by setting the value to 1. For pure throughput and data streaming, you can experiment with values over 2.
Please keep in mind, if you try larger values, just make sure TcpAckFrequency*MTU is less than RWIN, since the sender may stop sending data if RWIN fills without an acknowledgement.
That's the first part Nagles Algorithm out of the way. Time for step 2.
Next find the following key in the "folders" on the left. (If you can't find it, create the key yourself):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters
In this key (the folder) create a new DWORD Value as follows.
TCPNoDelay with a value of 1 (DWORD value, 0 to enable Nagle's algorithm, 1 to disable, not present by default)
This is another value which removes Nagle's Algorithm.
Step number 3, reclaiming 20% of your bandwidth.
Locate the following key
“HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows”.
In the left pane, right-click on Windows and create a new key called “Psched“.
After this you need to right click on the blank white part in the right pane and create a new “DWORD”.
This one will be named “NonBestEffortLimit”
The value for this one will be zero to disable the reserve bandwidth.
Step 4, adjusting your buffers.
Locate HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\AFD\Parameters in the "folders" in the left pane.
Once you locate this key, you will be editing (adding them if they don't exist, they SHOULD exist though...) the following values.
LargeBufferSize, Value = 81920
MediumBufferSize = 40960
SmallBufferSize = 20480
What we are doing is attempting to reduce Flow control. Flow Control can result in additional network latency as a result of data transfer interruptions. rating conditions.
Under general operations you would want smaller buffersizes as to attempt to decrease the increase in paging; but with a game of this caliber you want to increase the buffer size as the make sure you are not falling into Flow Control.
Step 5 Transmit windows and I/O alterations.
TransmitWorker = 32
MaxFastTransmit = 64
MaxFastCopyTransmit = 128
DefaultReceiveWindow = 204800
DefaultSendWindow = 61440
What these settings are doing is altering windows sizes to help stabilize ping and and help the fast I/O by settings a buffer size for smaller data to be used as a copy instead of reprocessing the same data again.
The next DWORD we are adding is a protective measure against Socket Hijacking.
DisableAddressSharing=1
The next DWORD will be disabling Priority Boost.
Where as this SOUNDS like an awesome feature, it's generally recommened to be turned off. This allows windows to pick what IT thinks is a priority for network and processor use. Rather than just using the standard order.
PriorityBoost = 0
The next DWORD we are adding will be StandardAddressLength. This is the length of the standard address the machine uses for TDI.
By increases this value we will get a slight increase in performance as it seems BDO's transport protocol uses slightly longer strings.
We will be settings StandardAddressLength=1024
The next DWORD we will be changing is transmitIoLength. This may have several different default values, but it's usually the PAGE_SIZE value, or PAGE_SIZE*2.
This is the default size for I/O used by Transmit(File)
We will be changing this to transmitIoLength = 4294967295
After all those changes we move onto step 6
Next you will want to navigate to the following key
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
Here we will be making changes to Transmission Control Protocol in order to help decrease ping and stabilize or reduce latency.
The first DWORD we will be adding is TcpTimedWaitDelay
What this DWORD does is it tells the computer how long it needs to wait before it frees up the TCP to use it's resources elsewhere.
TcpTimedWaitDelay = 30 is the value we will be using.
The next DWORD we will be adding is TcpMaxSendFree.
This sets the TCP Header Resource limit.
The default value for this is 5000, but increasing it can help throughput and even help stability during a DOS attack
We will be setting TcpMaxSendFree = 65535
ForwardBufferMemory is the next TCP parameter we will be altering.
ForwardBufferMemory determines the space that is set aside to store packets.
If the buffer fills the NiC or router will discard packets at random
ForwardBufferMemory = 512000
MaxForwardBufferMemory = 20971520
The final change will be for MaxConnectionsPerServer ...which should be pretty self explainitory.
Find HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
MaxConnectionsPerServer = 16
MaxConnectionsPer1_0Server = 12
After you're all done, it's time to reboot and enjoy a less laggy, and desyncy Black Desert.