PCITIMER ver 3.0

Add Your Comments

A handy little program to change PCI settings — Bill Lane


This utility will allow the modification or display of the PCI latency timer of a PCI device if it’s PCI latency timer is located at offset D. Unfortunately I know of no way of finding out at what offset the PCI latency timer resides.

New to this version is the ability to specify the
device #, bus # and function # you wish to modify. It can now be used to modify most, if not all PCI latency timers. I’ve used it to modify the PCI latency timer of modems, VIA EIDE controllers and sound cards. Curiously I’m surprised a modem would be capable of bus-mastering at all — considering
how slow it is.

The first step is to look up the device #, bus # and function # of the device you wish to modify. This can be done by utilizing Sisoft Sandra and looking at the PCI, AGP, Cardbus buses then selecting the device
you’re interested in (thanks Sisoft!).

Sisoft reports numbers in hex so you might have to convert to decimal (where F=15, E=14, D=13, C=12, B=11, A=10) Probably the best use for this utility is in reducing the PCI latency timer for your AGP card — and reducing the PCI latency timer for your modem (Winmodems don’t seem to work well with a PCI latency timer of zero).

According to the PCI Latency How To, PCI latency timers should be less than 64 clks. You might be able to get better transfer rates to your hard drives by increasing its PCI latency timer. My Nvidia GEforce 2/GTS was running 248 clks, which I reduced to ~100 clks w/no loss in framerate.

This also eliminated the problems I had when loading Undying on my KT133 system. I would always get a BSOD w/the message “disk error writing to drive
x: data or files may be lost”. By reducing the PCI latency timer to around 100 clks for the GEForce 2/GTS this problem disappeared.

New to this version is the ability to specify a configuration file.


I’ve only tested my utility on two VIA MVP3 based systems, a VIA KT133, VIA KT133e, VIAK KT266a and a Soyo Vempro based system all under Windows 98.

This utlity should work for any PCI latency timer located at offset D. Furthermore, there appears to be no standard on the granularity of PCI latency timers. I assume a granularity of 8 clks so if the granularity
is more than this (say 16 clks) the reported value of the PCI latency timer will not agree w/what you try to set it to because the 3rd bit will be ignored.

The utility should be run from a DOS box while in Windows 95/98.
I would first check, re-check and write-down the current PCI latency timer setting of the device I plan to modify! Once again finding the device #, bus # and function # can be found by looking at Sissoft Sandra’s PCI, AGP, Cardbuses information and
checking the various devices therein.

Sisoft reports numbers in hex so you might have to convert to decimal (where F=15, E=14, D=13, C=12, B=11, A=10). It would be a good idea to first note the original value before changing it.

PCItimer will not work under Windows NT or Windows 2000. This may change in the near future.

The worst problem I’ve experienced using this utility is video corruption. However, if
one were to monkey w/the EIDE controller PCI latency by reducing it, it’s possible you could
corrupt the data on your hard drive(s). Shutting down and restarting windows restores your
PCI latency timer to it’s default value, so that would be a way to overcome this problem if it occurs.

Personally I’ve found I get greater stability on my KT133 system by reducing the AGP PCI
latency timer’s value to 128 or less (this is for a GeForce 2/GTS AGP) from 248 clks. If you do a
search on PCI latency How-To you’ll find that PCI latency timer values of over 64 clks aren’t
recommended. As a matter of fact I’ve experienced no reduction in performance when I reduced
my GeForce 2/GTS AGP PCI latency timer value to ~100 clks.

It’s possible not all PCI devices implement their PCI latency register at the same offset D. This
sucks because it seems like no manufacturers today publicly publish their data
sheets so there’s no way of knowing where they implement their PCI latency register. Also if a device
card doesn’t do bus-mastering (I know for a fact the PCI 3dfx Voodoo 3/2000 didn’t do bus-mastering)
there will be no latency timer to modify!

I added PCItimer to the startup taskbar and start menu as a DOS app and then check close-on-exit.
This is the way I’m using it on my KT133-based Gigabyte 7zx. Settings -> Taskbar and Start Menu -> Start Menu
Programs. On all three motherboards I’ve tested the AGP PCI latency timer value is reset to it’s default
value on reboot.

The configuration file must be located in the same directory as the utility and should specify each device
on a different line in the following format ,,,. The file should look something like the below:


The first line would be setting device 0, bus 0, function 0 to a PCI latency value of 0. The 2nd line would be
setting device 7, bus 0, function 1 to a PCI latency of 40 clks.

Update 8/12/02

Recently I’ve used this utility to solve a strange problem I had with my S3 Savage4 AGP vid-card.
The drivers I’m using for this card apparently reset the PCI latency timer for this card to
248 clks regardless of BIOS settings. This caused Yuri’s Revenge to consistently crash to the
desktop (i.e. whenever it eventually cause a page swap to disk) and streaming video from certain games to exhibit choppy playback.

My solution for this was to increase the PCI latency timer for the EIDE controller to match
that of the video-card (i.e. 240 clks). Now the S3 Savage4 can’t hog the PCI bus for itself and must share with
the EIDE controller.


This program, which isn’t particularly user-friendly, will take 4
command line parameters. Three of the command-line parameters will
specify the device #, bus # and function # at which the PCI device
resides. The 4th parameter will consist of -vV followed by a
single number (unsigned char) or -C or -c. The -C or -c parameter
will report the current setting of the PCI latency timer for the PCI
device. The command-line parameters are:

PCItimer -dD (decimal value) -bB (decimal value) -fF (decimal value) -vV (decimal value)/-cC/-rR


PCItimer -d0 -b1 -f0 -c

will report back the current PCI
latency timer setting for device 0, bus 1, function 0

PCItimer -d5 -b1 -f0 -v13

will modify the PCI latency timer
for device 5, bus 1, function 0 to 104 clks

PCItimer -D4 -B1 -F3 -C

will report back the current PCI
latency timer setting for device 4, bus 1, function 3

PCItimer -rset.txt

will read the settings for all
the devices listed in the text file set.txt and
set the latency timer for all devices so listed
(better make sure the parameters in the ASCII file
are correct, because I do NO error checking on file

The last command-line parameter (i.e. -vV<decimal value>) will set the PCI latency timer of a PCI device at the specified device #, bus # and function #) to (8 x this number). This utility can only set the PCI latency timer to the following range: 0 =< x <= 248

value    command line


——-    ——————–

0 clks              0
8 clks              1
16 clks            2
24 clks            3
32 clks            4
40 clks            5
48 clks            6
56 clks            7
64 clks            8
72 clks            9
80 clks           10
88 clks           11
96 clks           12
104 clks         13
112 clks         14
120 clks         15
128 clks         16
136 clks         17
144 clks         18
152 clks         19
160 clks         20
168 clks         21
176 clks         22



If you’ve got any problems it’s best to send me the specs on your PCI device by using Sisoft Sandra.
What I’d like to know is what device #, bus # and function # your PCI device is using, it’s current
latency timer value and whether or not it’s bus-master capable (both found in Sisoft Sandra’s PCI, AGP,
Cardbus buses information, AGP). Also, I’d like to know what interfaces your PCI bus supports
(found in Sisoft Sandra PCI, AGP, Cardbuses information generic).


Jari Korhonen

author of the original PCI latency utility: latency.exe.

Bill Lane

Leave a Reply

Your email address will not be published. Required fields are marked *