2012-12-30 11 views
5

Obecnie przeprowadzam test wydajności dla drzewa b + w porównaniu ze zwykłym zbalansowanym-drzewem na operacjach na plikach dyskowych (może w pewnym rodzaju dbms) w C. b + drzewo ma być szybsze niż bbst, ponieważ wykonuje mniej dysków Operacje we/wy. Jednak po kilku testach system robi buforowanie plików dyskowych, plik został całkowicie zapisany w pamięci (mój rozmiar to 32 GB)! b + drzewo nie może być w żadnym wypadku szybsze niż bbst, ponieważ nie zostaną wykonane żadne operacje wejścia/wyjścia dysku. Więc zastanawiam się, czy istnieje sposób wyłączenia buforowania systemu, aby drzewo b + wygrało w perfekcję? Próbowałem otworzyć plik z O_DIRECT | O_SYNC:Czy istnieje sposób wyłączenia buforowania systemowego (unix) dla plików dyskowych?

int fd = Open("sb.dat", O_DIRECT|O_SYNC|O_CREAT|O_RDWR, S_IRWXU|S_IRWXG|S_IRWXO); 

, ale wygląda na to, że nie działa.

Oto niektóre informacje dostarczone przez getrusage()

strona odzyskuje: 1359821

strona wady: 9

+0

Dlaczego chcesz porównać z buforami off. To właśnie dostaniesz w prawdziwym życiu. Jeśli chcesz zobaczyć, jak działa, wykonując więcej zadań lub więcej pamięci, uruchom równoległe testy porównawcze lub napisz aplikację "memmuncher", która alokuje, a następnie uzyskuje dostęp do tej pamięci (w pętli - upewnij się jednak, że wciąż masz wystarczającą pojemność procesora uruchomić system). –

+0

co z 'O_SYNC'? – BAK

+0

O_DIRECT | O_SYNC | O_CREAT | O_RDWR nadal nie działa :( –

Odpowiedz

2

AFAIK jądro będzie nadal cache bloki z dysku nawet podczas korzystania O_DIRECT, ty może upuścić pamięć podręczną jądra, ale działa to tylko po raz pierwszy:

echo 3 > /proc/sys/vm/drop_caches 
+0

ale będę odwiedź kilka bloków wiele razy ..... –

+0

@ClannChen możesz nazwać to przed każdym wejściem/wyjściem – iabdalkader

Powiązane problemy