- Windows Server will force you to enter a complex password which we will remove in a few steps later
If you are configuring Windows 11, press Shift+F10
to open CMD and execute the following command oobe\BypassNRO.cmd
. This will allow us to continue without an internet connection demonstrated in the video examples below.
Use the commands below to activate Windows using your license key if you do not have one linked to your HWID. Ensure that the activation process was successful by verifying the activation status in computer properties. Open CMD as administrator and enter the commands below.
slmgr /ipk <license key>
slmgr /ato
Disable features on the taskbar, unpin shortcuts and tiles from the taskbar and start menu.
-
Open CMD as administrator and enter the commands below
-
Disable fast startup. Must be disabled before booting into Linux to avoid file system errors
powercfg /hibernate off
-
Set the maximum password age to never expire
net accounts /maxpwage:unlimited
-
Clean the WinSxS folder
DISM /Online /Cleanup-Image /StartComponentCleanup /ResetBase
-
Disable reserved storage (Windows 10 1903+)
DISM /Online /Set-ReservedStorageState /State:Disabled
-
Set PowerShell execution policy to unrestricted
PowerShell Set-ExecutionPolicy Unrestricted
-
-
Disable all messages in
System and Security -> Action Center -> Change Action Center settings -> Change Security and Maintenance settings
by typingcontrol
inWin+R
- This section is named
Security and Maintenance
on Windows 10+
- This section is named
-
Configure the following by typing
sysdm.cpl
inWin+R
:-
Advanced -> Performance -> Settings
- configureAdjust for best performance
and preferably disable the paging file for all drives to avoid unnecessary I/O -
System Protection
- disable and delete system restore points. It has been proven to be very unreliable -
Remote
- disable remote assistance and remote desktop
-
-
Allow users full control of the
C:\
directory to resolve xperf etl processing- See media/full-control-example.png, continue and ignore errors
-
Windows 8+ Only:
-
Disable the following by pressing
Win+I
:-
Everything in
System -> Notifications and actions
-
All permissions in
Privacy
Allow microphone access if desired
-
-
-
Windows Server Only:
-
In Server Manager, navigate to
Manage -> Server Manager Properties
and enable the option to prevent Server Manager from starting automatically -
Set the
Windows Audio
andWindows Audio Endpoint Builder
services startup type to automatic by typingservices.msc
inWin+R
-
Navigate to
Computer Configuration -> Windows Settings -> Security Settings -> Account Policies -> Password Policy
by typinggpedit.msc
inWin+R
and disablePassword must meet complexity requirements
- Open CMD as administrator and type
gpupdate /force
to apply the changes immediately
- Open CMD as administrator and type
-
Navigate to
Computer Configuration -> Administrative Templates -> System
by typinggpedit.msc
inWin+R
and disableDisplay Shutdown Event Tracker
to disable the shutdown prompt -
To remove the user password, navigate to
User Accounts
by typingcontrol
inWin+R
then enter your current password and leave the new/confirm password fields blank
-
-
Open CMD as administrator and enter the commands below to remove the chromium version of Microsoft Edge (if present) and OneDrive
-
Remove Microsoft Edge
if exist "C:\Program Files (x86)\Microsoft\Edge\Application" (for /f "delims=" %a in ('where /r "C:\Program Files (x86)\Microsoft\Edge\Application" *setup.exe*') do ("%a" --uninstall --system-level --verbose-logging --force-uninstall))
-
Remove OneDrive
for %a in ("SysWOW64" "System32") do (if exist "%windir%\%~a\OneDriveSetup.exe" ("%windir%\%~a\OneDriveSetup.exe" /uninstall))
-
-
Although nothing should appear, as a precautionary measure check and uninstall any bloatware that exists by typing
appwiz.cpl
inWin+R
-
Disable everything except for the following by typing
OptionalFeatures
inWin+R
. On Windows Server, this has to be accessed via the Server Manager dashboard by navigating toManage -> Remove Roles and Features
(top right)-
See media/windows-server-features-example.png
- To enable Wi-Fi, navigate to
Manage -> Add Roles and Features
(top right) and enableWireless LAN Service
- To enable Wi-Fi, navigate to
-
Windows 10+ Only:
-
Windows 10:
-
Uninstall bloatware in
Apps -> Apps and Features
by pressingWin+I
-
In the
Optional features
section, uninstall everything apart fromMicrosoft Paint
,Notepad
andWordPad
if applicable (these do not exist in earlier Windows 10 versions)
-
-
Windows 11:
-
Uninstall bloatware in
Apps -> Installed apps
by pressingWin+I
-
In the
Apps -> Optional features
section, uninstall everything apart fromWMIC
,Notepad (system)
andWordPad
-
-
-
Restart your PC once to apply the changes above (do not boot into Linux without a full restart beforehand)
As mentioned previously, the instructions below are specific to Linux Mint. If you are using another distro, interpret the steps below and follow along accordingly.
-
Boot into Ventoy on your USB in BIOS and select the Linux ISO
-
Open file explorer which is pinned to the taskbar and navigate to the volume Windows is installed on. You can identify this by finding the volume that has the
win-debloat.sh
script in -
Right-click an empty space and select
Open in Terminal
to open a terminal window in the current directory. Use the command below to run the scriptsudo bash win-debloat.sh
-
Once finished, use the command below to reboot
reboot
Open PowerShell as administrator and enter the command below. To launch with administrator privileges, type PowerShell
in Win+R
then simultaneously press Ctrl+Shift+Enter
C:\bin\scripts\disable-scheduled-tasks.ps1
Open PowerShell as administrator and enter the command below. Replace <option>
with the Windows version you are configuring (e.g. 7, 8, 10, 11).
C:\bin\scripts\apply-registry.ps1 -winver <option>
-
Ensure that the script prints a "successfully applied" message to the console, if it has not then PowerShell was probably not opened with administrator privileges and the registry files were not successfully merged
-
Restart your PC through
Ctrl+Alt+Delete
. After and only after a restart, you can establish an internet connection as the Windows update policies will take effect
Go through the C:\bin\preference
folder to configure common user settings.
-
Avoid installing chipset drivers
-
GPU drivers will be installed in a later step so do not install them at this stage
-
You can find drivers by searching for drivers that are compatible with your device HWID. See media/device-hwid-example.png in regard to finding your HWID in device manager for a given device
-
Try to obtain the driver in its INF form so that it can be installed in device manager as executable installers usually install other bloatware along with the driver itself. Most of the time, you can extract the installer's executable with 7-Zip to obtain the driver
-
I would recommend updating and installing following:
-
Since we do not have browser access at this stage, download them on another operating system or PC
Configure a Web Browser
A standard Firefox installation is recommended. Open PowerShell and enter the command below.
C:\bin\scripts\install-firefox.ps1
- On Firefox, after configuring extensions, I usually customize/cleanup the interface further in
Menu Settings -> More tools -> Customize toolbar
then skim throughabout:preferences
. The Arkenfox user.js can also be imported, see the wiki
Download and install the Visual C++ redistributable runtimes.
Download and install the .NET 4.8 runtimes.
-
Disable Spectre and Meltdown with InSpectre
-
AMD is unaffected by Meltdown and apparently performs better with Spectre enabled
-
A minority of anticheats (FACEIT) require Meltdown to be enabled
-
-
Open CMD with
C:\bin\NSudo.exe
and enter the commands below to remove the CPU microcode updatesdel /f /q C:\Windows\System32\mcupdate_GenuineIntel.dll
del /f /q C:\Windows\System32\mcupdate_AuthenticAMD.dll
-
Reboot and use InSpectre and CPU-Z's validation feature to check the status after a reboot
Download and install 7-Zip. Open C:\Program Files\7-Zip\7zFM.exe
then navigate Tools -> Options
and associate 7-Zip with all file extensions by clicking the +
button. You may need to click it twice to override existing associated extensions.
Download and install the DirectX runtimes.
If you usually use MSI Afterburner to configure the clock/memory frequency, fan speed and other settings, download and install it.
-
Disable update checks in settings
-
I would recommend configuring a static fan speed as using the fan curve feature requires the program to run continually
-
To automatically load profile 1 (as an example) and exit, type
shell:startup
inWin+R
then create a shortcut with a target of"C:\Program Files (x86)\MSI Afterburner\MSIAfterburner.exe" /Profile1 /Q
If you usually use Custom Resolution Utility to configure display resolutions, download and extract it.
-
See How to set up Display Scaling, works with all games | KajzerD
-
Use the exact timing for an integer refresh rate
-
Try to delete every resolution and the other bloatware (audio blocks) apart from your native resolution, this may be a workaround for the 1-second black screen when alt-tabbing in exclusive fullscreen, feel free to skip this step if you are not comfortable risking a black screen
-
Restart your PC instead of using
restart64.exe
as it may result in a black screen -
Ensure your resolution is configured properly in Display Adapter Settings
-
Download and install Open-Shell. Only install the
Open-Shell Menu
-
Settings I personally use as per section:
-
Skin
-
Midnight
-
Show user picture - Disable
-
Transparency level - Opaque
-
-
Main Menu
-
Show recent or frequent programs - Don't show
-
Enable hybrid shutdown - Disable
-
-
General Behavior
- Check for Windows updates on shutdown - Disable
-
-
Windows 8 Only:
- Open
"C:\Program Files\Open-Shell\Start Menu Settings.lnk"
, enableShow all settings
then navigate to the Windows 8 Settings section and setDisable active corners
toAll
- Open
Open CMD and enter the commands below.
-
Set active power scheme to High performance
powercfg /setactive 8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c
-
Remove the Balanced power scheme
powercfg /delete 381b4222-f694-41f0-9685-ff5bb260df2e
-
Remove the Power Saver power scheme
powercfg /delete a1841308-3541-4fab-bc81-f71556f20b4a
-
USB 3 Link Power Management - Off
powercfg /setacvalueindex scheme_current 2a737441-1930-4402-8d77-b2bebba308a3 d4e98f31-5ffe-4ce1-be31-1b38b384c009 0
-
USB Selective Suspend - Disabled
powercfg /setacvalueindex scheme_current 2a737441-1930-4402-8d77-b2bebba308a3 48e6b7a6-50f5-4782-a5d4-53bb8f07e226 0
-
Turn off display after - 0 minutes
powercfg /setacvalueindex scheme_current 7516b95f-f776-4464-8c53-06167f40cc99 3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e 0
-
Set the active scheme as the current scheme
powercfg /setactive scheme_current
Open CMD and enter the commands below.
-
Disable the boot manager timeout when dual booting (does not affect single boot times)
bcdedit /timeout 0
-
Data Execution Prevention is set to
Turn on for essential Windows programs and services only
by default. However, DEP can be completely disabled with the command below but a minority of anticheats require DEP to be left on the default setting. Do not change if unsurebcdedit /set nx AlwaysOff
-
Configure the operating system name, I usually name it to whatever Windows version I am using e.g. Windows 10 1803
bcdedit /set {current} description "OSNAME"
-
Windows 8+ Only
-
Implemented as a power saving feature for laptops and tablets, you absolutely do not want a tickless kernel on a desktop
bcdedit /set disabledynamictick yes
-
This step is not optional as the performance counter driver will be disabled which breaks the stock Task Manager functionality.
Reasons not to use Task Manager
-
It relies on a kernel mode driver to operate (additional overhead)
-
Does not display process tree
-
On Windows 8+, Task Manager reports CPU utility in % which provides misleading CPU utilization details, on the other hand, Windows 7's Task Manager and Process Explorer report time-based busy utilization. This also explains why the disable idle power setting results in 100% CPU utilization on Windows 8+
-
Download and extract Process Explorer
-
Copy
procexp64.exe
intoC:\Windows
and open it -
Navigate to
Options
and selectReplace Task Manager
I also configure the following:-
Confirm Kill
-
Allow Only One Instance
-
Always On Top (helpful for when applications crash and UI becomes unresponsive)
-
Open CMD and enter the command below to disable process mitigations. Effects can be viewed with Get-ProcessMitigation -System
in PowerShell.
C:\bin\scripts\disable-process-mitigations.bat
-
Open PowerShell and enter the command below
Get-MMAgent
-
If anything is set to True, use the command below as an example to disable a given setting
Disable-MMAgent -MemoryCompression
-
Open
Network and Sharing Center -> Change adapter settings
by typingcontrol
inWin+R
-
Disable any unused network adapters then right-click your main one and select properties
-
Disable all items except
QoS Packet Scheduler
andInternet Protocol Version 4 (TCP/IPv4)
-
Configure a Static IP address. This is required as we will be disabling the network services that waste resources
-
Disable
NetBIOS over TCP/IP
inGeneral -> Advanced -> WINS
to prevent unnecessary system listening
-
The sound control panel can be opened by typing
mmsys.cpl
inWin+R
-
Disable unused Playback and Recording devices
-
Disable audio enhancements as they waste resources
-
Disable Exclusive Mode in the Advanced section
-
Set the option in the communications tab to Do nothing
-
I also like to set the sound scheme to no sounds in the sounds tab
-
Consider using REAL or LowAudioLatency to minimize the size of the audio buffer. Beware of audio dropouts due to CPU not being able to keep up under load
- Be warned regarding CPU 0 being reserved/underutilized with the usage of the mentioned programs
I am not responsible if anything goes wrong or you BSOD. The idea is to disable services while gaming and use default services for everything else. Feel free to customize the lists by editing C:\bin\minimal-services.ini
in a text editor. There are several comments in the config file you can read to check if you need a given service. As an example, a user with Ethernet does not need the Wi-Fi services enabled.
-
The
High precision event timer
device in device manager uses IRQ 0 on the majority of AMD systems and consequently conflicts with theSystem timer
device which also uses IRQ 0. The only way that I'm aware of to resolve this conflict is to disable the parent device of theSystem timer
device which isPCI standard ISA bridge
by disabling themsisadrv
driver (edit the config) -
Use the command below to prevent the Software Protection service attempting to register a restart every 30s while services are disabled. I'm not sure what the problematic service is, but online sources point to Task Scheduler
reg.exe add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform" /v "InactivityShutdownDelay" /t REG_DWORD /d "4294967295" /f
-
Use Autoruns to remove entries with a yellow label in the
Services
section to prevent obsolete services from being added to the scripts that are going to be built in the next steps -
On Win10 1503 - 1703, delete the
ErrorControl
registry key inHKLM\SYSTEM\CurrentControlSet\Services\Schedule
to prevent an unresponsive explorer shell after disabling the Task Scheduler service -
Download and extract the latest service-list-builder release. Open CMD and CD to the extracted folder where the executable is located
-
Use the command below to build the scripts in the
build
folder. NSudo is required to run the batch scriptsservice-list-builder.exe --config C:\bin\minimal-services.ini
-
Move the batch scripts and
NSudo.exe
somewhere safe such as in theC:\
drive and do not share it with other people as it is specific to your system -
To prepare us for the next steps, run
Services-Disable.bat
with NSudo, ensureEnable All Privileges
is enabled as mentioned -
If desired, you can use ServiWin to check for residual drivers and possibly create an issue on the repository to let me know that a given driver should be disabled
Many devices in device manager will appear with a yellow icon as we ran the script to disable services, DO NOT disable any device with a yellow icon as this will completely defeat the purpose of building toggle scripts. My method for configuring services and device manager will ensure maximum compatibility while services are enabled.
-
Open device manager by typing
devmgmt.msc
inWin+R
then navigate toView -> Devices by connection
-
Disable any PCIe, SATA, NVMe and USB controllers with nothing connected to them
-
Unnecessary HID devices can be disabled, but mouse software will not work
-
Disable write-cache buffer flushing on all drives in the
Properties -> Policies
section -
Navigate to your
Network adapter -> Properties -> Advanced
and disable any power saving features. Disable the power saving option in thePower Management
section -
Disable everything that isn't the GPU on the same PCIe port
-
-
Navigate to
View -> Resources by connection
-
Disable any unneeded devices that are using an IRQ or I/O resources, always ask if unsure, take your time on this step. Windows should not allow you to disable any required devices but ensure you do not accidentally disable another important device such as your main USB controller or similar. Once again, DO NOT disable any device with a yellow icon
- If there are multiple of the same devices, and you are unsure which one is in use, refer back to the tree structure in
View -> Devices by connection
. Remember that a single device can use many resources. You can also use MSI Utility to check for duplicate, unneeded devices in case you accidentally miss any with the confusing device manager tree structure
- If there are multiple of the same devices, and you are unsure which one is in use, refer back to the tree structure in
-
-
To prepare us for the next steps, run
Services-Enable.bat
with NSudo, ensureEnable All Privileges
is enabled as mentioned -
Use DeviceCleanup to remove hidden devices
Open PowerShell and enter the command below to disable power saving on devices in device manager.
C:\bin\scripts\disable-pnp-powersaving.ps1
Create registry files to toggle event trace sessions. Programs that rely on event tracers such will not be able to log data until the required sessions are restored which is the purpose of creating two registry files to toggle between them (identical concept to the service scripts). Open CMD and enter the commands below to build the registry files in the C:\
directory. As with the services scripts these registry files must be run with NSudo. The sessions can be viewed by typing perfmon
in Win+R
then navigating to Data Collector Sets -> Event Trace Sessions
.
-
ets-enable
reg.exe export "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger" "C:\ets-enable.reg"
-
ets-disable
>> "C:\ets-disable.reg" echo Windows Registry Editor Version 5.00 && >> "C:\ets-disable.reg" echo. && >> "C:\ets-disable.reg" echo [-HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\WMI\Autologger]
-
Disable SleepStudy (UserNotPresentSession)
for %a in ("SleepStudy" "Kernel-Processor-Power" "UserModePowerService") do (wevtutil sl Microsoft-Windows-%~a/Diagnostic /e:false)
Open CMD and enter the commands below.
-
Disables the creation of 8.3 character-length file names on FAT- and NTFS-formatted volumes
fsutil behavior set disable8dot3 1
-
Disable updates to the Last Access Time stamp on each directory when directories are listed on an NTFS volume
fsutil behavior set disablelastaccess 1
-
Enables delete notifications (also known as trim or unmap), should be enabled by default, but it is here for safe measure
fsutil behavior set disabledeletenotify 0
-
Download and open MSI Utility or GoInterruptPolicy
-
Enable Message Signaled Interrupts on all devices that support it
- You will BSOD if you enable MSIs for the stock Windows 7 SATA driver which you should have already updated as mentioned in the Install Drivers section
-
Be careful as to what you choose to prioritize. As an example, you will likely stutter in an open-world game that utilizes texture streaming if the GPU IRQ priority is set higher than the storage controller priority. For this reason, you can set all devices to undefined/normal priority
-
Restart your PC, you can verify whether a device is utilizing MSIs by checking if it has a negative IRQ in MSI Utility
- If
System timer
andHigh precision event timer
are sharing IRQ 0, See the Configure Services and Drivers section for a solution
- If
-
Although this carried out in the Physical Setup section, confirm that there is no IRQ sharing on your system by typing
msinfo32
inWin+R
then navigating to theConflicts/Sharing
section
By default, CPU 0 handles the majority of DPCs and ISRs for several devices which can be viewed in a xperf dpcisr trace. This is not desirable as there will be a latency penalty because many processes and system activities are scheduled on the same core competing for CPU time. We can set an interrupt affinity policy to the USB, GPU, NIC, HD Audio and storage driver, which are few of many devices responsible for the most DPCs/ISRs, to offload them onto another core. The device can be identified by cross-checking the Location Info
with the Location
in the Properties -> General
section of a device in device manager. Restart your PC instead of the driver to avoid issues.
Ensure that the corresponding DPC for an ISR are processed on the same CPU. Additional overhead can be introduced if they are processed on different CPUs due to increased inter-processor communication and interfering with cache coherence.
-
Ensure that the interrupt affinity policies have been configured correctly by analyzing a xperf trace while the device is busy
-
Use Microsoft Interrupt Affinity Tool or GoInterruptPolicy to configure driver affinities
-
Use AutoGpuAffinity to benchmark the GPU affinity
-
Use Mouse Tester to compare polling variation between the USB controller on different cores
-
Use the
Interval vs Time
graph (frequency = 1000 / interval) -
Ideally this should be benchmarked during realistic load such as a game running in the background as idle benchmarks are misleading but as we do not have any games installed yet, you can and benchmark this later
-
-
Open CMD and enter the command below to configure what CPU handles DPCs/ISRs for the network driver. Ensure to change the driver key to suit your needs. Keep in mind that RSS queues determine the amount of consecutive cores ndis.sys is processed on. For example, ndis.sys will be processed on CPU 2/3/4/5 (or 2/4/6/8 with HT/SMT enabled) if RssBaseProcNumber is set to 2 with 4 RSS queues configured. The NIC must support MSI-X for RSS to function properly.
-
See media/find-driver-key-example.png to obtain the correct driver key in device manager
reg.exe add "HKLM\SYSTEM\CurrentControlSet\Control\Class\{4d36e972-e325-11ce-bfc1-08002be10318}\0000" /v "*RssBaseProcNumber" /t REG_SZ /d "2" /f
There is a lot of misleading and inaccurate information regarding this topic polluting the internet along with people having no idea what it influences. Raising the timer resolution helps with precision where constant sleeping or pacing is required such as multimedia applications, frame rate limiters and more. Below is a list of bullet points highlighting key information regarding the topic.
-
Applications that require a high resolution already call for 1ms (1000hz) most of the time. In the context of a multimedia application, this means that it can maintain the pace of events within a resolution of 1ms, but we can take advantage of 0.5ms (2000hz) being the maximum resolution supported on most systems
-
The implementation of timer resolution changed in Windows 10 2004+ so that the calling process does not affect the system on a global level but can be restored on Windows Server and Windows 11+ as explained here with the registry key below. As long as the process that requires high precision is calling for a higher resolution, this does not matter. Although, it limits us from raising the resolution beyond 1ms (unless you have a kernel mode driver which is a topic for another day)
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\kernel] "GlobalTimerResolutionRequests"=dword:00000001
-
Even if you do not want to raise the timer resolution beyond 1ms, it is useful to call for it nonetheless as old applications do not raise the resolution when they should
-
Higher resolution results in higher precision, but in some cases 0.5ms provides less precision than something slightly lower such as 0.507ms. You should benchmark what calling resolution provides the highest precision (lowest deltas) in the MeasureSleep program while requesting different resolutions with the SetTimerResolution program. This should be carried out under load while running something CPU/memory/cache intensive such as linpack as idle benchmarks may be misleading
- See Micro-adjusting timer resolution for higher precision for a detailed explanation
It is not a bad idea to skim through both the legacy and immersive control panel to ensure nothing is misconfigured.
This step is not required, but can help to justify unexplained performance issues. From a developer's perspective, we have certainly "broken" the operating system as we are running minimal services, debloated Windows and more. Code that naturally depends on something that is disabled or removed will throw errors or get stuck in an error loop. We can use event viewer to inspect whether everything is running as it should be. This is the method I used to identify that the Software Protection service was attempting to register a restart every 30s as explained in the Configure Services and Drivers section (along with the solution).
-
The
Services-Disable.bat
script disables logging, so the start values forWecsvc
andEventLog
must be changed to 3 and 2 respectively -
After running the script, use your PC normally for a while then open event viewer by typing
eventvwr.msc
inWin+R
. Inspect each section for errors and investigate how they can be solved -
Once finished, set the
Wecsvc
andEventLog
start values back to 4 in theServices-Disable.bat
script
Install any programs and game launchers you commonly use to prepare us for the next steps.
-
Consider NVIDIA Reflex if your game has support for it
-
Cap your frame rate at a multiple of your monitor refresh rate to prevent frame mistiming. E.g. possible frame rate caps with a 144Hz monitor include 72, 144, 288, 432. Consider capping at your minimum fps threshold for increased smoothness and ensure the GPU is not maxed out as lower GPU utilization reduces system latency
- Capping your frame rate with RTSS instead of the in-game limiter will result in consistent frame pacing and a smoother experience but at the cost of noticeably higher latency but disabling
passive waiting
in the settings page marginally helps with that. Disabling theEnable dedicated encoder server service
setting also preventsEncoderServer.exe
running which wastes resources
- Capping your frame rate with RTSS instead of the in-game limiter will result in consistent frame pacing and a smoother experience but at the cost of noticeably higher latency but disabling
-
Configure present mode
-
Always check whether the game is using the desired present mode with PresentMon.
Hardware: Legacy Flip
(exclusive fullscreen) andHardware: Independent Flip
(fullscreen optimizations) are optimal -
Assuming the
Disable fullscreen optimizations
checkbox is ticked, and you are having trouble with usingHardware: Legacy Flip
, try to run the command below in CMD and rebootreg.exe add "HKEY_CURRENT_USER\System\GameConfigStore" /v "GameDVR_DXGIHonorFSEWindowsCompatible" /t REG_DWORD /d "1" /f
-
If you are stuck with
Hardware Composed: Independent Flip
, try to run the command below to disable MPOs in CMD and rebootreg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Dwm" /v "OverlayTestMode" /t REG_DWORD /d "5" /f
-
-
Configuring QoS policies
-
This allows Windows to prioritize packets of an application
-
-
Use Autoruns to remove any unwanted programs such as game launchers. Remove all obsolete entries with a yellow label and run with
C:\bin\NSudo.exe
if you encounter any permission errors -
Some locations you may want to review for leftover bloatware and unwanted shortcuts
-
"C:\"
-
"C:\Windows\Prefetch"
-
"C:\Windows\SoftwareDistribution\download"
-
"C:\Windows\Temp"
-
"%userprofile%\AppData\Local\Temp"
-
"%userprofile%\Downloads"
-
-
Clear the PATH user environment variable of locations pointing to Windows bloatware folders
-
Configure Disk Cleanup
-
Open CMD and enter the command below, tick all the boxes, press
OK
cleanmgr /sageset:50
-
Run Disk Cleanup
cleanmgr /sagerun:50
-
-
Reset Firewall rules
-
Open CMD and enter the commands below
reg.exe delete "HKLM\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules" /f && reg.exe add "HKLM\System\CurrentControlSet\Services\SharedAccess\Parameters\FirewallPolicy\FirewallRules" /f
-
-
Avoid applying random tweaks, using tweaking programs or fall for the "fps boost" marketing nonsense. If you have a question about a specific option or setting, just ask
-
Try to favor free and open source software. Stay away from proprietary software where you can and ensure to scan files with VirusTotal before running them
-
Consider removing your game off the GPU core by setting an affinity to the game process to prevent them being serviced on the same CPU as this improves frame pacing. Your mileage may vary, but it is definitely something worth mentioning
-
Favor tools such as Bulk-Crap-Uninstaller to uninstall programs as the regular control panel does not remove residual files
-
Kill processes that waste resources such as game clients and
explorer.exe
- Use
Ctrl+Shift+Esc
to open process explorer then useFile -> Run
to start theexplorer.exe
shell again
- Use
-
Consider disabling idle states to force C-State 0 with the commands below before launching a game and enable idle after you close your game. This will mitigate jitter due to the process of state transition. Beware of higher temperatures and power consumption. The CPU temperature should not increase to the point of thermal throttling because you should have already dealt with that in docs/physical-setup.md. 0 is idle enabled, 1 is idle disabled
powercfg /setacvalueindex scheme_current sub_processor 5d76a2ca-e8c0-402f-a133-2158492d58ad 1 && powercfg /setactive scheme_current
-
If you are using Windows 8.1+ and Hardware: Legacy Flip (fullscreen optimizations) with your game, you can disable DWM using the scripts in
C:\bin\scripts\dwm-scripts
as the process wastes resources despite there being no composition. Beware of the UI breaking and some games/programs will not be able to launch (you may need to disable hardware acceleration)