mirror of
https://github.com/minetest/minetest.git
synced 2024-09-12 00:26:50 +02:00
Server: Calculate maximal total block sends dynamically (#6393)
The block sends per client is 1/2 when reaching the maximal player count.
This commit is contained in:
parent
1105a14bcc
commit
745a90dc84
@ -865,11 +865,10 @@ ipv6_server (IPv6 server) bool false
|
|||||||
[**Advanced]
|
[**Advanced]
|
||||||
|
|
||||||
# Maximum number of blocks that are simultaneously sent per client.
|
# Maximum number of blocks that are simultaneously sent per client.
|
||||||
|
# The maximum total count is calculated dynamically:
|
||||||
|
# max_total = ceil((#clients + max_users) * per_client / 4)
|
||||||
max_simultaneous_block_sends_per_client (Maximum simultaneous block sends per client) int 10
|
max_simultaneous_block_sends_per_client (Maximum simultaneous block sends per client) int 10
|
||||||
|
|
||||||
# Maximum number of blocks that are simultaneously sent in total.
|
|
||||||
max_simultaneous_block_sends_server_total (Maximum simultaneous block sends total) int 40
|
|
||||||
|
|
||||||
# To reduce lag, block transfers are slowed down when a player is building something.
|
# To reduce lag, block transfers are slowed down when a player is building something.
|
||||||
# This determines how long they are slowed down after placing or removing a node.
|
# This determines how long they are slowed down after placing or removing a node.
|
||||||
full_block_send_enable_min_time_from_building (Delay in sending blocks after building) float 2.0
|
full_block_send_enable_min_time_from_building (Delay in sending blocks after building) float 2.0
|
||||||
|
@ -1049,13 +1049,11 @@
|
|||||||
### Advanced
|
### Advanced
|
||||||
|
|
||||||
# Maximum number of blocks that are simultaneously sent per client.
|
# Maximum number of blocks that are simultaneously sent per client.
|
||||||
|
# The maximum total count is calculated dynamically:
|
||||||
|
# max_total = ceil((#clients + max_users) * per_client / 4)
|
||||||
# type: int
|
# type: int
|
||||||
# max_simultaneous_block_sends_per_client = 10
|
# max_simultaneous_block_sends_per_client = 10
|
||||||
|
|
||||||
# Maximum number of blocks that are simultaneously sent in total.
|
|
||||||
# type: int
|
|
||||||
# max_simultaneous_block_sends_server_total = 40
|
|
||||||
|
|
||||||
# To reduce lag, block transfers are slowed down when a player is building something.
|
# To reduce lag, block transfers are slowed down when a player is building something.
|
||||||
# This determines how long they are slowed down after placing or removing a node.
|
# This determines how long they are slowed down after placing or removing a node.
|
||||||
# type: float
|
# type: float
|
||||||
|
@ -272,10 +272,7 @@ public:
|
|||||||
*/
|
*/
|
||||||
void ResendBlockIfOnWire(v3s16 p);
|
void ResendBlockIfOnWire(v3s16 p);
|
||||||
|
|
||||||
s32 SendingCount()
|
u32 getSendingCount() const { return m_blocks_sending.size(); }
|
||||||
{
|
|
||||||
return m_blocks_sending.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Increments timeouts and removes timed-out blocks from list
|
// Increments timeouts and removes timed-out blocks from list
|
||||||
// NOTE: This doesn't fix the server-not-sending-block bug
|
// NOTE: This doesn't fix the server-not-sending-block bug
|
||||||
|
@ -298,7 +298,6 @@ void set_default_settings(Settings *settings)
|
|||||||
settings->setDefault("strict_protocol_version_checking", "false");
|
settings->setDefault("strict_protocol_version_checking", "false");
|
||||||
settings->setDefault("player_transfer_distance", "0");
|
settings->setDefault("player_transfer_distance", "0");
|
||||||
settings->setDefault("max_simultaneous_block_sends_per_client", "10");
|
settings->setDefault("max_simultaneous_block_sends_per_client", "10");
|
||||||
settings->setDefault("max_simultaneous_block_sends_server_total", "40");
|
|
||||||
settings->setDefault("time_send_interval", "5");
|
settings->setDefault("time_send_interval", "5");
|
||||||
|
|
||||||
settings->setDefault("default_game", "minetest");
|
settings->setDefault("default_game", "minetest");
|
||||||
|
@ -2181,7 +2181,7 @@ void Server::SendBlocks(float dtime)
|
|||||||
|
|
||||||
std::vector<PrioritySortedBlockTransfer> queue;
|
std::vector<PrioritySortedBlockTransfer> queue;
|
||||||
|
|
||||||
s32 total_sending = 0;
|
u32 total_sending = 0;
|
||||||
|
|
||||||
{
|
{
|
||||||
ScopeProfiler sp2(g_profiler, "Server: selecting blocks for sending");
|
ScopeProfiler sp2(g_profiler, "Server: selecting blocks for sending");
|
||||||
@ -2195,7 +2195,7 @@ void Server::SendBlocks(float dtime)
|
|||||||
if (!client)
|
if (!client)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
total_sending += client->SendingCount();
|
total_sending += client->getSendingCount();
|
||||||
client->GetNextBlocks(m_env,m_emerge, dtime, queue);
|
client->GetNextBlocks(m_env,m_emerge, dtime, queue);
|
||||||
}
|
}
|
||||||
m_clients.unlock();
|
m_clients.unlock();
|
||||||
@ -2207,11 +2207,13 @@ void Server::SendBlocks(float dtime)
|
|||||||
std::sort(queue.begin(), queue.end());
|
std::sort(queue.begin(), queue.end());
|
||||||
|
|
||||||
m_clients.lock();
|
m_clients.lock();
|
||||||
s32 max_blocks_to_send =
|
|
||||||
g_settings->getS32("max_simultaneous_block_sends_server_total");
|
// Maximal total count calculation
|
||||||
|
// The per-client block sends is halved with the maximal online users
|
||||||
|
u32 max_blocks_to_send = (m_env->getPlayerCount() + g_settings->getU32("max_users")) *
|
||||||
|
g_settings->getU32("max_simultaneous_block_sends_per_client") / 4 + 1;
|
||||||
|
|
||||||
for (const PrioritySortedBlockTransfer &block_to_send : queue) {
|
for (const PrioritySortedBlockTransfer &block_to_send : queue) {
|
||||||
//TODO: Calculate limit dynamically
|
|
||||||
if (total_sending >= max_blocks_to_send)
|
if (total_sending >= max_blocks_to_send)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -342,6 +342,7 @@ public:
|
|||||||
|
|
||||||
RemotePlayer *getPlayer(const u16 peer_id);
|
RemotePlayer *getPlayer(const u16 peer_id);
|
||||||
RemotePlayer *getPlayer(const char* name);
|
RemotePlayer *getPlayer(const char* name);
|
||||||
|
u32 getPlayerCount() const { return m_players.size(); }
|
||||||
|
|
||||||
static bool migratePlayersDatabase(const GameParams &game_params,
|
static bool migratePlayersDatabase(const GameParams &game_params,
|
||||||
const Settings &cmd_args);
|
const Settings &cmd_args);
|
||||||
|
Loading…
Reference in New Issue
Block a user