Моё предположение таково: размер кеша имеет прямое отношение и к размеру кластера на ФС. Который может быть 1кб и выше - зависит от нужды хранить много мелких файлов, для наиболее эффективного использования дискового пространства. А системный буфер является прослойкой между разнящимися размерами кластера и API чтения с файла. То есть он заведомо больше размера сектора.
Размер кластера может быть 512 байт.
Можно сделать буфер размером в 1234 байта, существенной разницы с 1024 не будет. Скорее всего будет быстрее. Впрочем, это легко проверить.
Все. Проверил. Результаты ровно те, которые я ранее предсказывал:
Код:
package main
import "fmt"
import "os"
import "bufio"
func main() {
file, err := os.Create("hello2.txt")
if err!= nil {
fmt.Print(err)
return
}
w := bufio.NewWriterSize(file,1234)
for i:=0; i<100000000; i++ {
fmt.Fprintf(w, "a")
}
}
Собственно тут 1234 -- это та самая циферька которую будем менять.
Провел эксперимент с размером буфера в 1024, 16, и 1234 байта.
Результаты:
1024:
ETime( 0:00:22.840 ) UTime( 0:00:22.448 ) KTime( 0:00:00.358 )
ITime( 0:00:00.000 )
16:
ETime( 0:00:39.146 ) UTime( 0:00:28.704 ) KTime( 0:00:10.405 )
ITime( 0:00:00.000 )
1234:
ETime( 0:00:22.647 ) UTime( 0:00:22.323 ) KTime( 0:00:00.265 )
ITime( 0:00:00.000 )
Ну и, до кучи, попробую сейчас 4096 сделать. Думаю что особой разницы с 1234 и 1024 не будет.