Накидал Статейку (http://wiki.compowiki.info/NastrojjkaWindowsNT), а Абрамыч привел ее к презентабельному виду, если интересно - критикуем и кидаем камни в огород!
Может чего добавить надо... или уточнить...?
Спустя несколько часов добавил скриншоты тестирования производительности системы до и после ... как сами видите - есть положительный результат
ЗЫ Хотя в комплексе такой тест провел первый раз ))
Ранее несколько лет назад тестировал каждый ключ по отдельности...
Вобщем интересный факт - спустя 1 день после написания статьи
повысился прирост поизводительности.... честно честно...
гонял несколько раз ... перепускал виртуальный комп....
и вот что получилось производительность обрудование возросла еще больше!!!
Я доволен как тюлень )))
Не я конечно знаю, что эти ключи дают прирост и причем не смотря на тесты он ощутим даже визуально....
Но что бы каджый день прирост поизводительности :))) - это уже через чур хорошо...
Спасибки. Помогает. Часть знал, часть не знал. Ещё раз спасибки.
2ALL - Поскольку тестпроводился на виртуальном компе а вот на реальном не проводился, дык как систему пеустанавливать ради этого дела мне не в кайф - поэтому и делал тест на виртуальном.
Просьба к посетителям:
Произвести замер производительности реального физического компа (Ну например тем же PCMark2002 (http://madonion.com/download/?pcmark2002.shtml) До применения этих твиков и после...
Очень интересно собрать статистику прироста производительности...
Это поможет мне морально при решении о написании программы-твикера XP/2003 :)
чтож... как раз собрался у сына ось переставлять... буду попробывать. Результаты (если они будут) оглашу...
NetJ,
Думаю многим будет интересно...)
ЦитироватьРезультаты (если они будут) оглашу...
[snapback]1751[/snapback]
ага, желательно какие-нибудь количественные, а не "на глаз" ;)
Попробовал на установленной системе. Тестил CrystalMark 0.9.
До изменения реестра общий индекс был 67040, после изменения - 67800. В общем 1% приросло :). Завтра еще потестю вечером, мож и в самом деле прибавится.
NetJ,
Не пробовал что такое CrystalMark 0.9
Но интересна конфигурация железа...
До:
(http://img40.imageshack.us/img40/1885/10tt.gif)
После:
(http://img40.imageshack.us/img40/1606/27qp.gif)
Циферки интересные. Ещё бы кто объяснил, что они значат... :blonde1:
Результаты до... коментировать ... не интересно... это просто - ДО :)))
Заметный прирост производительности этими твиками реестра пришелся на винчестер (HDD) а точнее за счет... в основмном 3 параметров
реестра
I/O (корректировака)
Prefetch 3
LageSystemCash = 1
Вообще-то прирост должен был быть немного больше если бы ОЗУ было больше... чем 256мб а точнее в случае 512 Мб
Но как уже говорил... LageSystemCash = 1 компенсирует отсутвие Физического ОЗУ и Prefetch= 3 особой нагрузки на CPU и Память не дает...
Но поскольку основная память у винды по большей части Виртуальная, а за ее быстродействие отвечает скрость работы Винчестера (HDD)
Ты вывод вот какой... немного выросла нагрузка на процессор... так как ему приходится чаще обращатся к Виртуальной памяти нежели ОЗУ поэтому произхошло незначительное сокращение производительности в тесте... по ОЗУ и CPU так как при нехватке свобоодных ресурсов... идет повышенная нагрузка на них...
Но в связи с тем что большинство операций происходит через обращение к Винчестеру(HDD)...
То можно судить что общий прирост производительности на твоем компьютере... приходится примерно 15-20%
Если быть совсет точным то помои расчетам это 17% ))))
Так что вполне удачно получилось )))
Самым понятным получилось вот это:
ЦитироватьЕсли быть совсет точным то помои расчетам это 17% ))))
[snapback]1781[/snapback]
А это радует :)
Спасибо,
-=\SeaWolF/=- :)
-=SeaWolF/=-,
Железо такое:
NForce4, A64-3000+(512Mb Cache), 1Gb, 160Gb (SATA-150, 8Mb), ATI X600Pro.
ЗЫ... поставил 2003 Сервер. Общая производительность - 77780. После установки Symantec Antivirus индекс упал до 70 000, после правки реестра поднялся примерно до 73 000. Более точные цифры вечером в виде скриншотов выложу.
NetJ,
Ну в плане пожирания ресурсов... Symantec не далеко ушел от Касперского и Хваленый NOD Тоже в этой куче...
Могу порекомендовать Сменить Симантек хотябы На корпоративную Панду например, Или по моему вкусу Могу порекомендовать AVAST! 4.6 Server Edition (Все в одном флаконе и работает шустро)
_http://www.avast.com/eng/avast_server_edition.html
Если че надо будет лицензией поделится свисттни в приват контакты я поделюсь... - псмотришь разницу...)))
Покритикую маленько :)
По поводу изменения параметра
SecondLevelDataCache мое ИМХО что бесполезно его менять. Та трактовка работы этого ключа, что дана в статье не совсем верна. Процессоры нынче достаточно умны чтобы не спрашивать в реестре с каким размером кэша ему надо работать. И уж тем более, подчиняться умолчальным настройкам Винды. Ну представьте себе, проц загружает комп и Виндовс и где-то в процессе загрузки реестра спрашивает: "Слышь, Винда, напомни-ка, а какой мне тут кэш вопхнули? :idontno: " Вообще, этот ключ нужен был только для работы с древними процами до P-II, как указано на HardwarePortal.ru (http://www.hardwareportal.ru/Handmade/Windows.work/Part3.html). Кстати, вот тут (http://arstechnica.com/tweak/nt/L2-cache-1.html) ребята проделали тесты и говорят :
ЦитироватьOur tests revlealed that the tweak made absolutely no difference on PII or PIII processors.
Поэтому указывать нынешним процессорам какой у них SecondLevelDataCache бессмысленно и бесполезно, пускай сами разбираются, и не юзерское дело лезть во внутренние процессорские дела, ИМХО.
-------------------------------
Параметр
IOPageLockLimit в XP тоже ни на что не влияет судя по этому (http://www.thegline.com/win2k/issues/2003/16.html) рассказу про Win2k :
ЦитироватьThe RTM kernel references IoPageLockLimit. The SP1 kernel does not. Neither do any subsequent editions of the kernel; neither does the XP kernel in any of its incarnations. To double-check, he ran SysInternals' RegMon utility to determine if anything was, in fact, accessing that Registry entry at all, and the answer seemed to be a resounding no. There seem to be no references to the entry in any other system components, either.
То есть, этот ключ игнорируется уже в Win2k SP1.
Лично мне влом на XP проверять RegMon-ом читается ли вообще этот ключ в реестре, но любопытствующие могут потестить сами. Я же поверю на слово :)
---------------------------------
LargeSystemCache менять с 0 на 1 для компа с Win2k сервер, который сервером не работает, не рекомендует сам Микрософт (http://www.microsoft.com/resources/documentation/Windows/2000/server/reskit/en-us/Default.asp?url=/resources/documentatio%D1%84n/Windows/2000/server/reskit/en-us/regentry/29933.asp) :
ЦитироватьThe default value for Windows 2000 Server (1) is designed for file servers. Because this value can degrade service performance, it is not appropriate for application servers. If you are running an application server, such as Web server, change the value of this entry to 0 by selecting the Maximize data throughput for network applications option in Network and Dial-up Connections.
The system sets the value of this entry to 1 when you install Windows 2000 Server. But many applications, such as SQL Server and Microsoft Exchange, change the value of this entry to 0.
Я склонен принять эту рекомендацию относительно XP тоже.
--------------------------------
Про ключик
/Prefetch:1 на MSDN говорят (http://blogs.msdn.com/ryanmy/archive/2005/05/25/421882.aspx) что ничего особо ускоряющего он не делает да и вообще, придуман не для этого :
ЦитироватьThe /prefetch:# flag is looked at by the OS when we create the process -- however, it has one (and only one) purpose. We add the passed number to the hash. Why? WMP is a multipurpose application and may do many different things. The DLLs and code that it touches will be very different when playing a WMV than when playing a DVD, or when ripping a CD, or when listening to a Shoutcast stream, or any of the other things that WMP can do. If we only had one hash for WMP, then the prefetch would only be correct for one such use. Having incorrect prefetch data would not be a fatal error -- it'd just load pages into memory that'd never get used, and then get swapped back out to disk as soon as possible. Still, it's counterproductive. By specifying a /prefetch:# flag with a different number for each "mode" that WMP can do, each mode gets its own separate hash file, and thus we properly prefetch. (This behavior isn't specific to WMP -- it does the same for any app.)
abram4,
Как ты любишь в начлае говорить - "Преамбула" так скзать...
Статью я писал о комплексной настроке...системы и как наиболее универсальной... (каждый ключ в отдельности рояли играет мало...)
На кой черт Intel Писала дрова ускорения чипсетов Intel 845-850 (IAA)?
Наверное потому что Windows - нихрена не могла использовать как надо то на чем она работала....
Касаемо LageSystemCash=1 - Если ты юзаешь SQL Server или MS Exchange да тут правда от него только загнется их производительноть так как они сами себя по мимо прочего кешируют...
Почему тогда программы запускают как службы? - видимо потому что они работаю шустрее и призводительнее.... и тп и т.д.
Прикладное ПО как правло в большинстве своем не является аппаратно приявязанным и на многом расчитывает на помощь в конфигурировании ОС
По поводу CPU L2 Cashe - Гы... тут целая эпопея...
Windows вообще решает что у них всех оно кратно 256Кб
и не более 512 а на серверах 1 Мб:), вообщем бред...
В NT4 нада было его прописывать - почти по молчанию... иначе непроизводительно работала система :(
например в начале было так L2Cash=0 - Auto за частую воспринимаемое как =0Кб (Это как раз про - Pentium (1 и PRO) Celeron(PII))
L2Cash=1 256Кб L2Cash=2 512Кб
Но сколько примеров не типичных для Windows Level 2 Cash?
AMD Duron Level 1=Level 2 Cashe 64Кб (128Кб All)
Intel Celeron L2Cash=128 кб
Intel P4 Prescott L2Cash=1024Кб
Intel P4 Extreme Edition L2Cash=1024Кб L3Cash=2048Кб
Сколь таких примеров где это размер воспринимаетс яне так ка надо ... куча...
И вроде как по умолчанию стали вводить размеры ручками не по схеме предложеной мелкосовтом а по реальному размеру те
Вместо L2Cash=2 писали L2Cash=512 и т.д.
Что дает нам сама ОС Windows - на уровне системы ?
Только определение вроде или X86 или I64... вообще не густо
Как определяется программно (те ПО)
Пример определения процессора (не по аппаратному типу)
AnsiString ProcessorName="Unknown";
TRegistry *reg = new TRegistry;
try {
reg->RootKey = HKEY_LOCAL_MACHINE;
reg->OpenKey("Hardware\\Description"
"\\System\\CentralProcessor\\0", false);
ProcessorName=reg->ReadString("ProcessorNameString");
}
__finally
{
delete reg;
}
MessageDlg(ProcessorName, mtInformation, TMsgDlgButtons() << mbOK, 0);
Псевдо аппартное определение процессора
на Pascal+ASM(точнее больше ASM)
[codebox]
{ **** UBPFD *********** by delphibase.spb.ru ****
>> Определение CPU и его функций
Просто вызвать
function CPUIDInfo(out info: TCPUInfo): boolean;
и использовать запись TCPUInfo
Зависимости: Asmbler
Автор: [finch], hellonarod@mail.ru, ICQ:5072303, LUBER
Copyright: Delphi - Советы программистов - В.Озеров
Дата: 18 марта 2004 г.
************************************************ }
unit ExpandCPUInfo;
interface
type TCPUInfo = packed record
IDString: array [0..11] of Char;
Stepping: Integer;
Model: Integer;
Family: Integer;
FPU: Boolean;
VirtualModeExtensions: Boolean;
DebuggingExtenslons: Boolean;
PageSizeExtensions: Boolean;
TimeStampCounter: Boolean;
K86ModelSpecificRegisters: Boolean;
MachineCheckExceptlon: Boolean;
CMPXCHG8B: Boolean;
APIC: Boolean;
MemoryTypeRangeRegisters: Boolean;
GlobalPagingExtension: Boolean;
ConditionalMovelnstruction: Boolean;
MMX: Boolean;
SYSCALLandSYSRET, FPConditionalMovelnstruction, AMD3DNow: Boolean;
CPUName: String;
end;
function ExistCPUID: Boolean;
function CPUIDInfo(out info: TCPUInfo): Boolean;
function ExistMMX: Boolean;
function Exist3DNow: Boolean;
function ExistKNI: Boolean;
procedure EMMS;
procedure FEMMS;
procedure PREFETCH(p: Pointer); register;
implementation
function ExistCPUID: Boolean;
asm
pushfd
pop eax
mov ebx, eax
xor eax, 00200000h
push eax
popfd
pushfd
pop ecx
mov eax, 0
cmp ecx, ebx
jz @NO_CPUID
inc eax
@NO_CPUID:
end;
function CPUIDInfo(out info: TCPUInfo): boolean;
function ExistExtendedCPUIDFunctions: boolean;
asm
mov eax, 080000000h
db $0F, $A2
end;
var
name: array [0..47] of Char;
p: Pointer;
begin
if ExistCPUID then
asm
jmp @Start
@BitLoop:
mov al, dl
and al, 1
mov [edi], al
shr edx, 1
inc edi
loop @BitLoop
ret
@Start:
mov edi, info
mov eax, 0
db $0F, $A2
mov [edi],ebx
mov [edi + 4], edx
mov [edi + 8], ecx
mov eax, 1
db $0F, $A2
mov ebx, eax
and eax, 0fh;
mov [edi + 12], eax;
shr ebx, 4
mov eax, ebx
and eax, 0fh
mov [edi + 12 + 4], eax
shr ebx, 4
mov eax, ebx
and eax, 0fh
mov [edi + 12 +8 ], eax
add edi, 24
mov ecx, 6
call @BitLoop
shr edx, 1
mov ecx, 3
call @BitLoop
shr edx, 2
mov ecx, 2
call @BitLoop
shr edx, 1
mov ecx, 1
call @BitLoop
shr edx, 7
mov ecx, 1
call @BitLoop
mov p, edi
end;
if (info.IDString = 'AuthenticAMD') and ExistExtendedCPUIDFunctions then
begin asm
mov edi, p
mov eax, 080000001h
db $0F, $A2
mov eax, edx
shr eax, 11
and al, 1
mov [edi], al
mov eax, edx
shr eax, 16
and al, 1
mov [edi + 1], al
mov eax, edx
shr eax, 31
and al, 1
mov [edi + 2], al
lea edi, name
mov eax, 0
mov [edi], eax
mov eax, 080000000h
db $0F, $A2
cmp eax, 080000004h
jl @NoString
mov eax, 080000002h
db $0F, $A2
mov [edi], eax
mov [edi + 4], ebx
mov [edi +8], ecx
mov [edi + 12], edx
add edi, 16
mov eax, 080000003h
db $0F, $A2
mov [edi] , eax
mov [edi + 4], ebx
mov [edi + 8], ecx
mov [edi + 12], edx
add edi, 16
mov eax, 080000004h
db $0F, $A2
mov [edi] , eax
mov [edi + 4], ebx
mov [edi + 8], ecx
mov [edi + 12], edx
@NoString:
end;
info.CPUName := name;
end
else
with info do
begin
SYSCALLandSYSRET := False;
FPConditionalMovelnstruction := False;
AMD3DNow := False;
CPUName := '';
end;
Result := ExistCPUID;
end;
function ExistMMX: Boolean;
var info: TCPUInfo;
begin
if CPUIDInfo(info) then Result := info.MMX
else Result := False;
end;
function Exist3DNow: Boolean;
var info: TCPUInfo;
begin
if CPUIDInfo(info) then Result := info.AMD3DNow
else Result := False;
end;
function ExistKNI: Boolean;
begin
Result := False;
end;
procedure EMMS;
asm
db $0F, $77
end;
procedure FEMMS;
asm
db $0F, $03
end;
procedure PREFETCH(p: Pointer); register;
asm
PREFETCH byte ptr [eax]
end;
end.
[/code]
А вот пример проверки с использованием зания маркировки...
но тут только некоторые Intel ... Native C
[code]
#include <stdio.h>
#include <dos.h>
char intel_id[12]= "GenuineIntel";
long TOLERANCE = 1;
/*struct zap
{
long abc;
long def;
} rec[10];
*/
char CPUTypes [7][22]=
{"Unknown ",
"Intel 80386 ",
"Intel 80486 ",
"Intel Pentium® ",
"Intel PentiumPro®",
"Intel PentiumII® ",
"Unknown Pentium " };
long CPU_unknown = 0; // Unknown proccessor
long CPU_i386 = 1; // Intel 80386 processor
long CPU_i486 = 2; // Intel 80486 processor
long CPU_Pentium = 3; // Intel Pentium® processor
long CPU_PentiumPro = 4; // Intel PentiumPro® processor
long CPU_PentiumII = 5; // Intel PentiumII® processor
long CPU_UnkPentium = 6; // Unknown Intel Pentium family processor
unsigned long CPU_mask = 0x7FFF;
// unsigned long CPU_IntelClone=0x8000;
long CPU_HaveMMX_ = 0x00800000;
long CPU_HaveRDTSC_ = 0x00000010;
main()
{
int i;
extern long CPU_getCPUIDFeatures (void);
extern long CPU_haveCPUID (void);
extern long CPU_haveMMX (void);
extern long CPU_getProcessorType(void);
extern long CPU_getCPUIDFeatures (void);
extern long CPU_checkClone (void);
extern long CPU_check80386 (void);
extern long CPU_check80486 (void);
extern long CPU_getProcessorSpeed(void);
extern long CPU_haveRDTSC(void);
extern long GetRDTSCCpuSpeed(void);
clrscr();
puts("Ёд ® Є ¬Ґ :");
printf("CPU type : %s \n",CPUTypes[CPU_getProcessorType()]);
//printf("CPU speed : %l",CPU_getProcessorSpeed());
if (!CPU_haveMMX()) puts("MMX not supported :(");
else puts("MMX technology is present!!! :)");
}
extern long CPU_checkClone (void)
{
asm{ .386
mov ax,5555h // Check to make sure this is a 32-bit processor
xor dx,dx
mov cx,0002h
div cx // Perform Division
clc
jnz NoClone
jmp Clone }
NoClone: asm { stc }
Clone: asm {
pushfd
pop eax // Get the flags
and eax,1
xor eax,1 } // EAX=0 is probably Intel, EAX=1 is a Clone
}
extern long CPU_checkCPUID (void)
{
unsigned long CPU_IntelClone=0x8000;
asm{ .386
nop
nop
xor eax, eax // Set up for CPUID instruction
db 00Fh,0A2h // Get and save vendor ID
cmp eax, 1 // Make sure 1 is valid input for CPUID
jl Fail // We dont have the CPUID instruction
xor eax,eax // Assume Genuine Intel
cmp dword ptr [intel_id+1], ebx
jne NotGenuineIntel
cmp dword ptr [intel_id+5], edx
jne NotGenuineIntel
cmp dword ptr [intel_id+9], ecx
je HaveGenuineIntel }
NotGenuineIntel: asm {mov eax,CPU_IntelClone } // Set the clone flag
HaveGenuineIntel:asm{ push eax
xor eax, eax
inc eax
db 00Fh,0A2h // Get family/model/stepping/features
and eax, 0F00h
shr eax, 8 // Isolate family
and eax, 0Fh
pop ecx
or eax,ecx // Combine in the clone flag
jmp Done }
Fail: asm{ xor eax,eax }
Done:
}
extern long CPU_getCPUIDFeatures (void)
{ long a;
asm{ .386
xor eax, eax // Set up for CPUID instruction
db 00Fh,0A2h // Get and save vendor ID
cmp eax, 1 // Make sure 1 is valid input for CPUID
jl Fail // We dont have the CPUID instruction
xor eax, eax
inc eax
db 00Fh,0A2h // Get family/model/stepping/features
mov eax, edx
jmp Done }
Fail: asm {xor eax,eax}
Done: asm {mov a,eax }
return(a);
}
extern long CPU_getCPUIDModel (void)
{ asm{ .386
xor eax, eax // Set up for CPUID instruction
db 00Fh,0A2h // Get and save vendor ID
cmp eax, 1 // Make sure 1 is valid input for CPUID
jl Fail // We dont have the CPUID instruction
xor eax, eax
inc eax
db 00Fh,0A2h // Get family/model/stepping/features
and eax, 0F0h
shr eax, 4 // Isolate model
jmp Done }
Fail: asm{ xor eax,eax }
Done:
}
extern long CPU_check80386 (void)
{
asm { .386
xor edx,edx // EDX = 0, not an 80386
mov bx, sp
and sp, not 3
pushfd // Push original EFLAGS
pop eax // Get original EFLAGS
mov ecx, eax // Save original EFLAGS
xor eax, 40000h // Flip AC bit in EFLAGS
push eax // Save new EFLAGS value on
// stack
popfd // Replace current EFLAGS value
pushfd // Get new EFLAGS
pop eax // Store new EFLAGS in EAX
xor eax, ecx // Can't toggle AC bit,
// processor=80386
jnz Done // Jump if not an 80386 processor
inc edx } // We have an 80386
Done:asm{ push ecx
popfd
mov sp, bx
mov eax, edx }
}
extern long CPU_check80486 (void)
{
asm { .386
pushfd // Get original EFLAGS
pop eax
mov ecx, eax
xor eax, 200000h // Flip ID bit in EFLAGS
push eax // Save new EFLAGS value on stack
popfd // Replace current EFLAGS value
pushfd // Get new EFLAGS
pop eax // Store new EFLAGS in EAX
xor eax, ecx // Can not toggle ID bit,
jnz one // Processor=80486
mov eax,1 // We dont have a Pentium
jmp Done }
one: asm{ xor eax,eax } // We have Pentium or later
Done:
}
extern long CPU_haveCPUID (void)
{
long i;
asm { .386
pushfd // Get original EFLAGS
pop eax
mov ecx, eax
xor eax, 200000h // Flip ID bit in EFLAGS
push eax // Save new EFLAGS value on stack
popfd // Replace current EFLAGS value
pushfd // Get new EFLAGS
pop eax // Store new EFLAGS in EAX
xor eax, ecx // Can not toggle ID bit,
jnz i // Processor=80486
mov eax,0 // We dont have CPUID support
jmp Done}
i: asm {mov eax,1} // We have CPUID support
Done:asm { mov i,eax}
return(i);
}
extern long CPU_haveMMX (void)
{
long i;
if (CPU_haveCPUID())
i=(CPU_getCPUIDFeatures() & CPU_HaveMMX_);
else
i=0;
return(i);
}
/*
procedure ZTimerQuickInit;
begin
{$ifdef __DOS__}
ZTimerBIOS := _zero + $400;
{$endif}
end;
procedure GetCounterFrequency (var freq: CPU_largeInteger);
begin
ZTimerQuickInit;
freq.LowPart := 100000;
freq.HighPart := 0;
end;
procedure GetCounter (var t: CPU_largeInteger);
begin
t.LowPart := ULZReadTime * 5500;
t.HighPart := 0;
end;
*/
extern long CPU_haveRDTSC(void)
{
long Result,CPU_HaveRDTSC_= 0x00000010;
if (CPU_haveCPUID())
Result=CPU_getCPUIDFeatures() & CPU_HaveRDTSC_;
else
Result=0;
return(Result);
}
extern long CPU_getProcessorType(void)
{
unsigned long cpu, model, clone,Result;
unsigned long CPU_IntelClone=0x8000;
if (CPU_haveCPUID())
{
cpu=CPU_checkCPUID();
clone= cpu & CPU_IntelClone;
switch (cpu & CPU_mask)
{
case 4: { cpu= CPU_i486;break;}
case 5: { cpu= CPU_Pentium;break;}
case 6:
{
model=CPU_getCPUIDModel();
if (model==1)
cpu=CPU_PentiumPro;
else
cpu=CPU_PentiumII;
break;
}
default: cpu=CPU_UnkPentium;
}
}
else
{
clone=CPU_checkClone();
if (CPU_check80386())
cpu=CPU_i386;
else
if (CPU_check80486())
cpu=CPU_i486;
else
cpu=CPU_Pentium;
}
Result=cpu | clone;
return (Result);
}
extern long GetRDTSCCpuSpeed(void)
// var t0, t1,count_freq: CPU_largeInteger;
{
long freq=0,freq2=0,freq3=0,total=0,tries=0,total_cycles=0,cycles=0;
long stamp0=0,stamp1=0,total_ticks=0,ticks=0,Result;
// GetCounterFrequency(Count_freq);
do
{
tries+=1; // Increment number of times sampled
freq3=freq2; // Shift frequencies back
freq2=freq;
// GetCounter(t0);
// t1.LowPart := t0.LowPart;
// t1.HighPart := t0.HighPart;
// while((t1.LowPart - t0.LowPart)< 50) do
// {
// GetCounter(t1);
// stamp0=CPU_quickRDTSC;
// }
// t0.LowPart := t1.LowPart;
// t0.HighPart := t1.HighPart;
// while ((t1.LowPart - t0.LowPart) < 1000) do
// {
// GetCounter(t1);
// stamp1:=CPU_quickRDTSC;
// }
cycles=stamp1-stamp0;
// ticks=t1.LowPart- t0.LowPart;
ticks= ticks * 100000;
// ticks= ticks / (count_freq.LowPart / 10);
total_ticks += ticks;
total_cycles+= cycles;
// if ((ticks % count_freq.LowPart) > (count_freq.LowPart / 2))
ticks+=1; // Round up if necessary
freq= cycles / ticks; // Cycles / us = MHz
if ((cycles % ticks) > (ticks / 2))
freq +=1; // Round up if necessary
total= (freq + freq2 + freq3); // Total last three frequency calculations
}
while( (tries < 3 ) || (tries < 20) && ((abs(3 * freq -total) > (3*TOLERANCE)) ||
(abs(3 * freq2-total) > (3*TOLERANCE)) ||
(abs(3 * freq3-total) > (3*TOLERANCE))));
Result=(total_cycles / total_ticks);
}
extern long CPU_getProcessorSpeed(void)
{
unsigned long cpuSpeed,i,tries,processor,CPU_mask=0x7FFF,ITERATIONS=16000;
unsigned long processor_cycles[7]={00, 115 ,47, 43, 38, 38, 38};
unsigned long known_speeds[19]={400, 333, 300, 266, 233, 200,
166, 150, 133, 120, 100, 90, 75, 66, 60, 50, 33, 20, 0};
long Result;
processor=CPU_getProcessorType() & CPU_mask;
for(tries=1;tries!=3;tries++)
{
// if (CPU_haveRDTSC())
// cpuSpeed=GetRDTSCCpuSpeed();
// else
// cpuSpeed= GetBSFCpuSpeed(ITERATIONS * processor_cycles[processor]);
i=0;
do
{
if ( (cpuSpeed >= (known_speeds-2)) && (cpuSpeed <= (known_speeds+2)))
{
Result=known_speeds;
exit();
}
i++;
}
while(known_speeds==0);
}
Result=cpuSpeed;
}
[/codebox]
Короче ПО должно по мимо всего на аппаратном уровне знать все марки процессоров и т.п.
Пожалуй кроме программ для тестирования оборудования подобный код вписывают очень мало производителей ПО так как это привяжет его к какому то классу оборудования... точнее поколению...
Вообщем... как я уже говорил... Винда Виндою а программы программами...
Больша часть из них берет настроки как-раз именно из реестра а не проверяет аппаратную часть в дествительности....
Да и настрока в целом... кстати с реальными тестами... производительности Оборудования!!! дали свои результаты
пусть не высокие но .. они в сторону возрастания...
... так что вообщем смотрите сами... мое дело предложить а ваше - либо использовать либо отказаться...
В конце концов у каждого свое воспритие реальности... у кого-то на примерах других у меня исключительно из моих личных наблюдений...
то что вижу чувствую и т.п...
короче на своем личном опыте пускай и не всегда удачным с самого начала...
Собственно говоря еще одна тонкость...
касаемо твикеров и т.п.
Не секрет что бывает на одном компе ПО работает прекрасно а другом причем при абсолютной эдентичности оборудования ни в какие рамки работа его не лезет...
Так и касательно опровержений того или иного твика... подстройки и т.п.
Для начала надопросто воспринимать все их в целом чтобы престаить общю картину их взаимодействия...
ТОгда оно даствам результат - а если пробовать каждый в отдельности можно прсто и не уловить самой идеи... те настроки под контреное железо в данном случае ОС...
/prefetch:# 0 1 2 - 3 исключительно для самой ОС - те загрузоные файлы к все му прочему...
Тоже песнь отдельная....
Функция ускорения запуска ... хошь юзай хошь нет...
Снижает нагрузку на систему в момет запуска так как хранит оптимальную инфу по /prefetch:1 для огнелиса.... факт есть факт при запуске его с этим ключем работает реаьно быстрее
как и тот фак что "iexplore.exe" -nohome
ускоряет его работу...
корче я как Чукча, что вижу - то пою... :crazy:
Цитировать(Это как раз про - Pentium (1 и PRO) Celeron(PII))
[snapback]1978[/snapback]
да эти, как не оптимизируй, все равно уже толком ездить не будут.
ЦитироватьДля начала надопросто воспринимать все их в целом чтобы престаить общю картину их взаимодействия...
ТОгда оно даствам результат - а если пробовать каждый в отдельности можно прсто и не уловить самой идеи... те настроки под контреное железо в данном случае ОС...
[snapback]1978[/snapback]
Если по отдельности от них эфект=0, то и в сумме они дадут столько же. Может какой-то один-два из твиков и дает все это ускорение, вот про это бы кто рассказал. Желательно с цифрами в каких-нить попугаях. Типа, вот этот ключик - панацея и ваще WOW! А вот этот - так, чтобы было, потому что "рекомендуется".
Да и с одинаковой пузомеркой договорились бы, а то у каждого свои попугаи, и непонятки берут -что лучше, толще или ширше.
ЦитироватьЕсли по отдельности от них эфект=0, то и в сумме они дадут столько же. Может какой-то один-два из твиков и дает все это ускорение, вот про это бы кто рассказал.
Тут вопрос не так поставлен...
Привожу пример Lage System Cash
и Prefetch (Кеширование Зависит от частоты запуска ПО)
Начинают запихивать в кеш все и вся
если вместе сним не использовать
Always Unload DLL - То на практике первые 2 твика
просто сожрут все ресурсы системы... и спустя некоторое время работы просто будет тормозить....
Подстройка IO по описанной схеме дает использовать кешированием блоки чтения на 3/4 от всего размера ОЗУ (т.е. 1/4 отсавляем для функционирования другой части системы а не всех доступных ресурсов + кеша как это указано в автоматической настроке... - по умолчанию система работы с файлами занимает значительные ресурсы системы в поцессе рабты над ними)
Я потому и предлагал комплексный подход к решению....
и все также в общем духе... и т.д. и т.п.
Если лень думать то посто используйте все подряд... в 90% случаев для дома хуже не будет...
потому я и говорил вот так:
ЦитироватьДля начала надопросто воспринимать все их в целом чтобы престаить общю картину их взаимодействия...
ТОгда оно даствам результат - а если пробовать каждый в отдельности можно прсто и не уловить самой идеи... те настроки под контреное железо в данном случае ОС...
А про
Цитироватьда эти, как не оптимизируй, все равно уже толком ездить не будут.
Это ты зря....
Приведу пример Windows 2003 со времен Windows NT4 имеет самое легкое ядро.... из NT систем... и хоть и с треском но работат например на обородовании
из серии Pentium-166MMX вполне достаточно для некоторых нужд где ето железо еще можно использвать.. - экономия млин..!!!
Решил порадовать посетителей программой по данной теме...
Первую Бету версию уже смотрел Abram4...
Программа двуязычная и бесплатная....:)
В ближашие дни выложу на бета-тестирование...
Певый скриншот бета версии :)
(http://bestit.jino-net.ru/tweak.gif)
- ныне она уже правктически релиз на 90% :)