The sense and nonsense of FPS


I’m always wondering the arguments on a forum  when posters are talking about frame rates. They argue about what ‘frame rate’ means, what is a good or bad frame rate or how high a frame rate must be. This is a “long winded” story, so take your time to read and to understand what it’s all about FPS.
So let’s get back to the basics of which most of them can be found in a Wiki.

Frame rate (also known as frame frequency) is the frequency (rate) at which an imaging device produces unique consecutive images called frames. The term applies equally well to computer graphics, video cameras, film cameras, and motion capture systems. Frame rate is most often expressed in frames per second (FPS), and is also expressed in progressive scan monitors as hertz (Hz). (Remember terms like 1080p or 50i, where “p” stands for progressive an  the “i” stands for interlaced).

The human eye and its brain interface, the human visual system, can process 10 to 12 separate images per second, perceiving them individually. The visual cortex holds onto one image for about one-fifteenth of a second, so if another image is received during that period an illusion of continuity is created, allowing a sequence of still images to give the impression of smooth motion.

Frame rate is also a term used in real-time computing. In a fashion somewhat comparable to the moving-picture definition presented above, a real-time frame is the time it takes to complete a full round of the system’s processing tasks. If the frame rate of a real-time system is 60 hertz, the system re-evaluates all necessary inputs and updates the necessary outputs 60 times per second under all circumstances.

The designed frame rates of real-time systems vary depending on the equipment. For a real-time system that is steering an oil tanker, a frame rate of 1 FPS may be sufficient, while a rate of even 100 FPS may not be adequate for steering a guided missile.

The designer must choose a frame rate appropriate to the application’s requirements. It all depends of speed of the moving objects.

Frame rates in video games refer to the speed at which the image is refreshed (typically in frames per second, or FPS). Many underlying processes, such as collision detection and network processing, run at different or inconsistent frequencies or in different physical components of a computer.

FPS affect the experience in two ways:

  • low FPS does not give the illusion of motion effectively and affects the user’s capacity to interact with the game, while
  • FPS that vary substantially from one second to the next, depending on computational load, produce uneven, “choppy” animation.

Many video processing programs lock their frame rate at lower, but more sustainable levels to give consistently smooth motion.
This is the main reason that in FSX (which is not a game but a simulation process) one should use a FPS limiter or when you don’t, set the slider to 30 fps. Remember that the sliders in FSX are limiters (!) and are not settings.

A culture of competition has arisen among FSX enthusiasts with regard to frame rates, with players striving to obtain the highest FPS possible, due to their utility in demonstrating a system’s power and efficiency. Indeed, many benchmarks released by the marketing departments of hardware manufacturers and published in hardware reviews focus on the FPS measurement. Even though, the typical LCD monitors of today are locked at 60 FPS, making extremely high frame rates impossible to see in real time.

May be this requires some clarification: the refresh rate of a TFT screen is set to e.g. 60 Hz

The refresh rate (most commonly the “vertical refresh rate”) is the number of times in a second that a display hardware draws the data.  Which means that all the pixels in a TFT will be refreshed in one time (in 1/60 of a second) whatever the content of the pixels is.

The distinct from the measure of frame rate and refresh rate is that the refresh rate includes the repeated drawing of identical frames, while frame rate measures how often a video source can feed an entire frame of new data to a display.

Imagine that the refresh rate is in sync with the number of times the video content is changed, you would have 60 different images in a second. Every frame another image, 60 frames in a second. What would you see in real?

Since the human visual system can process 10 to 12 separate images per second, perceiving them individually and the visual cortex holds onto one image for about one-fifteenth of a second (= 4/60), you will only observe 15 images, and hopefully in smooth motion if the image moves. This implicates that a negative influence of the presented video data to the screen is only observed when the refresh rate drops lower than 15 fps.

And now the test: with the help of this website
Frames per second http://frames-per-second.appspot.com/

When you get there, first disable all the balls and set the Asset to Autum2, set the Frames per second to 5 fps, the Motion blur to None and the Velocity to zero px/s. Observe the image.
Your home situation is that the refresh rate of your display  is 60Hz and get a stable picture to process which changes by 5 frames/sec. Now set the Frames per second to 60 fps. Do you see the difference?
No, the image is not moving and the refresh rate is still 60 Hz. Even if you increase the Frames per second higher than 60 Hz, you won’t see the difference.

