From 83619aa9ac566313942c624df6ee721f5b521032 Mon Sep 17 00:00:00 2001 From: Ganesh Vernekar <15064823+codesome@users.noreply.github.com> Date: Thu, 28 May 2020 20:24:19 +0530 Subject: [PATCH] Preallocate m-map file only for Windows (#7306) Signed-off-by: Ganesh Vernekar --- tsdb/chunks/head_chunks.go | 4 ++-- tsdb/chunks/head_chunks_other.go | 22 ++++++++++++++++++++++ tsdb/chunks/head_chunks_windows.go | 20 ++++++++++++++++++++ 3 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 tsdb/chunks/head_chunks_other.go create mode 100644 tsdb/chunks/head_chunks_windows.go diff --git a/tsdb/chunks/head_chunks.go b/tsdb/chunks/head_chunks.go index 8363c67dc..9d39fc986 100644 --- a/tsdb/chunks/head_chunks.go +++ b/tsdb/chunks/head_chunks.go @@ -188,7 +188,7 @@ func (cdm *ChunkDiskMapper) openMMapFiles() (returnErr error) { for seq, fn := range files { f, err := fileutil.OpenMmapFile(fn) if err != nil { - return errors.Wrap(err, "mmap files") + return errors.Wrapf(err, "mmap files, file: %s", fn) } cdm.closers[seq] = f cdm.mmappedChunkFiles[seq] = &mmappedChunkFile{byteSlice: realByteSlice(f.Bytes())} @@ -337,7 +337,7 @@ func (cdm *ChunkDiskMapper) cut(mint int64) (returnErr error) { return err } - n, newFile, seq, err := cutSegmentFile(cdm.dir, MagicHeadChunks, headChunksFormatV1, int64(MaxHeadChunkFileSize)) + n, newFile, seq, err := cutSegmentFile(cdm.dir, MagicHeadChunks, headChunksFormatV1, HeadChunkFilePreallocationSize) if err != nil { return err } diff --git a/tsdb/chunks/head_chunks_other.go b/tsdb/chunks/head_chunks_other.go new file mode 100644 index 000000000..a1de87370 --- /dev/null +++ b/tsdb/chunks/head_chunks_other.go @@ -0,0 +1,22 @@ +// Copyright 2020 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +build !windows + +package chunks + +var ( + // HeadChunkFilePreallocationSize is the size to which the m-map file should be preallocated when a new file is cut. + // Windows needs pre-allocations while the other OS does not. + HeadChunkFilePreallocationSize int64 +) diff --git a/tsdb/chunks/head_chunks_windows.go b/tsdb/chunks/head_chunks_windows.go new file mode 100644 index 000000000..b772b64b4 --- /dev/null +++ b/tsdb/chunks/head_chunks_windows.go @@ -0,0 +1,20 @@ +// Copyright 2020 The Prometheus Authors +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package chunks + +var ( + // HeadChunkFilePreallocationSize is the size to which the m-map file should be preallocated when a new file is cut. + // Windows needs pre-allocation to m-map the file. + HeadChunkFilePreallocationSize int64 = MaxHeadChunkFileSize +)