Приоритети в NT
25 отговора
855 прегледа
Приоритети в NT
Правя tool за HDD и е необходимо за определен период от време достъп до диска да има само моята програма. За целта пробвах да дам realtime приоритет на процеса, но при изпълнение на ReadFile ОС дава парчета от CPU време и на други процеси, които съответно могат да си ръчкат HDD. Пробвах освен realtime приоритет на процеса да дам и time critical приоритет и на нишката, в която тече обработката, но пак без успех. Пробвах и да пращам кода FSCTL_LOCK_VOLUME с DeviceIoControl, но пак нищо, другите програми си работят свободно.
Та това е, общо взето, предложения приемам всякакви
Si Vis Pacem, Para Bellum
Та това е, общо взето, предложения приемам всякакви
Si Vis Pacem, Para Bellum
Re: Приоритети в NT
ama kato rabotqt jitkat li harda? shtoto maj ne bi trqbwalo da mogat ako si loknal unita. Towa obaje moje bi se prenebregwa za paging fajla... te towa weche maj ne mojesh da go zabranish ama se ochakwa i che nqma da ti trqbwa
Re: Приоритети в NT
Да, вече споменах, че си работят нормално. По принцип не трябва да се допуска дори стартирането им, тъй като то само по себе си е "джиткане на харда".
Re: Приоритети в NT
откога разправям аз, че REALTIME_PRIORITY клас не означава чак толкова много, ама... :)
праволинейният начин да предотвратим превключването към други нишки си е да ползваме KeRaiseIrql() и да вдигнем IRQL до DISPATCH_LEVEL или по-високо. разбира се трябва да се внимава какво ще се прави в този период (е.. най-много deadlock да стане де. :)))
не знам какъв е tool-a за HDD-то, но.. ако е примерно нещо за дефрагментация - Марк Русинович имастатийка по върпоса + сорс код ([линк] беше нещо - NT Disk Defragmenting или нещо подобно) - може да свърши работа. :)
праволинейният начин да предотвратим превключването към други нишки си е да ползваме KeRaiseIrql() и да вдигнем IRQL до DISPATCH_LEVEL или по-високо. разбира се трябва да се внимава какво ще се прави в този период (е.. най-много deadlock да стане де. :)))
не знам какъв е tool-a за HDD-то, но.. ако е примерно нещо за дефрагментация - Марк Русинович имастатийка по върпоса + сорс код ([линк] беше нещо - NT Disk Defragmenting или нещо подобно) - може да свърши работа. :)
Re: Приоритети в NT
Изтеглих го, но няма нищо полезно :(
А за KeRaiseIrql няма документация, деба
А за KeRaiseIrql няма документация, деба
Re: Приоритети в NT
е как да няма документация?
ето от Win2000 DDK (за XP-то още не се е появило):
Kernel-Mode Drivers: Windows 2000 DDK
KeRaiseIrql
VOID
KeRaiseIrql(
IN KIRQL NewIrql,
OUT PKIRQL OldIrql
);
KeRaiseIrql raises the hardware priority to a given IRQL value, thereby masking off interrupts of equivalent or lower IRQL on the current processor.
Parameters
NewIrql
Specifies the new IRQL to which the hardware priority is to be raised.
OldIrql
Pointer to the storage for the original (unraised) IRQL value to be used in a subsequent call to KeLowerIrql.
Include
wdm.h or ntddk.h
Comments
If the new IRQL is less than the current IRQL, a bug check occurs. Otherwise, the current IRQL is set to the specified value.
Callers of this routine can be running at any IRQL. Any caller should restore the original IRQL with KeLowerIrql as soon as possible.
A call to KeLowerIrql is valid if it specifies NewIrql <= CurrentIrql. A call to KeRaiseIrql is valid if the caller specifies NewIrql >= CurrentIrql.
See Also
KeGetCurrentIrql, KeLowerIrql
See Also
KeGetCurrentIrql, KeLowerIrql
но при всички положения (не само за help-a) за да напишеш driver трябва да си изтеглиш DDK-то от microsoft...
ето от Win2000 DDK (за XP-то още не се е появило):
Kernel-Mode Drivers: Windows 2000 DDK
KeRaiseIrql
VOID
KeRaiseIrql(
IN KIRQL NewIrql,
OUT PKIRQL OldIrql
);
KeRaiseIrql raises the hardware priority to a given IRQL value, thereby masking off interrupts of equivalent or lower IRQL on the current processor.
Parameters
NewIrql
Specifies the new IRQL to which the hardware priority is to be raised.
OldIrql
Pointer to the storage for the original (unraised) IRQL value to be used in a subsequent call to KeLowerIrql.
Include
wdm.h or ntddk.h
Comments
If the new IRQL is less than the current IRQL, a bug check occurs. Otherwise, the current IRQL is set to the specified value.
Callers of this routine can be running at any IRQL. Any caller should restore the original IRQL with KeLowerIrql as soon as possible.
A call to KeLowerIrql is valid if it specifies NewIrql <= CurrentIrql. A call to KeRaiseIrql is valid if the caller specifies NewIrql >= CurrentIrql.
See Also
KeGetCurrentIrql, KeLowerIrql
See Also
KeGetCurrentIrql, KeLowerIrql
но при всички положения (не само за help-a) за да напишеш driver трябва да си изтеглиш DDK-то от microsoft...
Re: Приоритети в NT
btw siguren li si che funkciqta lokwashta volume-to ne wrashta greshka?
Re: Приоритети в NT
По принцип връща TRUE, но локвам \\\\.\\PhisycalDrive0, а пък за локващия код пише, че работи само на \\\\.\\C:
Странна работа, общо взето
Странна работа, общо взето
Re: Приоритети в NT
MiG,
Ne davash podrobnosti za tova kakuv tool pravish za HDD i kakvi sa usloviata za izpulnenie, no bih te posuvetval da ne se muchish s prioriteti. Win32 programa v NT nikoga niama da moze da predotvrati prekusvane i izpulnene na drugi procesi. Teoreticheski i prakticheski e nevuzmozno. Za HDD-to, proveri na tazi stranica dali draiverite v NT ne ti pozvoliavat da pravish tova koeto iskash: [линк]
Ako tova ne stava, nai-veroiatno shte triabva da napishesh filter driver koito da blokira access do HDD-to kogato tvoita programa raboti. Mozesh da go napravish na dve stepeni - physical drive ili logical drive (file system). I v dvata sluchaia triabva da osigurish bezusloven dostup do paging faila.
Ne davash podrobnosti za tova kakuv tool pravish za HDD i kakvi sa usloviata za izpulnenie, no bih te posuvetval da ne se muchish s prioriteti. Win32 programa v NT nikoga niama da moze da predotvrati prekusvane i izpulnene na drugi procesi. Teoreticheski i prakticheski e nevuzmozno. Za HDD-to, proveri na tazi stranica dali draiverite v NT ne ti pozvoliavat da pravish tova koeto iskash: [линк]
Ako tova ne stava, nai-veroiatno shte triabva da napishesh filter driver koito da blokira access do HDD-to kogato tvoita programa raboti. Mozesh da go napravish na dve stepeni - physical drive ili logical drive (file system). I v dvata sluchaia triabva da osigurish bezusloven dostup do paging faila.
Re: Приоритети в NT
Привет
Програмката ми е предназначена за анализ на състоянието на твърди дискове. Сигурно познаваш структурата на съвременните твърди дискове: в началото им (първите цилиндри) са запазени за самия диск (недостъпни са за нищо друго), там той съхранява дефектните сектори. Направено е щото дисковете са твърде големи като капацитет и със физически твърде малки сектори и е невъзможно някой hdd да работи без чат-пат да дава лоши сектори. Та контролера на диска като открие, че някой сектор дава фира го мести в зоната на първите силиндри. Доколкото съм чел, когато някой диск започне да има твърде много лоши сектори е добре да се хвърля и да се купува нов.
Та идеята е чрез измерване на времето на последователно изчетени сектори да се определя дали сред тях има дефектни - времето за изчитане на комбинацията "добър-лош-добър" е по-голямо от времето за изчитане на комб. "добър-добър-добър", тъй като при четене на лош сектор главите трябва да се преместят в началото и после пак да се върнат на старата позиция.
Програмата е направена в осн. линии, но за сега е безполезна, тъй като тя няма абсолютна власт в/у устройството. Ако успея да я направя както трябва, обещавам да я пусна заедо със сорсовете :)
Програмката ми е предназначена за анализ на състоянието на твърди дискове. Сигурно познаваш структурата на съвременните твърди дискове: в началото им (първите цилиндри) са запазени за самия диск (недостъпни са за нищо друго), там той съхранява дефектните сектори. Направено е щото дисковете са твърде големи като капацитет и със физически твърде малки сектори и е невъзможно някой hdd да работи без чат-пат да дава лоши сектори. Та контролера на диска като открие, че някой сектор дава фира го мести в зоната на първите силиндри. Доколкото съм чел, когато някой диск започне да има твърде много лоши сектори е добре да се хвърля и да се купува нов.
Та идеята е чрез измерване на времето на последователно изчетени сектори да се определя дали сред тях има дефектни - времето за изчитане на комбинацията "добър-лош-добър" е по-голямо от времето за изчитане на комб. "добър-добър-добър", тъй като при четене на лош сектор главите трябва да се преместят в началото и после пак да се върнат на старата позиция.
Програмата е направена в осн. линии, но за сега е безполезна, тъй като тя няма абсолютна власт в/у устройството. Ако успея да я направя както трябва, обещавам да я пусна заедо със сорсовете :)
Re: Приоритети в NT
Ah, za suzalenie ne sum zapoznat kak diskovete v dneshno vreme rabotiat :( No mi se struva, che dori i da napravish programa za chetene na sektori direktno ot diska, izmervaneto na vremeto niama da bude mnogo tochno poradi limitacii na architekturata v NT. Za da razberesh za kakvo govoria, bih ti obiasnil kak se pravi chetene na sektori na nisko nivo, no shte triabva da izturpish polzvanite ot men angliiski temini:
Za da se prochete informacia na nisko nivo, client-a obshto vzeto triabva da polzva interface-a za memory manager, caching, i otchasti suotvetnia disk draiver. S pomoshtta na memory manager-a i caching se pravi memory map, zapochvashta sus purvia sektor za chetene, i s dulzina na broia sektori koito triabva da se prochetat. Tazi memory map se konfigurira taka, che kogato exception se poiavi v neia, informaciata se prochita ot diska (podobno na nachina na polzvane na paging file). Ta tazi memory map se markira kato ne-prochetena, i posle se pravi read ot pametta suotvetvashta na vseki edin ot sektorite. Pri vseki memory access, exception se generira, i suotvetnia draiver obsluzva zapulvaneto na pametta s validna informacia (demek taia ot diska). Tova obsluzvane se izvurshva vutreshno v disk draivera, i pochti vinagi stava asynchronous i ot high priority tasks.
Taka che, ako ti po niakakuv nachin uspeesh da zabranish procesi da se izpulniavat kogato iskash da chetesh ot diska, nai-veroiatno cheteneto ot samia disk shte uvisne dokato procesa koito obsluzva cheteneto ne e osvoboden. I poradi sushtoto tova "asynchronous" chetene, izmervaneto na vremeto niama da e tochno, tui kato ne ti e garantirano koga procesa izvurshvasht istinskata rabota zapochva i svurshva.
Moia suvet e da se razrovish malko iz dokumentaciite za disk draiveri, i da vidish dali te ne ti davat vuzmoznost za "query" na loshite sektori.
Za da se prochete informacia na nisko nivo, client-a obshto vzeto triabva da polzva interface-a za memory manager, caching, i otchasti suotvetnia disk draiver. S pomoshtta na memory manager-a i caching se pravi memory map, zapochvashta sus purvia sektor za chetene, i s dulzina na broia sektori koito triabva da se prochetat. Tazi memory map se konfigurira taka, che kogato exception se poiavi v neia, informaciata se prochita ot diska (podobno na nachina na polzvane na paging file). Ta tazi memory map se markira kato ne-prochetena, i posle se pravi read ot pametta suotvetvashta na vseki edin ot sektorite. Pri vseki memory access, exception se generira, i suotvetnia draiver obsluzva zapulvaneto na pametta s validna informacia (demek taia ot diska). Tova obsluzvane se izvurshva vutreshno v disk draivera, i pochti vinagi stava asynchronous i ot high priority tasks.
Taka che, ako ti po niakakuv nachin uspeesh da zabranish procesi da se izpulniavat kogato iskash da chetesh ot diska, nai-veroiatno cheteneto ot samia disk shte uvisne dokato procesa koito obsluzva cheteneto ne e osvoboden. I poradi sushtoto tova "asynchronous" chetene, izmervaneto na vremeto niama da e tochno, tui kato ne ti e garantirano koga procesa izvurshvasht istinskata rabota zapochva i svurshva.
Moia suvet e da se razrovish malko iz dokumentaciite za disk draiveri, i da vidish dali te ne ti davat vuzmoznost za "query" na loshite sektori.
Re: Приоритети в NT
Ами ползва се флагът FILE_FLAG_NO_BUFFERING, който изключва кеша, както ще прочетеш по-долу:
Instructs the system to open the file with no intermediate buffering or caching. When combined with FILE_FLAG_OVERLAPPED, the flag gives maximum asynchronous performance, because the I/O does not rely on the synchronous operations of the memory manager. However, some I/O operations will take longer, because data is not being held in the cache.
An application must meet certain requirements when working with files opened with FILE_FLAG_NO_BUFFERING:
File access must begin at byte offsets within the file that are integer multiples of the volume's sector size.
File access must be for numbers of bytes that are integer multiples of the volume's sector size. For example, if the sector size is 512 bytes, an application can request reads and writes of 512, 1024, or 2048 bytes, but not of 335, 981, or 7171 bytes.
Buffer addresses for read and write operations should be sector aligned (aligned on addresses in memory that are integer multiples of the volume's sector size). Depending on the disk, this requirement may not be enforced.
One way to align buffers on integer multiples of the volume sector size is to use VirtualAlloc to allocate the buffers. It allocates memory that is aligned on addresses that are integer multiples of the operating system's memory page size. Because both memory page and volume sector sizes are powers of 2, this memory is also aligned on addresses that are integer multiples of a volume's sector size.
An application can determine a volume's sector size by calling the GetDiskFreeSpace function.
Instructs the system to open the file with no intermediate buffering or caching. When combined with FILE_FLAG_OVERLAPPED, the flag gives maximum asynchronous performance, because the I/O does not rely on the synchronous operations of the memory manager. However, some I/O operations will take longer, because data is not being held in the cache.
An application must meet certain requirements when working with files opened with FILE_FLAG_NO_BUFFERING:
File access must begin at byte offsets within the file that are integer multiples of the volume's sector size.
File access must be for numbers of bytes that are integer multiples of the volume's sector size. For example, if the sector size is 512 bytes, an application can request reads and writes of 512, 1024, or 2048 bytes, but not of 335, 981, or 7171 bytes.
Buffer addresses for read and write operations should be sector aligned (aligned on addresses in memory that are integer multiples of the volume's sector size). Depending on the disk, this requirement may not be enforced.
One way to align buffers on integer multiples of the volume sector size is to use VirtualAlloc to allocate the buffers. It allocates memory that is aligned on addresses that are integer multiples of the operating system's memory page size. Because both memory page and volume sector sizes are powers of 2, this memory is also aligned on addresses that are integer multiples of a volume's sector size.
An application can determine a volume's sector size by calling the GetDiskFreeSpace function.
Re: Приоритети в NT
А, и виж VirtualAlloc, понеже е спомената.
Това, при положение, че се занимаваш с NT, разбира се :)
Това, при положение, че се занимаваш с NT, разбира се :)
Re: Приоритети в NT
Tova oznachava, che cheteneto shte "assume" vsichki operacii s cache manager-a sa izlishni, no pri vse tova shte markira tazi pamet kato unavailable, i shte generira exception vuv vsiaka page. Obsluzvanteto na vsichki exceptions e pak asynchronno, i suotvetno shte se izvurshi ot draivera v context-a na drug high priority thread i/ili process. Niama zaobikolki, za suzalenie :(
Re: Приоритети в NT
Pamet i caching ot Win32 e obshto vzeto svurzano s normalnia Windows paging file, i suotvetno e obsluzvano na po-visoko nivo, prez failovata sistema.
Re: Приоритети в NT
А как ще изключиш вградения кеш-буфер в самия HDD? Щото ако не го направиш, измерването ще бъде доста относително ...
Mixy
Mixy
Re: Приоритети в NT
Лесно - отивам в средата и изчитам няколко мегабайта. Когато се върна в началото кеша ще е безполезен.
Re: Приоритети в NT
S.M.A.R.T. ne moje li da ti pomogne?
Toi e tochno za takiva fokusi sazdaden!
PeterS
Toi e tochno za takiva fokusi sazdaden!
PeterS
Re: Приоритети в NT
да. затова е.
ама човека не ще да пише driver.
в DDK-то за Win2000 има примери:
The Disk sample is used with Classpnp.sys as disk driver. The sample supports Plug and Play, Power Management, WMI, and failure prediction (S.M.A.R.T.), and it is 64-bit compliant.
+ The DiskPerf filter driver monitors disk-accesses, capturing performance data. It supports Plug and Play, Power Management, and WMI . It is not 64-bit compliant.
ама човека не ще да пише driver.
в DDK-то за Win2000 има примери:
The Disk sample is used with Classpnp.sys as disk driver. The sample supports Plug and Play, Power Management, WMI, and failure prediction (S.M.A.R.T.), and it is 64-bit compliant.
+ The DiskPerf filter driver monitors disk-accesses, capturing performance data. It supports Plug and Play, Power Management, and WMI . It is not 64-bit compliant.
Re: Приоритети в NT
Абе не, по принцип нямам нищо против да напиша, ама го нямам DDK-то, а и къде да го намеря? 
Si Vis Pacem, Para Bellum
Si Vis Pacem, Para Bellum