Now return the Frames per second to 5 fps and set the Velocity to move the picture 50 px/s, 100 px/s etc. The only thing that changes is the staggered movement of the image. Set the FPS  to 25 fps and look again. The Motion blur is still set to None.The image is moving without any blur on screen.

Next: introduce some Motion blur and notice that with Realistic Motion blur there is hardly need to increase the FPS of the picture. The more “blur” is introduced, the more the leaves of the trees get defocussing. Try to improve the situation while increasing the FPS. The faster the image moves (change the velocity) the more FPS you need to get a sharp picture and get rid of the blurries. Is your graphic card able to do so?

OK, now for FSX: normally the scenery is moving and the aircraft is somewhere fixed in a view. Take 2 soccer balls (the aircraft) and set the one ball to fps 5 and the other to 60 fps. (Asset is fixed to velocity zero; Asset FPS  is 5). What do you see?

Change the movement of the Asset to 100 px/s and introduce a Realistic Motion blur; increase step by step the FPS of the Autumn2 scenery. Somewhere at 25 fps the scenery will become acceptable. What ’s the conclusion? The fps of the soccer balls (the aircraft) does not have any effect on the (moving) scenery. However, the quality of the presented images is (1) dependable of the manufacturer of the ball image (say aircraft) and (2) the performance of the moving images (scenery) is dependable of the ability of your system components.

By limiting the frame rate, (= the speed at which the total image is refreshed) you limit the number of cycles of your processor to execute this action. You don’t limit the graphics processes on the video card. The rest of the available cycles of your workhorse will be available for graphic processes.Message 1: buy Aircraft and Sceneries from nominated producers (Carenado, PMDG, F1, ORBX) to get the best quality of images. After all the performance is all up to your machine.

Message 2: don’t spoil CPU resources to get a maximum of frame rates; simulation flying is all about looking to a smooth picture; set the Target frame rate slider in FSX>Options>Settigs>Display @ 30 fps.
Read more how to fresh up your fsx.cfg in this post.

Message 3: when using 2 graphic cards (with 4 displays), the frame rate is divided by the number of exposed panes as long as generated by FSX!

 

Resources used: Wikipedia

Tweaking FSX.CFG


There are 2 primary influences on a smooth presentation of sceneries:
1. How much you want the program writes on screen
2. How capable the machine is in getting data from the hard disk and put it into the rendering machine.

The purpose of tweaking fsx.cfg is to minimize influences that have a negative impact on the frame rate. Nothing more, nothing less!

The file fsx.cfg is located in:
Windows XP:
C:Documents and SettingsYourNameApplication DataMicrosoftFSX
or when you are using
Windows 7/8:
C:UsersYourNameAppDataRoamingMicrosoftFSX

Before making any changes, backup your original file and read this article first.
Tweak 1: Jobscheduler
(for all single- dual- and multi core machines)

[JOBSCHEDULER]
AffinityMask=0 //for single core machines
AffinityMask=3   //for dual core machines
AffinityMask=7   //for triple core machines
AffinityMask=15 //for multi core machines
Select one of the lines which is appropriate for your machine.

Tweak 2a: Settings – Display – Graphics

Remind that all sliders are limiters and NOT to be a predefined setting!

Global Texture Resolution: has little to no impact on frame rate;
Lens flare has little impact on frame rate (box Checked);
Light bloom is a killer for frame rate, so unchecked the box;
Advanced Animations has a high impact on frame rate; Advanced animations controls the drawing of people, animals, etc.
Some aircrafts (PMDG-Aerosoft) require Advanced Animations to be checked, otherwise the fuselage is not drawn properly;
Filtering & Anti Aliasing: AA smooths fagged lines; filtering improves crispness of textures; recommended AA check-box= unchecked;
Filtering = trilinear; use windows control panel to set the graphic card;

Tweak 2b: Settings – Display – Scenery
Scenery objects controls the number of trees and buildings in a cell (1 cell= 1 km x 1 km); The guys from ACES tell us that 50 x 1 km square cell/ frame is max number of trees per cell= 4500: setting slider to max= 250000 trees; recommended 1000 trees and 800 buildings…which makes the following statement for the fsx.cfg file:
[Terrain]
Terrain_Max_Autogen_Trees_per_Cell=1000
Terrain_Max_Autogen_Buildings_per_Cell=800
Set slider in mid position and check;
Terrain and water:
Level of detail radius is the size of the circle that the Sim fills with detail: a smaller circle results in less calculation; recommended setting is medium to small;
Mesh Complexity is the world underneath;
Mesh resolution is the size of the triangles that are drawn; recommended settings is medium;
Texture resolution: the smaller the value, the finer the level of variation; add/change to fsx.cfg the following:
[DISPLAY]
Texture_Bandwidth_Mult=n
n=30 ./, 40 for single and dual core and n=70./.90 for quad core processor machines
This value equals the target frame rate for calculating how much texture data to load into the graphic card each frame;
Set the maximum value just under the fps as required in the game; FPS=30 than TBM=25; the minimum value is 10;

Some other handsome tweaks that disable screen notification:
[DISPLAY]
InfoBrakesEnable=False
InfoParkingBrakesEnable=False
InfoPauseEnable=False
InfoSlewEnable=False
InfoStallEnable=False
InfoOverspeedEnable=False

Add also to fsx.cfg:
[BUFFERPOOLS]
PoolSize=8000000
//@FSX SP1 value =4000000
//@FSX 1st Release value =1000000

The BUFFERPOOL value reserves the amount of memory for generating landscape mesh; setting this argument too high, than is the memory not functional; setting this value too low than the disk is taking over this function (page filing) with as a consequence a stuttering frame rate;

And now a difficult one… read twice to understand:
Fiber Frame Time Fraction
(for single processor machines only!)
This argument is placed in the [MAIN] section of fsx.cfg;

[MAIN]
Fiber_Frame_Time_Fraction=0.33

Tasks that the processor executes, are called threads;
Threads are given priority by the operating system;
Fibers are using time slots and are generated by FSX to figure out detail;
When the Fiber Time Slots are too narrow to complete the task, you end up with blurries in the terrain;
FFTF defines the maximum amount of time per frame that the fiber tasks will be run on the primary thread; The sim times how long it takes to run the simulation and then renders it to the graphics card. This time multiplied by the FFTF value, gives the total time dedicated to the fiber.

If the value is too high, than the fibers get pre-empted by other subsequent threads and thus is unable to do the work and therefore is missing frames;
If the value is too low,than the fiber has too less time to do the work before the next thread takes over.

Reduce FFTF value to 0,2 or 0,1 and check the result; view out of the window, look at stability of the frame rate; when the value is too high you get fluctuation of frame rate, when the value is too low you see a ton of blurries…

ADJUSTING AUTOGEN DETAIL LEVEL:
search in your fsx.cfg the following statement and change if applicable.

[MAIN]
PERFBUCKET=n
Default value is 6. Recommended value is 4. Max. 7

AFFINITY: What it is and how to configure


affinityIn Microsoft® Windows NT® 4.0 and Windows® 2000, an activity (thread) in a process can migrate from processor to processor, with each migration reloading the processor cache. Under heavy system loads, specifying which processor should run a specific thread can improve performance by reducing the number of times the processor cache is reloaded. The association between a processor and a thread is called processor affinity.

Use the affinity mask option to increase performance on symmetric multiprocessor (SMP) systems (with more than four microprocessors) operating under heavy load. You can associate a thread with a specific processor and specify which processors Microsoft SQL Server™ will use. You can exclude SQL Server activity from processors given specific workload assignments by the Windows NT 4.0 or Windows 2000 operating system.

If you set a bit representing a processor to 1, that processor is selected for thread assignment. When you set affinity mask to 0 (the default), the Windows NT 4.0 or Windows 2000 scheduling algorithms set the thread’s affinity. When you set affinity mask to any nonzero value, SQL Server affinity interprets the value as a bit mask that specifies those processors eligible for selection. Excluding SQL Server threads from running on particular processors helps evaluate the system’s handling of processes specific to Windows NT 4.0 or Windows 2000. For example, you can use affinity mask to evaluate whether an additional network interface card (NIC) increases performance or assess NIC performance with increasing loads.

