🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.delphi
9 messages
9 total messages Started by MKi Thu, 22 Dec 2016 11:49
Jak odczytać dane fizycznie z dysku, nie z cache
#345472
Author: MKi
Date: Thu, 22 Dec 2016 11:49
23 lines
2017 bytes
Witajcie,
problem jest taki:
Program zapisuje jakiś plik na dysku (dysk jest podłączany przez USB).
Po zapisie program powinien sprawdzić poprawność zapisu
- zapewne najprościej przeczytać to, co przed chwilą zapisał.

Ale bezpośrednio po zapisie dane siedzą w cache dysku czy systemu
i odczyt nie następuje z nośnika - można to ocenić po szybkości
odczytu, wystarczy po zapisie odłączyć dysk, podłączyć go z powrotem
i odczyt jest wyraźnie wolniejszy.

No i pojawia się pytanie - jak wyczyścić ten cache, żeby wymusić
odczyt z nośnika? Próbowałem programowo odłączyć dysk (jak przez
ikonkę "Bezpiecznie usuwanie sprzętu"), ale żeby system go
zobaczył z powrotem trzeba go fizycznie odłączyć i podłączyć.

Można też próbować zapchać cache innymi danymi, ale jak sprawdzić
jego rozmiar? I ile tych cache'y właściwie jest?

Delphi 2009 + Windows 7 Pro.

Pozdrowienia przedświąteczne,
MKi
Re: Jak odczytać dane fizycznie z dysku, nie z cache
#345473
Author: Piotr Rezmer
Date: Thu, 22 Dec 2016 12:12
13 lines
1410 bytes
W dniu 2016-12-22 o 12:49, MKi pisze:
> No i pojawia się pytanie - jak wyczyścić ten cache, żeby wymusić
> odczyt z nośnika? Próbowałem programowo odłączyć dysk (jak przez
> ikonkę "Bezpiecznie usuwanie sprzętu"), ale żeby system go
> zobaczył z powrotem trzeba go fizycznie odłączyć i podłączyć.

A co to za program i dlaczego kombinujesz pod górkę? Piszesz jakiś 
benchmark?

-- 
pozdrawiam
Piotr
XLR250&bmw_f650_dakar
Re: Jak odczytać dane fizycznie z dysku, nie z cache
#345476
Author: Piotr Rezmer
Date: Thu, 22 Dec 2016 12:16
18 lines
1475 bytes
W dniu 2016-12-22 o 12:49, MKi pisze:
> Witajcie,
> problem jest taki:
> Program zapisuje jakiś plik na dysku (dysk jest podłączany przez USB).
> Po zapisie program powinien sprawdzić poprawność zapisu
> - zapewne najprościej przeczytać to, co przed chwilą zapisał.

Może chodzi Ci o komendę:

VERIFY

Z linii poleceń możesz włączać i wyłączać weryfikację zapisu na dysk. U 
mnie w Windows 10 Pro, na dysku SSD jest domyślnie wyłączona.

-- 
pozdrawiam
Piotr
XLR250&bmw_f650_dakar
Re: Jak odczytać dane fizycznie z dysku, nie z cache
#345474
Author: MKi
Date: Thu, 22 Dec 2016 12:43
18 lines
1916 bytes
-- Wiadomość oryginalna (wysłana  22.12.2016 13:12) --
> W dniu 2016-12-22 o 12:49, MKi pisze:
>> No i pojawia się pytanie - jak wyczyścić ten cache, żeby wymusić
>> odczyt z nośnika? Próbowałem programowo odłączyć dysk (jak przez
>> ikonkę "Bezpiecznie usuwanie sprzętu"), ale żeby system go
>> zobaczył z powrotem trzeba go fizycznie odłączyć i podłączyć.
>
> A co to za program i dlaczego kombinujesz pod górkę? Piszesz jakiś
> benchmark?
>

Program - coś w rodzaju codziennego automatycznego backupu.
Chodzi o weryfikację, czy backup zrobił się prawidłowo.
(To w końcu koszmar backupującego, jak się dowie w potrzebie,
że backup jest, ale nieczytelny).

Pozdrowienia przedświąteczne,
MKi
Re: Jak odczytać dane fizycznie z dysku, nie z cache
#345477
Author: MKi
Date: Thu, 22 Dec 2016 13:08
27 lines
2077 bytes
-- Wiadomość oryginalna (wysłana  22.12.2016 13:16) --
> W dniu 2016-12-22 o 12:49, MKi pisze:
>> Witajcie,
>> problem jest taki:
>> Program zapisuje jakiś plik na dysku (dysk jest podłączany przez USB).
>> Po zapisie program powinien sprawdzić poprawność zapisu
>> - zapewne najprościej przeczytać to, co przed chwilą zapisał.
>
> Może chodzi Ci o komendę:
>
> VERIFY
>
> Z linii poleceń możesz włączać i wyłączać weryfikację zapisu na dysk. U
> mnie w Windows 10 Pro, na dysku SSD jest domyślnie wyłączona.
>

Hm, u mnie ten tekst:

   C:\>verify /?
   Włącza przeprowadzanie przez program cmd.exe weryfikacji poprawności
   zapisywania plików na dysku.

