diff options
author | Googler <noreply@google.com> | 2019-02-21 13:07:25 -0800 |
---|---|---|
committer | Shentubot <shentubot@google.com> | 2019-02-21 13:08:34 -0800 |
commit | 532f4b2fbaf66382a3d9e118b5a7a3ee272c8edc (patch) | |
tree | f356c028a402945583c58dde367eba4f31953dfe /pkg/sentry/fs/tmpfs | |
parent | b2a5ad047a26dbe06c16dfa5a4e150836b79fd7c (diff) |
Internal change.
PiperOrigin-RevId: 235053594
Change-Id: Ie3d7b11843d0710184a2463886c7034e8f5305d1
Diffstat (limited to 'pkg/sentry/fs/tmpfs')
-rw-r--r-- | pkg/sentry/fs/tmpfs/inode_file.go | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/pkg/sentry/fs/tmpfs/inode_file.go b/pkg/sentry/fs/tmpfs/inode_file.go index ef5e67dda..1cc972afa 100644 --- a/pkg/sentry/fs/tmpfs/inode_file.go +++ b/pkg/sentry/fs/tmpfs/inode_file.go @@ -17,6 +17,7 @@ package tmpfs import ( "io" "sync" + "time" "gvisor.googlesource.com/gvisor/pkg/metric" "gvisor.googlesource.com/gvisor/pkg/sentry/context" @@ -31,9 +32,10 @@ import ( ) var ( - opensRO = metric.MustCreateNewUint64Metric("/in_memory_file/opens_ro", false /* sync */, "Number of times an in-memory file was opened in read-only mode.") - opensW = metric.MustCreateNewUint64Metric("/in_memory_file/opens_w", false /* sync */, "Number of times an in-memory file was opened in write mode.") - reads = metric.MustCreateNewUint64Metric("/in_memory_file/reads", false /* sync */, "Number of in-memory file reads.") + opensRO = metric.MustCreateNewUint64Metric("/in_memory_file/opens_ro", false /* sync */, "Number of times an in-memory file was opened in read-only mode.") + opensW = metric.MustCreateNewUint64Metric("/in_memory_file/opens_w", false /* sync */, "Number of times an in-memory file was opened in write mode.") + reads = metric.MustCreateNewUint64Metric("/in_memory_file/reads", false /* sync */, "Number of in-memory file reads.") + readWait = metric.MustCreateNewUint64Metric("/in_memory_file/read_wait", false /* sync */, "Time waiting on in-memory file reads, in nanoseconds.") ) // fileInodeOperations implements fs.InodeOperations for a regular tmpfs file. @@ -249,9 +251,14 @@ func (*fileInodeOperations) StatFS(context.Context) (fs.Info, error) { } func (f *fileInodeOperations) read(ctx context.Context, dst usermem.IOSequence, offset int64) (int64, error) { + var start time.Time + if fs.RecordWaitTime { + start = time.Now() + } reads.Increment() // Zero length reads for tmpfs are no-ops. if dst.NumBytes() == 0 { + fs.IncrementWait(readWait, start) return 0, nil } @@ -268,6 +275,7 @@ func (f *fileInodeOperations) read(ctx context.Context, dst usermem.IOSequence, size := f.attr.Size f.dataMu.RUnlock() if offset >= size { + fs.IncrementWait(readWait, start) return 0, io.EOF } @@ -276,6 +284,7 @@ func (f *fileInodeOperations) read(ctx context.Context, dst usermem.IOSequence, f.attrMu.Lock() f.attr.AccessTime = ktime.NowFromContext(ctx) f.attrMu.Unlock() + fs.IncrementWait(readWait, start) return n, err } |