Because using SQL Server processor affinity is a specialized operation, it is recommended that SQL Server processor affinity be used only when necessary. In most cases, the Windows NT 4.0 or Windows 2000 default affinity provides the best performance.

Before you change the setting of affinity mask, keep in mind that Windows NT 4.0 assigns deferred process call (DPC) activity associated with NICs to the highest numbered processor in the system. In systems with more than one installed and active NIC, each additional card’s activity is assigned to the next highest numbered processor. For example, an eight-processor system with two NICs has DPCs for each NIC assigned to processor 7 and to processor 6.

Note  You can use System Monitor (Performance Monitor in Windows NT 4.0) to view and analyze individual processor usage.

For example, if processors 1, 2, and 5 are selected as available with bits 1, 2, and 5 set to 1 and bits 0, 3, 4, 6, and 7 set to 0, a hexadecimal value of 0x26 or the decimal equivalent of 38 is specified. Number the bits from the right to left. The rightmost bit is bit 0. Set bits 1, 2, and 5 (the third, fifth, and sixth bits) to 1. The number calculated from setting the specified bits is binary 00100110, which is decimal 38 or hexadecimal 0x26.

These are affinity mask values for an eight-processor system.

Decimal value Binary bit mask Allow SQL Server threads on processors
1 00000001 0
3 00000011 0 and 1
7 00000111 0, 1, and 2
15 00001111 0, 1, 2, and 3
31 00011111 0, 1, 2, 3, and 4
63 00111111 0, 1, 2, 3, 4, and 5
127 01111111 0, 1, 2, 3, 4, 5, and 6 (isolates SQL Server activity from DPC processor only)

affinity mask is an advanced option. If you are using the sp_configure system stored procedure to change the setting, you can change affinity mask only when show advanced options is set to 1. The setting takes effect after stopping and restarting the server.

Source:
http://msdn.microsoft.com/en-us/library/aa196717%28SQL.80%29.aspx

Now in practice:

Start FSX, Pres CTRL+ALT+DEL and select StartTaskmanager, on the Performance tab select Resource Monitor…then

on the Resorce Monitor page select, just below CPU, the fsx.exe checkbox. Select the CPU tab and watch the CPU’s.

Add to the fsx.cfg:
[JOBSCHEDULER]
AffinityMask=84

Translated from decimal 84 to BINAIR this is 0 1 0 1 0 1 0 0
The number of the processor is      
7    6    5    4    3    2    1    0
Read from the right to the left  

CPU7 CPU6 CPU5 CPU4 CPU3 CPU2 CPU1 CPU0

Look on the image: if you want to activate an unused processor,
use affinity mask value

EG, to activate processor 5 the value code 01110100
and translated to binair this becomes 116
REMINDER: since you have at least 1 NIC on board,
NEVER activate CPU7 (the last one in an 8 core proc.)



affinityIn Windows kan een activiteit (thread) in een proces migreren van processor tot processor; na elke migratie begint het proces met het herladen van de processor cache. Onder zware belasting van het systeem, kan met vermelding van welke processor, een specifieke thread de systeemprestaties verbeteren, door vermindering van het aantal keren dat de processor cache opnieuw wordt geladen. De associatie tussen een processor en een thread heet processor affiniteit.

Gebruik de instelmogelijkheid van het affiniteit masker (affinity mask) om de prestaties op symmetrische multiprocessor (SMP) systemen (met meer dan vier microprocessors), die onder zware belasting werken, te verhogen. Je kunt een thread verbinden met een specifieke processor en specificeert daarmee welke processor Windows zal gebruiken. Je kan ook een activiteit met een specifieke opdracht door het besturingssysteem van de processors uitsluiten.

Als je een bit die een processor vertegenwoordigd op 1 zet, is die processor geselecteerd  voor een thread opdracht. Wanneer het affiniteit masker ingesteld is op 0 (de standaardinstelling), zal Windows het timing algoritme van de thread affiniteit zelf bepalen. Wanneer je het affiniteit masker instelt op een waarde anders dan nul, interpreteert de Windows de waarde van de affiniteit als waarde uit een bit-masker, zodat de verwerkende processen in aanmerking komen voor een gespecificeerde selectie van processoren. Het uitsluiten van threads die worden uitgevoerd op bepaalde processors, helpt bij het bepalen van de systeem afhandeling van processen die specifiek zijn voor Windows.

