Spędziłem trochę czasu pamięć bada odwzorowaną IO dla aplikacji pracuję nad. Mam bardzo duże pliki (w skali TB) i chcę je zmapować do pamięci, zarówno do odczytu, jak i zapisu, przy maksymalnym wykorzystaniu buforowania na poziomie systemu operacyjnego. Oprogramowanie, które piszę, musi działać pod kontrolą systemów Unix/Linux i Windows ... wydajność jest krytyczna.Platforma niezależny Zmapowane [file] IO
Odkryłem boost::iostreams::mapped_file_source
i boost::iostreams::mapped_file_sink
, które zapewniają większość udogodnień, których szukam. Obiekty, które chciałbym, ale nie znalazłem to:
- Wymuszenie synchronizacji zapisanych danych na dysku (
msync
(2) na Unix;FlushViewOfFile
Windows) - Blokowanie plików, aby zapobiec dwóch procesów próby zapisu do tego samego pliku w tym samym czasie (lub czytać, gdy plik jest nadal napisane ..)
- Kontrolowanie atrybuty pliku podczas tworzenia (Unix)
mogę robić te rzeczy za pomocą "boost/iostreams/device/mapped_file.hpp"
? Czy istnieją inne niezależne od platformy biblioteki, które lepiej odpowiadają moim wymaganiom? Czy muszę opracować własną bibliotekę międzyplatformową, aby uzyskać tę elastyczność?
okazji "Zmapowane I/O" na ogół odnosi się do czytania porty we/wy, przy użyciu adresów (czyli pamięci odwzorowanym) (na przykład za pomocą wskaźnika), a nie za pomocą szczególnego procesora i/O instrukcje. –
Punkt targów. Mówię o pliku I/O odwzorowanym na pamięć [http://en.wikipedia.org/wiki/Memory-mapped_file] - i zredagowałem tytuł, aby to odzwierciedlić. – aSteve