rozumiem tak, że dotyczy tylko zapisów wykonywanych z poziomu cmd.
Źle rozumiem?

Pozdrowienia przedświąteczne,
MKi
Re: Jak odczytać dane fizycznie z dysku, nie z cache
#345479
Author: mmm
Date: Thu, 22 Dec 2016 14:31
22 lines
1679 bytes
W dniu 2016-12-22 o 12:49, MKi pisze:
> Witajcie,
> problem jest taki:
> Program zapisuje jakiś plik na dysku (dysk jest podłączany przez USB).
> Po zapisie program powinien sprawdzić poprawność zapisu
> - zapewne najprościej przeczytać to, co przed chwilą zapisał.

Ja stojac przed podobnym problemem zrobiłem tak: pytam "czy bezpiecznie 
odlaczyc USB"
jak użytkownik wybierze tak to odłączam USB a do czasu zapisania zmian 
na dysku "proszę czekać".

Problem sie rozwiazał a jak ktoś nie che czekac to jego problem, ja w 
logach mam zapisane kiedy wyciagnał USB :D


I link
http://fspsa.free.fr/deconnexion_rapide_clef_usb.htm

Z tego co widzę możesz użyć sync.exe z pakietu Sysinternals

M
Re: Jak odczytać dane fizycznie z dysku, nie z cache
#345478
Author: Piotr Rezmer
Date: Thu, 22 Dec 2016 14:55
25 lines
1833 bytes
W dniu 2016-12-22 o 14:08, MKi pisze:

> rozumiem tak, że dotyczy tylko zapisów wykonywanych z poziomu cmd.
> Źle rozumiem?

Z tym jest różnie. Ponoć Windows Explorer zawsze używa włączonej 
weryfikacji. Czyli ten switch nie działa globalnie. W takiej sytuacji 
można spróbować szukać czegoś w kierunku "how to flush disk cache", np:

wykorzystać utility sync:
http://superuser.com/questions/833552/manually-flushing-write-cache-on-windows

Wyczyścić cache:
http://stackoverflow.com/questions/22666042/disable-or-flush-page-cache-on-windows/23085045#23085045

FlushFileBuffers:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364439(v=vs.85).aspx

Flashmem.exe
https://chadaustin.me/2009/04/flushing-disk-cache/

-- 
pozdrawiam
Piotr
XLR250&bmw_f650_dakar
Re: Jak odczytać dane fizycznie z dysku, nie z cache
#345475
Author: arivald
Date: Thu, 22 Dec 2016 17:24
36 lines
2211 bytes
W dniu 2016-12-22 o 13:43, MKi pisze:
> -- Wiadomość oryginalna (wysłana  22.12.2016 13:12) --
>> W dniu 2016-12-22 o 12:49, MKi pisze:
>>> No i pojawia się pytanie - jak wyczyścić ten cache, żeby wymusić
>>> odczyt z nośnika? Próbowałem programowo odłączyć dysk (jak przez
>>> ikonkę "Bezpiecznie usuwanie sprzętu"), ale żeby system go
>>> zobaczył z powrotem trzeba go fizycznie odłączyć i podłączyć.
>>
>> A co to za program i dlaczego kombinujesz pod górkę? Piszesz jakiś
>> benchmark?
>>
>
> Program - coś w rodzaju codziennego automatycznego backupu.
> Chodzi o weryfikację, czy backup zrobił się prawidłowo.
> (To w końcu koszmar backupującego, jak się dowie w potrzebie,
> że backup jest, ale nieczytelny).
>
> Pozdrowienia przedświąteczne,
> MKi

WinAPI CreateFile() + FILE_FLAG_BACKUP_SEMANTICS + 
FILE_FLAG_NO_BUFFERING, do odczytu dodatkowo FILE_FLAG_SEQUENTIAL_SCAN, 
do zapisu FILE_FLAG_WRITE_THROUGH.

Nie pominiesz tak sprzętowych cache.
I pocztytaj o ograniczeniach na zapis i odczyt przy 
FILE_FLAG_NO_BUFFERING, 
https://msdn.microsoft.com/en-us/library/windows/desktop/cc644950(v=vs.85).aspx.


Albo możesz otworzyć urządzanie bezpośrednio, ale wtedy musisz rozumieć 
filesystem, a to naprawdę ogromny temat.


-- 
Arivald
Re: Jak odczytać dane fizycznie z dysku, nie z cache
#345480
Author: marfi
Date: Thu, 22 Dec 2016 19:34
15 lines
1681 bytes
Użytkownik "MKi" <emkai@to-nalezy-wywalic.op.pl> napisał w wiadomości 
news:585bbdb6$0$5148$65785112@news.neostrada.pl...
> Witajcie,
> problem jest taki:
> Program zapisuje jakiś plik na dysku (dysk jest podłączany przez USB).
> Po zapisie program powinien sprawdzić poprawność zapisu
> - zapewne najprościej przeczytać to, co przed chwilą zapisał.
>
...
To znasz:
https://msdn.microsoft.com/en-us/library/windows/desktop/cc644950(v=vs.85).aspx


-- 
marfi 
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads