Jump to content

Show Me Your Papyrus Tweaks/Configurations


Rayblue

Recommended Posts

Posted

It seems that there's a bazillion tweaks for Papyrus, yet it's infuriating that some of them don't work for shit (what with some dickweeds who throw in ridiculously HUEG stack (iMaxAllocatedMemoryBytes) sizes, enough to kill a horse), and so I'm confused. So I wonder if you could show what your Papyrus settings look like (and if possible, explain if you're experiencing CTDs or buttery-smooth gameplay).

 

Here's mine (ain't sure if these are optimal):

fUpdateBudgetMS=800.0
fExtraTaskletBudgetMS=800.0 
fPostLoadUpdateTimeMS=2000.0 
iMinMemoryPageSize=256
iMaxMemoryPageSize=512
iMaxAllocatedMemoryBytes=2457600
bEnableLogging=1
bEnableTrace=1
bLoadDebugInformation=1

Took me a lot of time trying to find the correct settings.

Posted

Leave the logging disabled if you don't want to debug scripts or something, writing to your harddrive because of undisabled traces costs a lot of time.

 

My stable settings

fUpdateBudgetMS=800
fExtraTaskletBudgetMS=800
fPostLoadUpdateTimeMS=2000
iMinMemoryPageSize=2048
iMaxMemoryPageSize=4096
iMaxAllocatedMemoryBytes=2457600 
bEnableLogging=0
bEnableTrace=0
bLoadDebugInformation=0
bEnableProfiling=0

fUpdateBudgetMS is something that gets aborted any way if the script is taking less time than set, so why bother with high or low values, 800 is fne.

fExtraTaskletBudgetMS is something I try to minimize right now testing smaller values, to reduce script latency and maximizing fps.

iMinMemoryPageSize and iMaxMemoryPageSize is higher because of ENB I don't have to worry about the ram usage, so I try to reduce the time for repeatative memory allocation. I know that my ram will be trashed with unused memory but who cares.^^

iMaxAllocatedMemoryBytes SkyUI is nagging if I set it higher so I left it at this.

Posted

There is a guide to these values in my overall guide.

 

And yes, the value doesn't matter if the script takes less time but if you have a script that takes too long or doesn't run as it should then that means that script gets 0.8 seconds to run in the setup you two have. 0.8 seconds is a lot.

 

Actually, I shouldn't say that the value doesn't matter if the script finishes in less time - because the script SHOULDN'T take anywhere near these values or something is seriously badly coded and extending the times it can run will just be detrimental.

Posted

http://www.creationkit.com/INI_Settings_%28Papyrus%29

 

fUpdateBudgetMS It's only "the" main papyrus update loop time (the vm's control programm itself time) (like a main/centralized shedeuler on a multi core cpu with multiple sub shedeulers) (The script/programm that manages all other scripts). The VM gets x time to prepare function calls and stuff. It has nothing to do with what time a script gets or more correctly a tasklet gets (code that runs is broken down into tasklets) in the game thread (the thread that is actually run on the cpu).

A high value spares context switching time when running many scripts/threads with function calls and the vm itself can't prepare everything in time (it's not the time a script/tasklet gets to run) what it cant prepare gets prepared in the next time slice and so on.

A low value makes detecting if the vm itself is done sometimes obsolete because it gets aborted anyway.

 

In short:

High values less time lost in vm context switches, maybe more time lost when ready till ready detected.

(Script delay because of arrival time and long time between dispatching phases)

Low values maybe more time lost in vm context switches, less time lost because of vm already ready but doesn't get aborted.

(Script delay because of waiting of the timeslice when the function call will be dispatched and time for context switching)

 

You could write over 9000 in there and it wouldn't matter if the vm is done after 20 and ready detection is on 21.

 

