Commit Graph

18 Commits

Author SHA1 Message Date
SkyratBot
d8da1153b7 [MIRROR] Biddle Verbs: Queues the Most Expensive Verbs for the Next Tick if the Server Is Overloaded [MDB IGNORE] (#15329)
* Biddle Verbs: Queues the Most Expensive Verbs for the Next Tick if the Server Is Overloaded (#65589)

This pr goes through: /client/Click(), /client/Topic(), /mob/living/verb/resist(), /mob/verb/quick_equip(), /mob/verb/examinate(), and /mob/verb/mode() and makes them queue their functionality to a subsystem to execute in the next tick if the server is overloaded. To do this a new subsystem is made to handle most verbs called SSverb_manager, if the server is overloaded the verb queues itself in the subsystem and returns, then near the start of the next tick that verb is resumed with the provided callback. The verbs are called directly after SSinput, and the subsystem does not yield until its queue is completely finished.

The exception are clicks from player input since they are extremely important for the feeling of responsiveness. I considered not queuing them but theyre too expensive not to, suffering from a death of a thousand cuts performance wise from many many things in the process adding up. Instead clicks are executed at the very start of the next tick, as the first action that SSinput completes, before player movement is processed even.

A few months ago, before I died I was trying to figure out why games at midpop (40-50 people) had non zero and consistent time dilation without maptick being consistently above 28% (which is when the MC stops yielding for maptick if its overloaded). I found it out, started working on this pr, then promptly died. luckily im a bit less dead now

the current MC has a problem: the cost of verbs is completely and totally invisible to it, it cannot account for them. Why is this bad? because verbs are the last thing to execute in the tick, after the MC and SendMaps have finished executing.
tick diagram2
If the MC is overloaded and uses 100% of the time it allots itself this means that if SendMaps uses the amount its expected to take, verbs have at most 2% of the tick to execute in before they are overtiming and thus delaying the start of the next tick. This is bad, and im 99% sure this is the majority of our overtime.

Take Click() for example. Click isnt listed as a verb but since its called as a result of client commands its executed at the end of the tick like other verbs. in this random 80 pop sybil round profile i had saved on my computer sybil 80 pop (2).txt /client/Click() has an overtime of only 1.8 seconds, which isnt that bad. however it has a self cpu of 2.5 seconds meaning 1.8/2.5 = 72% of its time is overtiming, and it also is calling 80.2 seconds worth of total cpu, which means that more than 57.7 seconds of overtime is attributed to just /client/Click() executing at the very end of a tick. the reason why this isnt obvious is just because the verbs themselves typically dont have high enough self cpu to get high enough on the rankings of overtiming procs to be noticed, all of their overtime is distributed among a ton of procs they call in the chain.

Since i cant guarantee the MC resumes at the very start of the next tick due to other sleeping procs almost always resuming first: I time the duration between clicks being queued up for the next tick and when theyre actually executed. if it exceeds 20 milliseconds of added latency (less than one tenth the average human reaction time) clicks will execute immediately instead of queuing, this should make instances where a player can notice the added latency a vanishingly small minority of cases. still, this should be tm'd

* Biddle Verbs: Queues the Most Expensive Verbs for the Next Tick if the Server Is Overloaded

Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
2022-07-31 22:03:59 +00:00
SkyratBot
2059833c0f [MIRROR] Adds timezones to US Thanksgiving so it doesn't pop early [MDB IGNORE] (#9723)
* Adds timezones to US Thanksgiving so it doesn't pop early (#63046)

* Adds timezones to US Thanksgiving so it doesn't pop early

Co-authored-by: cacogen <25089914+cacogen@users.noreply.github.com>
2021-11-26 07:12:48 -05:00
SkyratBot
f3f2a526e6 [MIRROR] Fixes improper calculation of days in round time (#7449)
* Adds parentheses to calculating days in round time (#60716)

* Fixes improper calculation of days in round time

Co-authored-by: Mokiros <Mokiros@yandex.ru>
2021-08-08 02:41:12 +01:00
SkyratBot
f691d59af0 During moth week, teleporter accidents make you Moths (#6997)
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
2021-07-19 16:29:44 +02:00
SkyratBot
64479930c9 [MIRROR] Fix the ms2ds define (#6789)
* Fix the ms2ds define (#60065)

1000ms * 0.10 = 100ds or 10 seconds.
1000ms * 0.01 = 10ds or 1 seconds

* Fix the ms2ds define

Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2021-07-08 03:41:39 +02:00
SkyratBot
cda689393e [MIRROR] PDAs now include round time (#6672)
* PDAs now include round time (#59957)

Part of my document on duplicating verb panel functionality so at some point in the far, far future we may be rid of it. you can read more here.

hackmd.io/tJ5H3opRQiG1GCN1sP142w

The other thing the status panel needs to do is send time dilation to the tgui chat. Having messed around with tgui chat, I am very confident i'm going to need stylemistake or mothblocks help me out with that one, it's so beyond my level it isn't even funny.

I know this is a VERY long description for a very small change but expect more of this in the future

* PDAs now include round time

Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
2021-07-03 22:23:07 +01:00
SkyratBot
78afb2bccf Adds configs to disable laggy hard deletes (#6559)
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2021-06-28 14:19:27 +01:00
SkyratBot
cd7896c3ec [MIRROR] Pride week + rainbow floor tiles (#5917)
* Pride week + rainbow floor tiles (#59250)

Adds pride week from June 23rd to the 29th, and makes the floor tiles rainbow.

* Pride week + rainbow floor tiles

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-05-25 03:41:44 +01:00
SkyratBot
58edc266cc [MIRROR] Makes holidays span all timezones by default (#5338)
* Makes holidays span all timezones by default

* Update holidays.dm

Co-authored-by: cacogen <25089914+cacogen@users.noreply.github.com>
Co-authored-by: Gandalf <jzo123@hotmail.com>
2021-05-01 13:31:29 +01:00
SkyratBot
b332b46b65 [MIRROR] Remove hideous inline tab indentation, and bans it in contributing guidelines (#3394)
* Remove hideous inline tab indentation, and bans it in contributing guidelines

* a

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Gandalf2k15 <jzo123@hotmail.com>
2021-02-15 15:32:02 +00:00
SkyratBot
1f2747497a [MIRROR] On monkey day, you can play as a monkey roundstart. (#2408)
* On monkey day, you can play as a monkey roundstart (#55838)

* On monkey day, you can play as a monkey roundstart.

* Update monkeys.dm

Co-authored-by: Qustinnus <Floydje123@hotmail.com>
Co-authored-by: Azarak <azarak10@gmail.com>
2020-12-31 23:49:22 +01:00
oranges
8fd624e5a6 Adds international garbage day, a day to respect janitors everywhere 2019-11-17 22:38:55 +00:00
kevinz000
9eec1f8db2 Adds move force and move resist, movement/pushing/pulling tweaks (#39556)
* Removes anchroed from mobs, adds move force/resist

* Move force and move resist

* WIP, still has debug messages.

* Fixes

* Update living.dm

* Anchored removal

* Stuff

* Unit tests

* Removes anchored from dview

* DME

* Update anchored_mobs.dm

* Fix

* No ghost spacewind

* Update mulebot.dm

* Update temporary_visual.dm

* Update forcefields.dm

* Update step_triggers.dm

* Update portals.dm

* Update alien_acid.dm

* Update bump_teleporter.dm

* Update landmarks.dm

* Update countdown.dm

* Update blessing.dm

* Update shieldgen.dm

* Update containment_field.dm

* Update field_generator.dm

* Update singularity.dm

* Update atmosmachinery.dm

* Update door.dm

* Update gravitygenerator.dm

* Update door.dm

* Update effects.dm

* Update temporary_visual.dm

* Update bump_teleporter.dm

* Update forcefields.dm

* Update landmarks.dm

* Update portals.dm

* Fixes

* Throwforce annnd done, finally

* Fixes

* Haha I'm dumb sometimes
2018-09-15 05:08:30 -04:00
kevinz000
8ebc63d2f2 Randomized Station Time + Night Shifts 2018-02-20 21:59:44 -08:00
Kyle Spier-Swenson
fdcf747e18 [ready]Timer queuing tweaks: binary sorted inserts and rolling buckets. (#33098)
* Timer queuing tweaks: binary sorted inserts and rolling buckets.

Client time timers now uses a binary search algorithm for its sorted inserts.

Processing now uses a binary sorted insert, rather then sorting it with sortTim during bucket_shifts.

Buckets now automatically wrap around rather then get regenerated every minute. (Rolling queue)

* Fixes some queue management bugs.

* Fixes a Order of Operations goof up in the ticks<->ds macros.

@ninjanomnom your pain is my success

* Remove debug line

* Fixes some binary insert bugs, fixes client time timers, moved id over to GUID

* Fixes initialization-time timers fucking everything up
2017-12-08 22:02:34 +01:00
MrStonedOne
c8bb13d7c2 In which the stoner one gets stoned and tries to address tick contention... again
Tick contention is when the mc, sleep()/spawns(), and byond internal processing fight each other for game tick time. Usually in an unproductive way that wastes cpu cycles and reduces the effective amount of game tick to go around.

Tweaked the anti-tick contention heuristics of the MC a touch.

Fixed an incorrect operator in the mc's anti-tick contention heuristics causing it to apply in times of no lag rather then times of lag.

The mc's anti-tick contention heuristics now plays better with the high pop processing mode.

We no longer reserve the tail end of a tick for the mc to have if the mc doesn't plan to run next tick because of high pop mode or anti-tick contention heuristics.

stoplag() can now be given an initial delay allowing it to act like a smarter sleep (in that it sleeps for longer if the server is overwhelmed.

All short sleeps that only existed for performance reason and had no game play, visual/audio, or balance reasons behind their timing were converted to stoplag().
2017-10-09 01:21:43 -07:00
Kyle Spier-Swenson
2f6df2a008 Garbage collection tweaks and refactors. (#30118)
* Garbage collection queuing rewriting

* Some Tweaks

* Fixes some queue tracking oddities

* More tweaks

* Remove the middle two queue steps. tis was a silly idea

* New logging.

We store logging datums for use in tracking the stats of shit qdeleted

Added logging for destroy time as well as hard delete time, per type. As well as a few others

* Fix compile for testing

* Does the cyberboss

* does the antur
2017-09-13 08:46:18 +02:00
Really-Good-Soda-Flavor
e48df5338c [READY] New holidays including Thanksgiving and Ramadan (#28054)
* New holidays and weekday helper

* Got rid of var/

* Added separate Thanksgivings and removed an indentation on Tuesday

* Makes Mother's Day less ambiguous.

* Adds Ramadan heck yea

* Gives Ramadan a fixer-upper so it is accurate for a good while
2017-06-23 16:24:28 -04:00