1// Copyright 2018 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5library fuchsia.minfs;
6
7using zx;
8
9// Describes metrics about the running Minfs instance.
10struct Metrics {
11    uint64 create_calls;
12    uint64 create_calls_success;
13    uint64 create_ticks;
14
15    uint64 read_calls;
16    uint64 read_size;
17    uint64 read_ticks;
18
19    uint64 write_calls;
20    uint64 write_size;
21    uint64 write_ticks;
22
23    uint64 truncate_calls;
24    uint64 truncate_ticks;
25
26    uint64 unlink_calls;
27    uint64 unlink_calls_success;
28    uint64 unlink_ticks;
29
30    uint64 rename_calls;
31    uint64 rename_calls_success;
32    uint64 rename_ticks;
33
34    // Minfs initializes entire VMOs at once.
35    // The following fields track this information.
36
37    uint64 initialized_vmos;
38    uint32 init_dnum_count; // Top-level direct blocks only
39    uint32 init_inum_count; // Top-level indirect blocks only
40    uint32 init_dinum_count;
41    uint64 init_user_data_size;
42    uint64 init_user_data_ticks;
43
44    // Minfs looks up Vnodes by ino internally (using "VnodeGet").
45    // The following fields track this information.
46
47    uint64 vnodes_opened;
48    uint64 vnodes_opened_cache_hit;
49    uint64 vnode_open_ticks;
50
51    // Minfs may look up Vnodes by name (using "LookupInternal").
52    // The following fields track this information.
53
54    uint64 lookup_calls;
55    uint64 lookup_calls_success;
56    uint64 lookup_ticks;
57};
58
59[Layout="Simple"]
60interface Minfs {
61    // Acquires metrics about the currently running filesystem.
62    0x8A000001: GetMetrics() -> (zx.status status, Metrics? metrics);
63
64    // Toggle the metrics collection system on or off.
65    0x8A000002: ToggleMetrics(bool enable) -> (zx.status status);
66};
67