Bijvoorbeeld: je kan gebruik maken van het affiniteit masker om na te gaan of een extra programma als FSX de prestaties verhoogt of beoordelen of er toenemende belastingen van de processoren wordt waargenomen. Omdat het gebruik van de processor affiniteit instellingen een gespecialiseerd taak is, is het raadzaam dat deze affiniteit alleen te wijzigen wanneer dat nodig is. In de meeste gevallen biedt de Windows als standaard affiniteit de beste prestaties. Denk er aan dat, voordat je de instelling van affiniteit masker wijzigt, Windows een uitgestelde proces call activiteit (DPC= deferred process call) in verband met netwerkkaarten aan de hoogste genummerde processor in het systeem toekent. In systemen met meer dan een geïnstalleerde en actieve NIC (network interface card), is van elke extra kaart de activiteit toegewezen aan de volgende hoogste genummerde processor. Bijvoorbeeld bij een acht-processor-systeem met twee NIC’s hebben de DPC’s voor elke NIC een threadtoegekend aan de processor 7 en processor 6. Je moet dus FSX NOOIT toekennen aan de hoogst genummerde processor.

Opmerking: je kan de System Monitor (Performance Monitor in Windows) gebruiken om het individuele processor gebruik te bekijken en te analyseren.

Bijvoorbeeld: als de processoren 1, 2 en 5 zijn geselecteerd en dus beschikbaar zijn met bits 1, 2 en 5 op 1 gezet
en de bits 0, 3, 4, 6 en 7 op 0,
krijg je een hexadecimale waarde van 0×26 of de decimale equivalent van 38.

Nummer de bits van rechts naar links. De meest rechtse bit is bit 0. Set bits 1, 2 en 5 (de derde, vijfde en zesde bits) op 1.

Het aantal berekend op basis van het instellen van de opgegeven bits is binair 00100110, dat is 38 decimaal of hexadecimaal 0×26.

Voeg dit statement toe aan de fsx.cfg:
[JOBSCHEDULER]
AffinityMask=84

Met een vertaling van decimaal 84 naar BINAIR is dit  0 1 0 1 0 1 0 0
Het nummer van de processor dat daarbij hoort is
                           7    6    5    4    3    2    1    0
Je leest van rechts
naar links
                          CPU7 CPU6 CPU5 CPU4 CPU3 CPU2 CPU1 CPU0

KIJK OP HET PLAATJE
Wil je een ongebruikte processor inschakelen,
dan doe je dat door middel van het wijzigen van de Affinity Mask
waarde.
Wil je processor 5 inschakelen dan wordt de code 01110100
en vertaald naar binair is dit 116

Dit zijn affiniteit masker waarden voor een acht-processor systeem.

Decimal value Binary bit mask Allow SQL Server threads on processors
1 00 00 00 01 0
3 00 00 00 11 0 and 1
7 00 00 01 11 0, 1, and 2
15 00 00 11 11 0, 1, 2, and 3 (max. dual core)
31 00 01 11 11 0, 1, 2, 3, and 4
63 00 11 11 11 0, 1, 2, 3, 4, and 5
127 01 11 11 11 0, 1, 2, 3, 4, 5, and 6 (isolates SQL Server activity from DPC processor only)

affiniteit masker is een geavanceerde optie. Als je gebruik maakt van de opgeslagen sp_configure system procedure om de instelling te wijzigen, kan je het affiniteit masker alleen wijzigen als de geavanceerde opties zijn ingesteld op 1.
De instelling wordt van kracht na het stoppen en opnieuw starten van de server.

Bron:
http://msdn.microsoft.com/en-us/library/aa196717%28SQL.80%29.aspx

Performance is slower than expected.


When you play Microsoft Flight Simulator X, your system performance may be slower than expected.

Flight Simulator X automatically detects and sets the program to the performance options that suit your computer. If you manually change the settings to higher settings, you may experience performance and display problems. To avoid such problems, avoid manually changing the settings. Let the game determine what settings to best fit your computer.

Read this advice