mirror of
https://github.com/seaweedfs/seaweedfs.git
synced 2024-01-19 02:48:24 +00:00
Allocate in 16MB chunks, make creation of memory maps always aligned to 16MB chunks
This commit is contained in:
parent
84f2dc3b53
commit
4257582db5
|
@ -38,19 +38,26 @@ var (
|
||||||
|
|
||||||
var system_info, err = getSystemInfo()
|
var system_info, err = getSystemInfo()
|
||||||
|
|
||||||
var chunk_size = uint64(system_info.dwAllocationGranularity) * 512
|
var chunk_size = uint64(system_info.dwAllocationGranularity) * 256
|
||||||
|
|
||||||
func (mMap *MemoryMap) CreateMemoryMap(file *os.File, maxlength uint64) {
|
func (mMap *MemoryMap) CreateMemoryMap(file *os.File, maxlength uint64) {
|
||||||
|
|
||||||
maxlength_high := uint32(maxlength >> 32)
|
chunks := (maxlength / chunk_size)
|
||||||
maxlength_low := uint32(maxlength & 0xFFFFFFFF)
|
if chunks*chunk_size < maxlength {
|
||||||
|
chunks = chunks + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
alignedMaxLength := chunks * chunk_size
|
||||||
|
|
||||||
|
maxlength_high := uint32(alignedMaxLength >> 32)
|
||||||
|
maxlength_low := uint32(alignedMaxLength & 0xFFFFFFFF)
|
||||||
file_memory_map_handle, err := windows.CreateFileMapping(windows.Handle(file.Fd()), nil, windows.PAGE_READWRITE, maxlength_high, maxlength_low, nil)
|
file_memory_map_handle, err := windows.CreateFileMapping(windows.Handle(file.Fd()), nil, windows.PAGE_READWRITE, maxlength_high, maxlength_low, nil)
|
||||||
|
|
||||||
if err == nil {
|
if err == nil {
|
||||||
mMap.File = file
|
mMap.File = file
|
||||||
mMap.file_memory_map_handle = uintptr(file_memory_map_handle)
|
mMap.file_memory_map_handle = uintptr(file_memory_map_handle)
|
||||||
mMap.write_map_views = make([]MemoryBuffer, 0, maxlength/chunk_size)
|
mMap.write_map_views = make([]MemoryBuffer, 0, alignedMaxLength/chunk_size)
|
||||||
mMap.max_length = maxlength
|
mMap.max_length = alignedMaxLength
|
||||||
mMap.End_of_file = -1
|
mMap.End_of_file = -1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue