Файловый кэш
Dec. 24th, 2007 11:27 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Насколько я помню, винда кэширует обращения к диску. В таком случае вопрос: почему сделать еще один кэш, загрузку в него из файла блоками, кратными размеру кластера и читать мелкие объекты из него получается быстрее чем читать их же напрямую?
no subject
Date: 2007-12-24 09:50 pm (UTC)no subject
Date: 2007-12-24 10:33 pm (UTC)no subject
Date: 2007-12-24 10:34 pm (UTC)no subject
Date: 2007-12-25 11:05 am (UTC)no subject
Date: 2007-12-24 10:35 pm (UTC)К тому же прочитанный явно в память кусок файла - это уже кусок памяти, и может включаться кеширование обычной памяти в кеше процессора.
no subject
Date: 2007-12-24 11:10 pm (UTC)Re: Reply to your comment...
Date: 2007-12-25 08:08 am (UTC)Что-то мне подсказывает, что кеш процессора работает тоже довольно крупными цельными блоками.
Re: Reply to your comment...
Date: 2007-12-25 11:25 am (UTC)Доля истины есть в том, что если прога, грубо говоря, читает по байту, вызывая каждый раз ReadFile, то между двумя последовательными вызовами ReadFile произойдет очень много всего - context switch, всякое прочее, и вероятность того, что вследствие этого "всякого прочего" нужные данные из кэша будут вытеснены, больше, чем если прога просто тупо делает memcpy из своего внутреннего кэша.
Но в реальности, если мы говорим действительно о небольших кусках данных - типа байт 16 - то это все равно пренебрежимо мало по сравнению с объемом кода, который нужно выполнить, чтобы все-таки скопировать эти 16 байт. Поэтому скорость в итоге определяется той разницей, что проге в user space потребуется выполнить, ну, грубо, килобайт кода, чтобы добраться до этих данных, а ReadFile - ну, килобайт 20-30.
no subject
Date: 2007-12-24 11:06 pm (UTC)Вторая проблема в том, что кэш - штука негарантированная, и закэшенную страничку винды могут внезапно взять и порешить использовать под что-то более, с их точки зрения, важное. Если же выделить себе память в user space, ее никто никогда под что-нибудь другое не заюзает (ну, конечно, если не считать своп, но в современном мире можно считать, что его нет).
no subject
Date: 2007-12-24 11:38 pm (UTC)no subject
Date: 2007-12-25 11:16 am (UTC)no subject
Date: 2007-12-25 04:19 pm (UTC)> получается быстрее чем читать их же напрямую?
Date: 2008-01-14 11:58 pm (UTC)