If it takes 650 times more time than the entire vanilla game, then a script is broken (not even seriously badly coded it's broken) because it produces zombies with function calls and is spaming the vm with it. It will not stop with it at 800, even the next timeslices will be flooded, heap and stack will overflow, ram will run out, the game will crash. That will also happen on 1.2 or 0.6 or on 254124637.

 

---------------------------------------------------

 

The interessting stuff for the running script/tasklet itself is in fExtraTaskletBudgetMS, because that is processing time stealing. That is where tasklets can steal time from other tasklets or havok or other stuff. That is where a script/tasklet can take (normal timeslice + 0.8) sec in one game thread. And there stands nothing about that it doesn't matter from me. Finding a sane value differs from cpu, gpu and the modded game itself. But a time for a script to run is still the same it will take the needed processing time it's just the question over what time.

Posted

Actually, most of the items identified and explained on the link you had is incorrect.

 

How do we know this? We don't. Testing, however, has discerned some other interesting facts about this.

 

For instance - you write that it is the entire loop time. This is incorrect according to testing done. If that would have been the case then the base game with no mods would not have run on the Recommended hardware settings for the game, let alone on the Xbox 360 without issues.

 

As with many other things put out there by Betheseda devs. this has been proved to be incorrect. How do we know this? Again, through testing.

 

For example - if what you say is true then no matter how many scripts you throw at it the script engine would finish in X amount of time. Well, it doesn't. If you give it extra time then it will run the bad scripts for that amount of time and the only downfall you would have would be the inconsistent behaviour of scripts that didn't finish in the time allotted to them. The rest; would just lag behind.

 

The fact is that the Bethesda engine is most of an enigma and different settings will respond differently depending your mod setup and your hardware. This is why these settings that we speak of should be let alone unless they've been thoroughly tested to make a difference that isn't detrimental to how your game plays.

 

According to the devs. and theory it is very simple but in reality, it's more complex than that. Some of the beneficiaries you may have from tweaking these settings can't even be explained in a sufficient manner because we simply don't know the code that execute it.

Posted

Mysteries of the engine aside, I can say that Groovtama's settings were successful at allowing me to click on 'Continue' without crashing for the first time since April.

 

In fact, I was able to start up Skyrim and load a game without loading first a clean start game, three times in a row... something else I have not been able to do since April.

 

So.. thanks for the settings! 

 

I hope they hold in the coming days.

 

Edit: Nevermind.... crashes on load came back by themselves. That was apparently just a fluke.

Posted

Actually, most of the items identified and explained on the link you had is incorrect.

 

How do we know this? We don't. Testing, however, has discerned some other interesting facts about this.

That is a community wiki and if some would know that it is wrong it would be rewritten to be correct by the community itself.

 

 For instance - you write that it is the entire loop time. This is incorrect according to testing done. If that would have been the case then the base game with no mods would not have run on the Recommended hardware settings for the game, let alone on the Xbox 360 without issues.

 

As with many other things put out there by Betheseda devs. this has been proved to be incorrect. How do we know this? Again, through testing.

The main papyrus update loop is nothing other than the vm itself. Like with the java vm process that is running the java programm/applet (applet and tasklet getting the origin of it?). The java vm process itself takes process time on a cpu too. And it is not the ENTIRE time it is the time it can take for one slice. That is what I described and that's what stands on the wiki. What that has to do with running on XBOX360 or PC or on what hardware general no clue where you are getting to that. The run time needed doesn't shift, it is still the same amout of work.

 

A simple example

You are painting a picture in the kitchen and writting in your diary in your room.

You need 1 hour for the picture and 1 hour for the diary

You switch between the two activies every minute.

Resulting time needed is 2 hours + 60 times the time you need to get from the kitchen to your room and back

 

Now you do the same activies but you are taking 1 hour at a time for the picture and every minute you stop painting the picture.

Picture is done in one time slice, instantly you go to your room and write in the diary every minute, put the pencile down, take the pencile and start writing again

Resulting time needed is 2 hours + 1 time the time you need to get from the kitchen + 60 times taking the pencile and putting it down

 

Now you do the same activies but you are taking 2 hour at a time for the picture and every minute you stop painting the picture and stop for 1 minute because your sister needs the pencile also 1 hour when you need the pencile.

Picture is done in one time slice, after 1 hour and 5 min you think hey I have to paint a picture you go to your room and write in the diary every minute, put the pencile down, wait for your sister, take the pencile and start writing again

Resulting time needed is 2 hours + 5 min until you realize to write in the diary + 1 time the time you need to get from the kitchen + 60 times taking the pencile and putting it down + 60 times waiting for your sister.

 

Now you do the same activies but you are taking 2 hour at a time for the picture and every minute you stop painting the picture and stop for 1 minute because your sister needs the pencile also 1 hour when you need the pencile.

Picture is done in one time slice, after 1 hour and 5 min you think hey I have to paint a picture you go to your room and write in the diary every minute, put the pencile down, you want to be finished quickly and don't care for your sister, you steal the pencile from here and start writing again

Resulting time needed is 2 hours + 5 min until you realize to write in the diary + 1 time the time you need to get from the kitchen + 60 times taking the pencile and putting it down + 0 times waiting for your sister. But your sister will only be finished 1 hour later than you.

 

Work to be done is always the same, only extra time differs. And in the two last scenarios when your sister is finished.

 

For example - if what you say is true then no matter how many scripts you throw at it the script engine would finish in X amount of time. Well, it doesn't. If you give it extra time then it will run the bad scripts for that amount of time and the only downfall you would have would be the inconsistent behaviour of scripts that didn't finish in the time allotted to them. The rest; would just lag behind.

 

That thing is a simple queue that gets filled, closed, processed, filled, closed, processed, filled...., if a queue is empty/processed before the time slice ends it gets the processing control taken and it get switched to another process that needs to run. So why give it processing time if not need, also that is what stands on the wiki.The VM script engine itself runs all the time and is not terminated till you exit the game. It just when and how long it is in processing state and sleeping state. How you get to that conclusion with the script engine finishes or inconsistent behaviour no clue. Every OS works in such a way... 

 

What you describe is the second variable where processing time is stolen from other threads. That is the second variable and for god's sake that thing matters, where a tasklet can run for something else!

 

The fact is that the Bethesda engine is most of an enigma and different settings will respond differently depending your mod setup and your hardware. This is why these settings that we speak of should be let alone unless they've been thoroughly tested to make a difference that isn't detrimental to how your game plays.

 

According to the devs. and theory it is very simple but in reality, it's more complex than that. Some of the beneficiaries you may have from tweaking these settings can't even be explained in a sufficient manner because we simply don't know the code that execute it.

 

That is the setting for main  process time slice (http://en.wikipedia.org/wiki/Time_slice#Time_slice ) the function will not run differently, because only run time is changed. That thing will work and abort preemptivly with a high and a low value if it is finished before and will take over stuff to the next time slice with high or low value. just how often and how much is taken over differs that thing will run the same way internally.

 

The two values don't change how something is run only how long the main thing runs and how much time under stressy condictions a tasklet can take from something else. And depending how long or how much you set you have different side effects. It doesn't change the needed processing time of a script that wants to run, A script is a series of commands that are predefined and run the same way every time. If you have a bad script that takes a long time, it will take a long time. The side effects only determs extra time for waiting or switching between more than one tasklets. These side effect determ the overall script latency later.

 

High values reduces waiting time if position in preparation is bad, but may make more stuff ready to be processed at the time the loop is finished/preemptived, at the same time more stuff of a single thing can be prepared and processed until new stuff comes in long run stuff doesn't need to fight for processing time.

Low values reduces waiting time if position in preparation is good, but may make less stuff ready to be processed at the time the loop is finished/preemptived, at the same time more new stuff from multiple stuff can come in quicker so long running stuff will have to fight harder to get stuff done.

 

There is no value too high here! Only too low, because a too low value will results in resources not used. Because there is something to use them for. That is much worser for a real time programm. That is why the 800 don't matter really same as 1.2, it was set too high from the start...

 

I can't break it down more with words. If I want to break it down more I would need pictures. That is stuff that is made by human and can be understand by humans it's not some magical black box from the sky. The behaviour you are describing can be completly described with time slices time for the main process.

 

Sorry for the long answer and the mistakes in my writing but it's late already.

 

 

Mysteries of the engine aside, I can say that Groovtama's settings were successful at allowing me to click on 'Continue' without crashing for the first time since April.

 

In fact, I was able to start up Skyrim and load a game without loading first a clean start game, three times in a row... something else I have not been able to do since April.

 

So.. thanks for the settings! 

 

I hope they hold in the coming days.

 

Edit: Nevermind.... crashes on load came back by themselves. That was apparently just a fluke.

 

Load CTDs can have many other reasons which are not releated to these setting and that's only a small part of my ini file. Even only a small part of my whole settings itself.

 

Posted

The thing is, since there seem to be no concise modder guidelines on how much stack space and timeslice is needed per script, or how many scripts should be running at the same time, it's no wonder we have to tweak the settings on our own, making blind guesses and by trial and error.

  • 5 months later...
Posted

I have over 230 esp/esm mods installed, more hd textures for all, on Radeon hd 7970, i7 cpu, 16GB of Ram 1600mhz Corsair Dominator (low-latency)

Wath is thg Best Papyrus setting for have the best performnace (more fps with ENB) and stability..? :-/

Posted

For Frostfall there are three setups you may try to use:

This problem can occur if your scripting system is being overstressed in the presence of several script-intensive (or inefficient) mods, or because your Papyrus section of your Skyrim.ini file has been modified with a set of non-default values that can cause issues. It can also be due to the speed of your CPU. You can try making the following adjustment to your Skyrim.ini file. If a line below is not present in your INI file, you can safely add it.

First, try using the default settings, if they have been somehow changed.
 
[Papyrus] 
fUpdateBudgetMS=1.2
fExtraTaskletBudgetMS=1.2
fPostLoadUpdateTimeMS=500.0
iMinMemoryPageSize=128 
iMaxMemoryPageSize=512
iMaxAllocatedMemoryBytes=76800

In order to increase the amount of CPU time and memory given to the script system, you can try the following. This may increase performance.

[Papyrus] 
fUpdateBudgetMS=800.0
fExtraTaskletBudgetMS=800.0 
fPostLoadUpdateTimeMS=2000.0 
iMinMemoryPageSize=256
iMaxMemoryPageSize=512
iMaxAllocatedMemoryBytes=153600

If that does not seem to fix the problem, you can try this as well. This is mostly a default configuration, with extra time given to the Update Budget values.

[Papyrus] 
fUpdateBudgetMS=20.0
fExtraTaskletBudgetMS=20.0
fPostLoadUpdateTimeMS=500.0
iMinMemoryPageSize=128
iMaxMemoryPageSize=512
iMaxAllocatedMemoryBytes=76800

Please try adding these settings to your Skyrim.ini file, as this seems to have helped more than one user with this problem.

Personally, I use only a few scripted mods only if they're very useful in gameplay. In addition, using SSME somewhat helped reduce or even eliminate CTDs as it provided more memory for the game engine.

 

https://sites.google.com/site/skyrimsurvivorseries/frostfall/troubleshooting

 

 

Archived

This topic is now archived and is closed to further replies.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...