From: Russ Cox Date: Fri, 11 Mar 2011 20:09:21 +0000 (-0500) Subject: runtime: split non-debugging malloc interface out of debug.go into mem.go X-Git-Tag: weekly.2011-03-15~35 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=591c74ad20315d2886d2ff4c36efe47dda92e257;p=gostls13.git runtime: split non-debugging malloc interface out of debug.go into mem.go R=r, dsymonds CC=golang-dev https://golang.org/cl/4273045 --- diff --git a/src/pkg/runtime/Makefile b/src/pkg/runtime/Makefile index e4cc081751..0cdb57ee71 100644 --- a/src/pkg/runtime/Makefile +++ b/src/pkg/runtime/Makefile @@ -22,6 +22,7 @@ GOFILES=\ debug.go\ error.go\ extern.go\ + mem.go\ sig.go\ softfloat64.go\ type.go\ diff --git a/src/pkg/runtime/debug.go b/src/pkg/runtime/debug.go index 5117e1a551..b2357db303 100644 --- a/src/pkg/runtime/debug.go +++ b/src/pkg/runtime/debug.go @@ -4,8 +4,6 @@ package runtime -import "unsafe" - // Breakpoint() executes a breakpoint trap. func Breakpoint() @@ -31,65 +29,6 @@ func Cgocalls() int64 // Goroutines returns the number of goroutines that currently exist. func Goroutines() int32 -type MemStatsType struct { - // General statistics. - // Not locked during update; approximate. - Alloc uint64 // bytes allocated and still in use - TotalAlloc uint64 // bytes allocated (even if freed) - Sys uint64 // bytes obtained from system (should be sum of XxxSys below) - Lookups uint64 // number of pointer lookups - Mallocs uint64 // number of mallocs - Frees uint64 // number of frees - - // Main allocation heap statistics. - HeapAlloc uint64 // bytes allocated and still in use - HeapSys uint64 // bytes obtained from system - HeapIdle uint64 // bytes in idle spans - HeapInuse uint64 // bytes in non-idle span - HeapObjects uint64 // total number of allocated objects - - // Low-level fixed-size structure allocator statistics. - // Inuse is bytes used now. - // Sys is bytes obtained from system. - StackInuse uint64 // bootstrap stacks - StackSys uint64 - MSpanInuse uint64 // mspan structures - MSpanSys uint64 - MCacheInuse uint64 // mcache structures - MCacheSys uint64 - BuckHashSys uint64 // profiling bucket hash table - - // Garbage collector statistics. - NextGC uint64 - PauseTotalNs uint64 - PauseNs [256]uint64 // most recent GC pause times - NumGC uint32 - EnableGC bool - DebugGC bool - - // Per-size allocation statistics. - // Not locked during update; approximate. - // 61 is NumSizeClasses in the C code. - BySize [61]struct { - Size uint32 - Mallocs uint64 - Frees uint64 - } -} - -var sizeof_C_MStats int // filled in by malloc.goc - -func init() { - if sizeof_C_MStats != unsafe.Sizeof(MemStats) { - println(sizeof_C_MStats, unsafe.Sizeof(MemStats)) - panic("MStats vs MemStatsType size mismatch") - } -} - -// MemStats holds statistics about the memory system. -// The statistics are only approximate, as they are not interlocked on update. -var MemStats MemStatsType - // Alloc allocates a block of the given size. // FOR TESTING AND DEBUGGING ONLY. func Alloc(uintptr) *byte @@ -102,9 +41,6 @@ func Free(*byte) // FOR TESTING AND DEBUGGING ONLY. func Lookup(*byte) (*byte, uintptr) -// GC runs a garbage collection. -func GC() - // MemProfileRate controls the fraction of memory allocations // that are recorded and reported in the memory profile. // The profiler aims to sample an average of diff --git a/src/pkg/runtime/mem.go b/src/pkg/runtime/mem.go new file mode 100644 index 0000000000..fe505a3292 --- /dev/null +++ b/src/pkg/runtime/mem.go @@ -0,0 +1,69 @@ +// Copyright 2009 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package runtime + +import "unsafe" + +type MemStatsType struct { + // General statistics. + // Not locked during update; approximate. + Alloc uint64 // bytes allocated and still in use + TotalAlloc uint64 // bytes allocated (even if freed) + Sys uint64 // bytes obtained from system (should be sum of XxxSys below) + Lookups uint64 // number of pointer lookups + Mallocs uint64 // number of mallocs + Frees uint64 // number of frees + + // Main allocation heap statistics. + HeapAlloc uint64 // bytes allocated and still in use + HeapSys uint64 // bytes obtained from system + HeapIdle uint64 // bytes in idle spans + HeapInuse uint64 // bytes in non-idle span + HeapObjects uint64 // total number of allocated objects + + // Low-level fixed-size structure allocator statistics. + // Inuse is bytes used now. + // Sys is bytes obtained from system. + StackInuse uint64 // bootstrap stacks + StackSys uint64 + MSpanInuse uint64 // mspan structures + MSpanSys uint64 + MCacheInuse uint64 // mcache structures + MCacheSys uint64 + BuckHashSys uint64 // profiling bucket hash table + + // Garbage collector statistics. + NextGC uint64 + PauseTotalNs uint64 + PauseNs [256]uint64 // most recent GC pause times + NumGC uint32 + EnableGC bool + DebugGC bool + + // Per-size allocation statistics. + // Not locked during update; approximate. + // 61 is NumSizeClasses in the C code. + BySize [61]struct { + Size uint32 + Mallocs uint64 + Frees uint64 + } +} + +var sizeof_C_MStats int // filled in by malloc.goc + +func init() { + if sizeof_C_MStats != unsafe.Sizeof(MemStats) { + println(sizeof_C_MStats, unsafe.Sizeof(MemStats)) + panic("MStats vs MemStatsType size mismatch") + } +} + +// MemStats holds statistics about the memory system. +// The statistics are only approximate, as they are not interlocked on update. +var MemStats MemStatsType + +// GC runs a garbage collection. +func GC()