From 0aec3a9910ff6100845ffb310ca70272f1f72c6c Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Mon, 28 Jun 2021 10:39:03 -0400 Subject: [PATCH 01/39] Create a znode command for sdb. Also create znode2inode and inode2znode commands. Signed-off-by: Paul Zuchowski --- sdb/commands/zfs/znode.py | 161 ++++++++++++++++++ .../zfs/echo 0xffffa08884646ec0 | znode | 2 + ...o 0xffffa08884646ec0 | znode | znode2inode | 2 + ...6470b8 | cast struct inode * | inode2znode | 2 + .../zfs/znode |head 10 |znode | 11 ++ tests/integration/test_zfs_generic.py | 6 + 6 files changed, 184 insertions(+) create mode 100644 sdb/commands/zfs/znode.py create mode 100644 tests/integration/data/regression_output/zfs/echo 0xffffa08884646ec0 | znode create mode 100644 tests/integration/data/regression_output/zfs/echo 0xffffa08884646ec0 | znode | znode2inode create mode 100644 tests/integration/data/regression_output/zfs/echo 0xffffa088846470b8 | cast struct inode * | inode2znode create mode 100644 tests/integration/data/regression_output/zfs/znode |head 10 |znode diff --git a/sdb/commands/zfs/znode.py b/sdb/commands/zfs/znode.py new file mode 100644 index 00000000..e3a33ae7 --- /dev/null +++ b/sdb/commands/zfs/znode.py @@ -0,0 +1,161 @@ +# +# Copyright 2019 Delphix +# Copyright 2021 Datto, Inc. +# +# 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. +# + +# pylint: disable=missing-docstring + +from typing import Iterable +import os +import drgn +from drgn.helpers.linux.fs import inode_path +import sdb +from sdb.target import type_canonicalize, get_prog +from sdb.command import Command + + +class Inode2znode(Command): + """ + Convert an inode to a znode and display it. + + sdb> echo 0xffff9ca45647f588 | cast struct inode * | itoz + ADDR OBJ UNLINKED BLKSZ SIZE ... + 0xffff9ca45647f398 2 0 29184 28772 ... + """ + + names = ["inode2znode", "i2z", "itoz"] + + def _call(self, objs: Iterable[drgn.Object]) -> None: + for obj in objs: + obj_type = type_canonicalize(obj.type_) + if obj_type.kind != drgn.TypeKind.POINTER: + raise sdb.CommandError( + self.name, + f"'{obj.type_.type_name()}' is not a valid pointer type") + obj = drgn.Object(get_prog(), + type=obj.type_.type, + address=obj.value_()) + znode = drgn.container_of(obj.address_of_(), 'struct znode', + 'z_inode') + znodes = sdb.execute_pipeline([znode], [Znode()]) + Znode.pretty_print(znode, znodes) + + +class Znode2inode(Command): + """ + Convert a znode to an inode and display it. + + sdb> echo 0xffff9ca45647f398 | znode | ztoi + ADDR INO MODE LINKS BLOCKS SB + 0xffff9ca45647f588 2 33184 1 1 0xffff9ca464ae8800 + + sdb> znode | znode2inode + ADDR INO MODE LINKS BLOCKS SB + 0xffff9ca456478638 2 16877 2 1 0xffff9ca486819800 + 0xffff9ca456478a80 34 16877 2 1 0xffff9ca464ae8800 + 0xffff9ca456478ec8 -1 16895 1 0 0xffff9ca464ae8800 + 0xffff9ca45647b108 3 33184 1 1 0xffff9ca464ae8800 + 0xffff9ca45647b998 -1 16895 1 0 0xffff9ca486819800 + 0xffff9ca45647c228 3 16877 2 1 0xffff9ca486819800 + 0xffff9ca45647dbd8 34 16877 4 1 0xffff9ca486819800 + 0xffff9ca45647e8b0 34 16877 2 1 0xffff9ca464aeb000 + 0xffff9ca45647f588 2 33184 1 1 0xffff9ca464ae8800 + 0xffff9ca45647f9d0 -1 16895 1 0 0xffff9ca464aeb000 + """ + + names = ["znode2inode", "z2i", "ztoi"] + + @staticmethod + def inode_print(znode: drgn.Object) -> None: + inode = znode.z_inode + i = drgn.cast('int', znode.z_id) + print("{:18} {:>8} {:>8} {:>8} {:>8} {:18}".format( + hex(inode.address_), int(i), int(inode.i_mode), int(inode.i_nlink), + int(inode.i_blocks), hex(int(inode.i_sb)))) + + def _call(self, objs: Iterable[drgn.Object]) -> None: + print("{:18} {:>8} {:>8} {:>8} {:>8} {:18}".format( + "ADDR", "INO", "MODE", "LINKS", "BLOCKS", "SB")) + for obj in objs: + obj_type = type_canonicalize(obj.type_) + if obj_type.kind != drgn.TypeKind.POINTER: + raise sdb.CommandError( + self.name, + f"'{obj.type_.type_name()}' is not a valid pointer type") + obj = drgn.Object(get_prog(), + type=obj.type_.type, + address=obj.value_()) + self.inode_print(obj) + + +class Znode(sdb.Locator, sdb.PrettyPrinter): + """ + Iterate and pretty-print znodes + + DESCRIPTION + + Iterate znodes or convert an address to a znode + and display it. + + sdb> znode + ADDR OBJ UNLINKED BLKSZ SIZE ... + 0xffff9ca456478448 2 0 512 2 ... + 0xffff9ca456478890 34 0 512 6 ... + 0xffff9ca456478cd8 -1 0 0 0 ... + 0xffff9ca45647af18 3 0 29696 29257 ... + 0xffff9ca45647b7a8 -1 0 0 0 ... + 0xffff9ca45647c038 3 0 512 2 ... + 0xffff9ca45647d9e8 34 0 512 4 ... + 0xffff9ca45647e6c0 34 0 512 4 ... + 0xffff9ca45647f398 2 0 29184 28772 ... + 0xffff9ca45647f7e0 -1 0 0 0 ... + + sdb> echo 0xffff9ca45647f398 | znode + ADDR OBJ UNLINKED BLKSZ SIZE ... + 0xffff9ca45647f398 2 0 29184 28772 ... + """ + + names = ["znode"] + input_type = "znode_t *" + output_type = "znode_t *" + + def pretty_print(self, objs: Iterable[drgn.Object]) -> None: + print("{:18} {:>8} {:8} {:>8} {:>18} {:>18} {:>18} {:<18}".format( + "ADDR", "OBJ", "UNLINKED", "BLKSZ", "SIZE", "INODE", "ZFSVFS", "FILENAME")) + for znode in objs: + i = drgn.cast('int', znode.z_id) + inode = znode.z_inode + ipath = inode_path(inode) + fn = "" + if ipath is not None: + fn = os.fsdecode(ipath) + print( + "{:18} {:>8d} {:>8d} {:>8d} {:>18} {:>18} {:>18} {:<18}".format( + hex(znode), int(i), int(znode.z_unlinked), + int(znode.z_blksz), int(znode.z_size), + hex(znode.z_inode.address_of_()), + hex(znode.z_inode.i_sb.s_fs_info), str(fn))) + + def no_input(self) -> drgn.Object: + znode_cache = drgn.cast("spl_kmem_cache_t *", + sdb.get_object("znode_cache")) + znode_kmem = znode_cache.skc_linux_cache + znodes = sdb.execute_pipeline( + [znode_kmem], + [sdb.Walk(), sdb.Cast(["znode_t *"])], + ) + for znode in znodes: + if znode.z_id != 0: + yield znode diff --git a/tests/integration/data/regression_output/zfs/echo 0xffffa08884646ec0 | znode b/tests/integration/data/regression_output/zfs/echo 0xffffa08884646ec0 | znode new file mode 100644 index 00000000..b87812f8 --- /dev/null +++ b/tests/integration/data/regression_output/zfs/echo 0xffffa08884646ec0 | znode @@ -0,0 +1,2 @@ +ADDR OBJ UNLINKED BLKSZ SIZE INODE ZFSVFS FILENAME +0xffffa08884646ec0 1032 0 1024 581 0xffffa088846470b8 0xffffa08953ea8000 etc/profile diff --git a/tests/integration/data/regression_output/zfs/echo 0xffffa08884646ec0 | znode | znode2inode b/tests/integration/data/regression_output/zfs/echo 0xffffa08884646ec0 | znode | znode2inode new file mode 100644 index 00000000..a40085f2 --- /dev/null +++ b/tests/integration/data/regression_output/zfs/echo 0xffffa08884646ec0 | znode | znode2inode @@ -0,0 +1,2 @@ +ADDR INO MODE LINKS BLOCKS SB +0xffffa088846470b8 1032 33188 1 2 0xffffa08955983800 diff --git a/tests/integration/data/regression_output/zfs/echo 0xffffa088846470b8 | cast struct inode * | inode2znode b/tests/integration/data/regression_output/zfs/echo 0xffffa088846470b8 | cast struct inode * | inode2znode new file mode 100644 index 00000000..b87812f8 --- /dev/null +++ b/tests/integration/data/regression_output/zfs/echo 0xffffa088846470b8 | cast struct inode * | inode2znode @@ -0,0 +1,2 @@ +ADDR OBJ UNLINKED BLKSZ SIZE INODE ZFSVFS FILENAME +0xffffa08884646ec0 1032 0 1024 581 0xffffa088846470b8 0xffffa08953ea8000 etc/profile diff --git a/tests/integration/data/regression_output/zfs/znode |head 10 |znode b/tests/integration/data/regression_output/zfs/znode |head 10 |znode new file mode 100644 index 00000000..0d28c090 --- /dev/null +++ b/tests/integration/data/regression_output/zfs/znode |head 10 |znode @@ -0,0 +1,11 @@ +ADDR OBJ UNLINKED BLKSZ SIZE INODE ZFSVFS FILENAME +0xffffa08884644000 123 0 512 7 0xffffa088846441f8 0xffffa08953ea8000 etc/profile.d +0xffffa08884644440 68902 0 512 298 0xffffa08884644638 0xffffa08953ea8000 usr/lib/systemd/user/gpg-agent-browser.socket +0xffffa08884644880 68905 0 512 223 0xffffa08884644a78 0xffffa08953ea8000 usr/lib/systemd/user/gpg-agent.service +0xffffa08884644cc0 68898 0 512 231 0xffffa08884644eb8 0xffffa08953ea8000 usr/lib/systemd/user/dirmngr.service +0xffffa08884645100 1900 0 4096 3635 0xffffa088846452f8 0xffffa08953ea8000 etc/security/group.conf +0xffffa08884645540 68904 0 512 308 0xffffa08884645738 0xffffa08953ea8000 usr/lib/systemd/user/gpg-agent-ssh.socket +0xffffa08884645980 2037 0 512 96 0xffffa08884645b78 0xffffa08953ea8000 etc/profile.d/01-locale-fix.sh +0xffffa08884645dc0 67553 0 512 27 0xffffa08884645fb8 0xffffa08953ea8000 usr/lib/systemd/user/sockets.target.wants/gpg-agent-browser.socket +0xffffa08884646200 68899 0 512 204 0xffffa088846463f8 0xffffa08953ea8000 usr/lib/systemd/user/dirmngr.socket +0xffffa08884646640 67554 0 512 25 0xffffa08884646838 0xffffa08953ea8000 usr/lib/systemd/user/sockets.target.wants/gpg-agent-extra.socket diff --git a/tests/integration/test_zfs_generic.py b/tests/integration/test_zfs_generic.py index 812c2ae7..812e4810 100644 --- a/tests/integration/test_zfs_generic.py +++ b/tests/integration/test_zfs_generic.py @@ -61,6 +61,12 @@ "spa data | vdev | metaslab | filter 'obj.ms_loaded == 1' | head 1 | member ms_sm.sm_phys.smp_histogram | zhist", "spa data | vdev | metaslab | filter 'obj.ms_loaded == 1' | head 1 | member ms_sm.sm_phys.smp_histogram | zhist 9", "spa data | vdev | metaslab | filter 'obj.ms_loaded == 1' | head 1 | member ms_allocatable.rt_histogram | zhist", + + # znode + "znode |head 10 |znode", + "echo 0xffffa08884646ec0 | znode", + "echo 0xffffa08884646ec0 | znode | znode2inode", + "echo 0xffffa088846470b8 | cast struct inode * | inode2znode", ] # yapf: disable From fa9ec7d7ac187382ed96c5f949f6b650f7297cb9 Mon Sep 17 00:00:00 2001 From: Tony Perkins Date: Mon, 12 Jul 2021 20:37:50 -0700 Subject: [PATCH 02/39] Allow sdb to load commands if the walker class cannot find all structures. This is an issue with 0.8.4 version of zfs. Signed-off-by: Tony Perkins --- sdb/command.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/sdb/command.py b/sdb/command.py index 670b6037..edd3b814 100644 --- a/sdb/command.py +++ b/sdb/command.py @@ -597,10 +597,13 @@ def _help_message(input_type: drgn.Type = None) -> str: return msg def _call(self, objs: Iterable[drgn.Object]) -> Iterable[drgn.Object]: - baked = { - type_canonicalize_name(type_): class_ - for type_, class_ in Walker.allWalkers.items() - } + baked = dict() + for type_, class_ in Walker.allWalkers.items(): + try: + baked[type_canonicalize_name(type_)] = class_ + except LookupError as exc: + pass + has_input = False for i in objs: has_input = True From cbc21f2bda7549622c2731f44c5ffc3ad16ebf41 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Wed, 22 Sep 2021 10:33:33 -0400 Subject: [PATCH 03/39] Add zfs_refcount command --- sdb/commands/zfs/zfs_refcount.py | 61 +++++++++++++++++++ .../spa | member spa_refcount | zfs_refcount | 3 + tests/integration/test_zfs_generic.py | 3 + 3 files changed, 67 insertions(+) create mode 100644 sdb/commands/zfs/zfs_refcount.py create mode 100644 tests/integration/data/regression_output/zfs/spa | member spa_refcount | zfs_refcount diff --git a/sdb/commands/zfs/zfs_refcount.py b/sdb/commands/zfs/zfs_refcount.py new file mode 100644 index 00000000..cd8182e5 --- /dev/null +++ b/sdb/commands/zfs/zfs_refcount.py @@ -0,0 +1,61 @@ +# +# Copyright 2020 Datto, Inc. +# +# 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. +# + +# pylint: disable=missing-docstring + +from typing import Iterable +import drgn +import sdb +from sdb.commands.spl.spl_list import SPLList + + +class Zfs_Refcount(sdb.Locator, sdb.PrettyPrinter): + names = ["zfs_refcount"] + input_type = "zfs_refcount_t *" + output_type = "zfs_refcount_t *" + + @staticmethod + def print_ref(obj: drgn.Object, indent: int) -> None: + ptr = int(obj.ref_holder) + c = sdb.create_object("char *", ptr) + s = c.string_().decode("utf-8") + print(f"{' '*indent}{hex(ptr)} {s} ") + + @staticmethod + def print_one(zr: drgn.Object, indent: int) -> None: + # handle the lack of rc_tracked in non-debug zfs build + tracked = 0 + try: + tracked = zr.rc_tracked + except AttributeError: + pass + print( + f"{' '*indent}zfs_refcount_t at {hex(int(zr))} has {int(zr.rc_count)} " + f"current holds tracked={int(tracked)}") + if tracked: + ref_list = zr.rc_list + list_addr = ref_list.address_of_() + refs = sdb.execute_pipeline( + [list_addr], + [SPLList(), sdb.Cast(["reference_t *"])], + ) + + for ref in refs: + Zfs_Refcount.print_ref(ref, indent * 2) + + def pretty_print(self, objs: Iterable[drgn.Object]) -> None: + for zr in objs: + self.print_one(zr, 0) diff --git a/tests/integration/data/regression_output/zfs/spa | member spa_refcount | zfs_refcount b/tests/integration/data/regression_output/zfs/spa | member spa_refcount | zfs_refcount new file mode 100644 index 00000000..399a11f5 --- /dev/null +++ b/tests/integration/data/regression_output/zfs/spa | member spa_refcount | zfs_refcount @@ -0,0 +1,3 @@ +zfs_refcount_t at 0xffffa0894e7223c8 has 12 current holds tracked=0 +zfs_refcount_t at 0xffffa089413ba3c8 has 15 current holds tracked=0 +zfs_refcount_t at 0xffffa08955c463c8 has 39 current holds tracked=0 diff --git a/tests/integration/test_zfs_generic.py b/tests/integration/test_zfs_generic.py index 812c2ae7..dd738718 100644 --- a/tests/integration/test_zfs_generic.py +++ b/tests/integration/test_zfs_generic.py @@ -61,6 +61,9 @@ "spa data | vdev | metaslab | filter 'obj.ms_loaded == 1' | head 1 | member ms_sm.sm_phys.smp_histogram | zhist", "spa data | vdev | metaslab | filter 'obj.ms_loaded == 1' | head 1 | member ms_sm.sm_phys.smp_histogram | zhist 9", "spa data | vdev | metaslab | filter 'obj.ms_loaded == 1' | head 1 | member ms_allocatable.rt_histogram | zhist", + + # zfs_refcount + "spa | member spa_refcount | zfs_refcount", ] # yapf: disable From 36582d497d16c684fc61ee5144d2ef3ca84f6eb0 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 5 Oct 2021 15:51:58 -0400 Subject: [PATCH 04/39] Add a zio command to sdb --- sdb/commands/zfs/internal/__init__.py | 7 + sdb/commands/zfs/zio.py | 134 ++++++++++++++++++ .../zfs/echo 0xffffa089533a2700 | zio | 2 + .../data/regression_output/zfs/zio | 19 +++ 4 files changed, 162 insertions(+) create mode 100644 sdb/commands/zfs/zio.py create mode 100644 tests/integration/data/regression_output/zfs/echo 0xffffa089533a2700 | zio create mode 100644 tests/integration/data/regression_output/zfs/zio diff --git a/sdb/commands/zfs/internal/__init__.py b/sdb/commands/zfs/internal/__init__.py index 7909c29c..8ae8d1e4 100644 --- a/sdb/commands/zfs/internal/__init__.py +++ b/sdb/commands/zfs/internal/__init__.py @@ -17,6 +17,7 @@ # pylint: disable=missing-docstring import os +import time import drgn import sdb @@ -39,6 +40,10 @@ def nicenum(num: int, suffix: str = "B") -> str: return "{}{}{}".format(int(num), "Y", suffix) +def gethrtime() -> int: + return int(time.clock_gettime(time.CLOCK_MONOTONIC) * NANOSEC) + + def P2PHASE(x: drgn.Object, align: int) -> int: return int(x & (align - 1)) @@ -70,3 +75,5 @@ def WEIGHT_GET_COUNT(weight: int) -> int: METASLAB_ACTIVE_MASK = (METASLAB_WEIGHT_PRIMARY | METASLAB_WEIGHT_SECONDARY | METASLAB_WEIGHT_CLAIM) BTREE_LEAF_SIZE = 4096 +NANOSEC = 1000000000 +MSEC = 1000 diff --git a/sdb/commands/zfs/zio.py b/sdb/commands/zfs/zio.py new file mode 100644 index 00000000..11c93481 --- /dev/null +++ b/sdb/commands/zfs/zio.py @@ -0,0 +1,134 @@ +# +# Copyright 2019 Delphix +# Copyright 2021 Datto, Inc. +# +# 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. +# + +# pylint: disable=missing-docstring + +from typing import Iterable, List, Optional +import os +import drgn +import sdb +from sdb.commands.zfs.internal import enum_lookup, gethrtime, NANOSEC, MSEC + + +class Zio(sdb.Locator, sdb.PrettyPrinter): + """ + Iterate and pretty-print zios + + DESCRIPTION + + Iterate zios or convert an address to a zio + and display it. + + EXAMPLES + + sdb> zio + ADDR TYPE STAGE WAITER TIME_ELAPSED + 0xffff927ed80d84e0 TYPE_NULL OPEN + 0xffff927edde6e220 TYPE_NULL OPEN + 0xffff927edde73a80 TYPE_NULL CHECKSUM_VERIFY 0xffff927f02dc8000 + 0xffff927edde730c0 TYPE_WRITE VDEV_IO_START + 0xffff927ed8169860 TYPE_WRITE VDEV_IO_START 4617ms + 0xffff927ed816a220 TYPE_WRITE VDEV_IO_START 4619ms + 0xffff927edde70ea0 TYPE_WRITE VDEV_IO_START + 0xffff927ed81684e0 TYPE_WRITE VDEV_IO_START 4624ms + 0xffff927ed8169d40 TYPE_WRITE VDEV_IO_START 4625ms + + sdb> echo 0xffff927ee3439860 | zio + ADDR TYPE STAGE WAITER TIME_ELAPSED + 0xffff927ee343a700 TYPE_WRITE VDEV_IO_START 5487ms + + """ + + names = ["zio"] + input_type = "zio_t *" + output_type = "zio_t *" + + def __init__(self, + args: Optional[List[str]] = None, + name: str = "_") -> None: + super().__init__(args, name) + self.level = 0 + self.header = 0 + + @staticmethod + def lookup_stage(enum_type_name: str, value: int) -> str: + type_ = sdb.type_canonicalize(sdb.get_type(enum_type_name)) + fields = type_.enumerators + enum_string = "" + for f in fields: + if f.value == value: + enum_string = f.name + break + prefix = os.path.commonprefix([f[0] for f in fields]) + return enum_string[prefix.rfind("_") + 1:] + + def print_header(self) -> None: + print("{:26} {:<14} {:<16} {:<22} {:<8}".format("ADDR", "TYPE", "STAGE", + "WAITER", + "TIME_ELAPSED")) + self.header = 1 + + def pretty_print(self, objs: Iterable[drgn.Object]) -> None: + if self.header == 0: + self.print_header() + for zio in objs: + stage = self.lookup_stage('enum zio_stage', zio.io_stage) + if stage == "DONE": + continue + addr = '%s%s' % (' ' * self.level, format(hex(zio))) + waiter = "" if sdb.is_null(zio.io_waiter) else hex( + int(zio.io_waiter)) + now = gethrtime() + delta_ms = (now - zio.io_timestamp) / (NANOSEC / MSEC) + delta = str(int(delta_ms)) + 'ms' if zio.io_timestamp != 0 else "" + + print("{:26} {:<14} {:<16} {:<22} {:<8}".format( + addr, + enum_lookup("zio_type_t", zio.io_type).ljust(14), + stage.ljust(8), waiter.ljust(8), delta.ljust(8))) + + @sdb.InputHandler("zio_t*") + def from_zio(self, zio: drgn.Object) -> Iterable[drgn.Object]: + yield zio + child_links = sdb.execute_pipeline( + [zio.io_child_list.address_of_()], + [sdb.Walk(), sdb.Cast(["zio_link_t *"])], + ) + self.level += 1 + for c in child_links: + cio = c.zl_child + if cio.io_child_count == 0: + yield cio + else: + yield from self.from_zio(cio) + self.level -= 1 + + def no_input(self) -> drgn.Object: + zio_cache = drgn.cast("spl_kmem_cache_t *", sdb.get_object("zio_cache")) + zio_kmem = zio_cache.skc_linux_cache + zios = sdb.execute_pipeline( + [zio_kmem], + [sdb.Walk(), sdb.Cast(["zio_t *"])], + ) + if self.header == 0: + self.print_header() + for zio in zios: + if zio.io_parent_count == 0: + if zio.io_child_count == 0: + yield zio + else: + yield from self.from_zio(zio) diff --git a/tests/integration/data/regression_output/zfs/echo 0xffffa089533a2700 | zio b/tests/integration/data/regression_output/zfs/echo 0xffffa089533a2700 | zio new file mode 100644 index 00000000..66eca3df --- /dev/null +++ b/tests/integration/data/regression_output/zfs/echo 0xffffa089533a2700 | zio @@ -0,0 +1,2 @@ +ADDR TYPE STAGE WAITER TIME_ELAPSED +0xffffa089533a2700 TYPE_NULL OPEN diff --git a/tests/integration/data/regression_output/zfs/zio b/tests/integration/data/regression_output/zfs/zio new file mode 100644 index 00000000..bd879a89 --- /dev/null +++ b/tests/integration/data/regression_output/zfs/zio @@ -0,0 +1,19 @@ +ADDR TYPE STAGE WAITER TIME_ELAPSED +0xffffa0884093c9c0 TYPE_NULL OPEN +0xffffa08847e144e0 TYPE_NULL OPEN +0xffffa0888c750ea0 TYPE_NULL OPEN +0xffffa088c7b21d40 TYPE_NULL OPEN +0xffffa088cf951380 TYPE_NULL OPEN +0xffffa088cf9530c0 TYPE_NULL OPEN +0xffffa08920b584e0 TYPE_NULL OPEN +0xffffa08920b59380 TYPE_NULL OPEN +0xffffa08920b59860 TYPE_NULL OPEN +0xffffa08920b5ba80 TYPE_NULL OPEN +0xffffa0893677f5a0 TYPE_NULL OPEN +0xffffa089469184e0 TYPE_NULL OPEN +0xffffa0894af25860 TYPE_NULL OPEN +0xffffa0894af275a0 TYPE_NULL OPEN +0xffffa089533a2220 TYPE_NULL OPEN +0xffffa089533a2700 TYPE_NULL OPEN +0xffffa0895f2e9860 TYPE_NULL OPEN +0xffffa0895f2ec9c0 TYPE_NULL OPEN From 6066a83a354f7c16d52066c15f01a586a7f845e3 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Wed, 18 Aug 2021 11:28:24 -0400 Subject: [PATCH 05/39] Add blkptr command to sdb. --- sdb/commands/zfs/blkptr.py | 363 ++++++++++++++++++ sdb/commands/zfs/internal/__init__.py | 4 + ...mber dn_phys |member dn_blkptr[0] |blkptr" | 2 + ...mber dn_phys |member dn_blkptr[0] |blkptr" | 1 + .../dbuf | head 1 | member db_blkptr | blkptr | 1 + ... spa_uberblock | member ub_rootbp | blkptr | 1 + tests/integration/test_linux_generic.py | 2 + tests/integration/test_zfs_generic.py | 4 + 8 files changed, 378 insertions(+) create mode 100644 sdb/commands/zfs/blkptr.py create mode 100644 "tests/integration/data/regression_output/linux/slabs | filter 'obj.name == \"dnode_t\"' |walk | head 6056 | tail 1| cast dnode_t * | deref |member dn_phys |member dn_blkptr[0] |blkptr" create mode 100644 "tests/integration/data/regression_output/linux/slabs | filter 'obj.name == \"dnode_t\"' |walk | tail 8 | head 1 | cast dnode_t * | deref |member dn_phys |member dn_blkptr[0] |blkptr" create mode 100644 tests/integration/data/regression_output/zfs/dbuf | head 1 | member db_blkptr | blkptr create mode 100644 tests/integration/data/regression_output/zfs/spa | head 1 | deref |member spa_uberblock | member ub_rootbp | blkptr diff --git a/sdb/commands/zfs/blkptr.py b/sdb/commands/zfs/blkptr.py new file mode 100644 index 00000000..c8ef1bcc --- /dev/null +++ b/sdb/commands/zfs/blkptr.py @@ -0,0 +1,363 @@ +# +# Copyright 2019 Delphix +# Copyright 2021 Datto, Inc. +# +# 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. +# + +# pylint: disable=missing-docstring + +from typing import Iterable + +import drgn +import sdb +from sdb.commands.zfs.internal import BF64_GET, BF64_GET_SB + + +class BpInfo: + """ + Store attributes of the block pointer and + get formatted representations of them. + """ + + # pylint: disable=too-many-instance-attributes + + ndvas = 0 + level = 0 + ot_type = 0 + compress = 0 + birth = 0 + cksum = 0 + byte_order = 0 + gang = 0 + dedup = 0 + copies = "" + pbirth = 0 + lsize = "" + psize = "" + crypt = "" + c0 = "" + c1 = "" + c2 = "" + c3 = "" + + def set_ndvas(self, nd: int) -> None: + self.ndvas = nd + + def set_initial_props(self, bp: drgn.Object) -> None: + self.level = BF64_GET(bp.blk_prop, 56, 5) + self.ot_type = int(BF64_GET(bp.blk_prop, 48, 8)) + self.compress = BF64_GET(bp.blk_prop, 32, 7) + self.lsize = format(Blkptr.bp_get_lsize(bp), 'x') + self.psize = format(Blkptr.bp_get_psize(bp), 'x') + self.birth = int(bp.blk_birth) + self.cksum = BF64_GET(bp.blk_prop, 40, 8) + self.byte_order = BF64_GET(bp.blk_prop, 63, 1) + self.crypt = Blkptr.bp_get_crypt(bp, self.ot_type, self.level) + self.gang = (0 if Blkptr.bp_is_embedded(bp) else BF64_GET( + bp.blk_dva[0].dva_word[1], 63, 1)) + self.dedup = BF64_GET(bp.blk_prop, 62, 1) + self.copies = Blkptr.copyname[self.ndvas] + self.pbirth = Blkptr.bp_physical_birth(bp) + self.c0 = '%x' % bp.blk_cksum.zc_word[0] + self.c1 = '%x' % bp.blk_cksum.zc_word[1] + self.c2 = '%x' % bp.blk_cksum.zc_word[2] + self.c3 = '%x' % bp.blk_cksum.zc_word[3] + + def get_compstr(self) -> str: + comps = sdb.get_object("zio_compress_table") + return str(comps[self.compress].ci_name.string_().decode("utf-8")) + + def get_ot_name(self) -> str: + if self.ot_type & Blkptr.DMU_OT_NEWTYPE: + if self.ot_type & Blkptr.DMU_OT_BYTESWAP_MASK > 9: + print(str(self.ot_type & Blkptr.DMU_OT_BYTESWAP_MASK)) + return str(self.ot_type & Blkptr.DMU_OT_BYTESWAP_MASK) + bswaps = sdb.get_object("dmu_ot_byteswap") + swap_entry = bswaps[self.ot_type & Blkptr.DMU_OT_BYTESWAP_MASK] + byte_swap = swap_entry.ob_name.string_().decode("utf-8") + meta = "metadata" if self.ot_type & Blkptr.DMU_OT_METADATA else "data" + return "bswap %s %s" % (meta, byte_swap) + return str( + sdb.get_object("dmu_ot")[self.ot_type].ot_name.string_().decode( + "utf-8")) + + def get_fill(self, bp: drgn.Object) -> int: + if Blkptr.bp_is_encrypted(bp, self.ot_type, self.level): + return BF64_GET(bp.blk_fill, 0, 32) + if Blkptr.bp_is_embedded(bp): + return 1 + return int(bp.blk_fill) + + def get_cksum_string(self) -> str: + cksums = sdb.get_object("zio_checksum_table") + return str(cksums[self.cksum].ci_name.string_().decode("utf-8")) + + def get_endian(self) -> str: + return "BE" if self.byte_order == 0 else "LE" + + def get_gang(self) -> str: + return "gang" if self.gang else "contiguous" + + def get_dedup(self) -> str: + return "dedup" if self.dedup else "unique" + + +class Blkptr(sdb.PrettyPrinter): + """ + DESCRIPTION + + Pretty-print zfs block pointers. + + EXAMPLES + + sdb> dbuf | head 1 | member db_blkptr | blkptr + DVA[0]=<0:2cefd5e00:20000> [L0 ZFS plain file] fletcher4 uncompressed unencrypted LE + contiguous unique single 20000L/20000P birth=1624L/1624P fill=1 cksum=3feb86d3fa14: + ff98411222361a1:7cd8eb3816d141e1:2d65ae38a67197c7 + + sdb> echo 0xffffa0889343c680 | blkptr + DVA[0]=<0:41e90000:30000> [L0 ZFS plain file] fletcher4 uncompressed unencrypted LE + contiguous unique single 20000L/20000P birth=10L/10P fill=1 cksum=3ffba121eb4d: + ffd4345f8d679e2:efa124922f72ec66:34642a9a05fbafef + """ + + BP_EMBEDDED_TYPE_DATA = 0 + BP_EMBEDDED_TYPE_REDACTED = 2 + + SPA_MINBLOCKSHIFT = 9 + SPA_MAXBLOCKSHIFT = 24 + SPA_MAXBLOCKSIZE = 1 << SPA_MAXBLOCKSHIFT + SPA_ASIZEBITS = 24 + SPA_VDEVBITS = 24 + SPA_LSIZEBITS = 16 + SPA_PSIZEBITS = 16 + + TRUE = 1 + FALSE = 0 + + DMU_OT_NEWTYPE = 128 + DMU_OT_ENCRYPTED = 32 + DMU_OT_METADATA = 0x40 + DMU_OT_BYTESWAP_MASK = 0x1f + + copyname = ['zero', 'single', 'double', 'triple'] + + @staticmethod + def __bp_is_authenticated(bp: drgn.Object, ot: int, level: int) -> int: + return (Blkptr.bp_uses_crypt(bp) and level > 0 and + not Blkptr.dmu_ot_is_encrypted(ot)) + + @staticmethod + def __bp_has_indirect_mac_checksum(bp: drgn.Object, level: int) -> int: + return Blkptr.bp_uses_crypt(bp) and level > 0 + + @staticmethod + def __dmu_ot_is_valid(bp: drgn.Object) -> int: + ot = BF64_GET(bp.blk_prop, 48, 8) + if ot & Blkptr.DMU_OT_NEWTYPE: + return (ot & Blkptr.DMU_OT_BYTESWAP_MASK < len( + sdb.get_object("dmu_ot_byteswap"))) + return ot < len(sdb.get_object("dmu_ot")) + + @staticmethod + def dmu_ot_is_encrypted(ot: int) -> int: + if ot & Blkptr.DMU_OT_NEWTYPE: + return ot & Blkptr.DMU_OT_ENCRYPTED + return int(sdb.get_object("dmu_ot")[ot].ot_encrypt) + + @staticmethod + def bp_is_embedded(bp: drgn.Object) -> int: + return BF64_GET(bp.blk_prop, 39, 1) + + @staticmethod + def bp_is_redacted(bp: drgn.Object) -> int: + return (Blkptr.bp_is_embedded(bp) and BF64_GET(bp.blk_prop, 40, 8) + == Blkptr.BP_EMBEDDED_TYPE_REDACTED) + + @staticmethod + def bp_uses_crypt(bp: drgn.Object) -> int: + return BF64_GET(bp.blk_prop, 61, 1) + + @staticmethod + def bp_is_encrypted(bp: drgn.Object, ot: int, level: int) -> int: + return (Blkptr.bp_uses_crypt(bp) and level <= 0 and + Blkptr.dmu_ot_is_encrypted(ot)) + + @staticmethod + def bp_get_crypt(bp: drgn.Object, ot: int, level: int) -> str: + if Blkptr.bp_is_encrypted(bp, ot, level): + return "encrypted" + if Blkptr.__bp_is_authenticated(bp, ot, level): + return "authenticated" + if Blkptr.__bp_has_indirect_mac_checksum(bp, level): + return "indirect-MAC" + return "unencrypted" + + @staticmethod + def dva_is_empty(bp: drgn.Object) -> int: + return int(bp.blk_dva[0].dva_word[0] == 0 and + bp.blk_dva[0].dva_word[1] == 0) + + @staticmethod + def dva_get_offset(bp: drgn.Object, which_dva: int) -> int: + return BF64_GET_SB(bp.blk_dva[which_dva].dva_word[1], 0, 63, + Blkptr.SPA_MINBLOCKSHIFT, 0) + + @staticmethod + def dva_get_vdev(bp: drgn.Object, which_dva: int) -> int: + return BF64_GET(bp.blk_dva[which_dva].dva_word[0], 32, + Blkptr.SPA_VDEVBITS) + + @staticmethod + def __bp_is_hole(bp: drgn.Object) -> int: + return Blkptr.bp_is_embedded(bp) != Blkptr.TRUE and Blkptr.dva_is_empty( + bp) + + @staticmethod + def dva_get_asize(bp: drgn.Object, which_dva: int) -> int: + if Blkptr.bp_is_embedded(bp): + return 0 + return BF64_GET_SB(bp.blk_dva[which_dva].dva_word[0], 0, + Blkptr.SPA_ASIZEBITS, Blkptr.SPA_MINBLOCKSHIFT, 0) + + @staticmethod + def bp_get_ndvas(bp: drgn.Object) -> int: + ndvas = 0 + for x in range(0, 3): + ndvas += Blkptr.dva_get_asize(bp, x) != 0 + return ndvas + + @staticmethod + def bpe_get_lsize(bp: drgn.Object) -> int: + return BF64_GET_SB(bp.blk_prop, 0, 25, 0, 1) + + @staticmethod + def bp_get_lsize(bp: drgn.Object) -> int: + if Blkptr.bp_is_embedded(bp): + if BF64_GET(bp.blk_prop, 40, 8) == Blkptr.BP_EMBEDDED_TYPE_DATA: + return Blkptr.bpe_get_lsize(bp) + return 0 + return BF64_GET_SB(bp.blk_prop, 0, Blkptr.SPA_LSIZEBITS, + Blkptr.SPA_MINBLOCKSHIFT, 1) + + @staticmethod + def bp_get_psize(bp: drgn.Object) -> int: + if Blkptr.bp_is_embedded(bp): + return 0 + return BF64_GET_SB(bp.blk_prop, 16, Blkptr.SPA_PSIZEBITS, + Blkptr.SPA_MINBLOCKSHIFT, 1) + + @staticmethod + def bp_physical_birth(bp: drgn.Object) -> int: + if Blkptr.bp_is_embedded(bp): + phys = 0 + else: + phys = bp.blk_phys_birth if bp.blk_phys_birth != 0 else bp.blk_birth + return int(phys) + + @staticmethod + def bp_get_checksum(bp: drgn.Object) -> int: + if Blkptr.bp_is_embedded(bp): + return 2 # ZIO_CHECKSUM_OFF + return BF64_GET(bp.blk_prop, 40, 8) + + @staticmethod + def bp_validate(bp: drgn.Object) -> int: + errors = 0 + addr = hex(bp) + if not Blkptr.__dmu_ot_is_valid(bp): + tp = BF64_GET(bp.blk_prop, 48, 8) + print(f"blkptr at {addr} has invalid TYPE {tp}") + errors += 1 + ck = Blkptr.bp_get_checksum(bp) + if ck >= len(sdb.get_object("zio_checksum_table")) or ck <= 1: + print(f"blkptr at {addr} has invalid CHECKSUM {ck}") + errors += 1 + comp = BF64_GET(bp.blk_prop, 32, 7) + if comp >= len(sdb.get_object("zio_compress_table")) or comp <= 1: + print(f"blkptr at {addr} has invalid COMPRESS {comp}") + errors += 1 + lsz = Blkptr.bp_get_lsize(bp) + psz = Blkptr.bp_get_psize(bp) + if lsz > Blkptr.SPA_MAXBLOCKSIZE: + print(f"blkptr at {addr} has invalid LSIZE {lsz}") + errors += 1 + if psz > Blkptr.SPA_MAXBLOCKSIZE: + print(f"blkptr at {addr} has invalid PSIZE {psz}") + errors += 1 + if Blkptr.bp_is_embedded(bp): + etype = BF64_GET(bp.blk_prop, 40, 8) + if etype >= 3: + print(f"blkptr at {addr} has invalid ETYPE {etype}") + errors += 1 + return errors + + names = ["blkptr"] + input_type = "blkptr_t *" + + def pretty_print(self, objs: Iterable[drgn.Object]) -> None: + for bp in objs: + if bp is None: + print("") + continue + if not Blkptr.__bp_is_hole(bp) and Blkptr.bp_validate(bp) != 0: + continue + bpi = BpInfo() + if Blkptr.bp_is_embedded(bp) != 0: + bpi.set_ndvas(0) + else: + bpi.set_ndvas(Blkptr.bp_get_ndvas(bp)) + for i in range(0, bpi.ndvas): + vdev = Blkptr.dva_get_vdev(bp, i) + offset = format(Blkptr.dva_get_offset(bp, i), 'x') + asize = format(Blkptr.dva_get_asize(bp, i), 'x') + print(f"DVA[{i}]=<{vdev}:{offset}:{asize}> ", end='') + + bpi.set_initial_props(bp) + + if Blkptr.bp_is_embedded(bp) != 0: + etype = BF64_GET(bp.blk_prop, 40, 8) + lsize = format(BF64_GET_SB(bp.blk_prop, 0, 25, 0, 1), 'x') + psize = format(BF64_GET_SB(bp.blk_prop, 25, 7, 0, 1), 'x') + print( + f"EMBEDDED [L{bpi.level} {bpi.get_ot_name()}] et={etype} ", + end='') + print(f"{bpi.get_compstr()} size=", end='') + print(f"{lsize}L/{psize}P birth={bpi.birth}L") + continue + if Blkptr.__bp_is_hole(bp): + print( + f"HOLE [L{bpi.level} {bpi.get_ot_name()}] size={bpi.lsize}L ", + end='') + print(f"birth={bpi.birth}L") + continue + if Blkptr.bp_is_redacted(bp): + print( + f"REDACTED [L{bpi.level} {bpi.get_ot_name()}] size={bpi.lsize}L ", + end='') + print(f"birth={bpi.birth}L") + continue + + print( + f"[L{bpi.level} {bpi.get_ot_name()}] {bpi.get_cksum_string()}", + end='') + print( + f" {bpi.get_compstr()} {bpi.crypt} {bpi.get_endian()} {bpi.get_gang()}", + end='') + print(f" {bpi.get_dedup()} {bpi.copies} {bpi.lsize}L/{bpi.psize}P ", + end='') + print(f"birth={bpi.birth}L/{bpi.pbirth}P", end='') + print( + f" fill={bpi.get_fill(bp)} cksum={bpi.c0}:{bpi.c1}:{bpi.c2}:{bpi.c3}" + ) diff --git a/sdb/commands/zfs/internal/__init__.py b/sdb/commands/zfs/internal/__init__.py index 7909c29c..2d81bfe2 100644 --- a/sdb/commands/zfs/internal/__init__.py +++ b/sdb/commands/zfs/internal/__init__.py @@ -51,6 +51,10 @@ def BF64_GET(x: drgn.Object, low: int, length: int) -> int: return BF64_DECODE(x, low, length) +def BF64_GET_SB(x: int, low: int, length: int, shift: int, bias: int) -> int: + return (BF64_GET(x, low, length) + bias) << shift + + def WEIGHT_IS_SPACEBASED(weight: int) -> bool: return weight == 0 or (BF64_GET(weight, 60, 1) != 0) diff --git "a/tests/integration/data/regression_output/linux/slabs | filter 'obj.name == \"dnode_t\"' |walk | head 6056 | tail 1| cast dnode_t * | deref |member dn_phys |member dn_blkptr[0] |blkptr" "b/tests/integration/data/regression_output/linux/slabs | filter 'obj.name == \"dnode_t\"' |walk | head 6056 | tail 1| cast dnode_t * | deref |member dn_phys |member dn_blkptr[0] |blkptr" new file mode 100644 index 00000000..e29c98a3 --- /dev/null +++ "b/tests/integration/data/regression_output/linux/slabs | filter 'obj.name == \"dnode_t\"' |walk | head 6056 | tail 1| cast dnode_t * | deref |member dn_phys |member dn_blkptr[0] |blkptr" @@ -0,0 +1,2 @@ +blkptr at 0xffffa088ce68c040 has invalid CHECKSUM 0 +blkptr at 0xffffa088ce68c040 has invalid COMPRESS 0 diff --git "a/tests/integration/data/regression_output/linux/slabs | filter 'obj.name == \"dnode_t\"' |walk | tail 8 | head 1 | cast dnode_t * | deref |member dn_phys |member dn_blkptr[0] |blkptr" "b/tests/integration/data/regression_output/linux/slabs | filter 'obj.name == \"dnode_t\"' |walk | tail 8 | head 1 | cast dnode_t * | deref |member dn_phys |member dn_blkptr[0] |blkptr" new file mode 100644 index 00000000..0b2803d1 --- /dev/null +++ "b/tests/integration/data/regression_output/linux/slabs | filter 'obj.name == \"dnode_t\"' |walk | tail 8 | head 1 | cast dnode_t * | deref |member dn_phys |member dn_blkptr[0] |blkptr" @@ -0,0 +1 @@ +HOLE [L0 unallocated] size=200L birth=0L diff --git a/tests/integration/data/regression_output/zfs/dbuf | head 1 | member db_blkptr | blkptr b/tests/integration/data/regression_output/zfs/dbuf | head 1 | member db_blkptr | blkptr new file mode 100644 index 00000000..06f9bf59 --- /dev/null +++ b/tests/integration/data/regression_output/zfs/dbuf | head 1 | member db_blkptr | blkptr @@ -0,0 +1 @@ +DVA[0]=<0:2cefd5e00:20000> [L0 ZFS plain file] fletcher4 uncompressed unencrypted LE contiguous unique single 20000L/20000P birth=1624L/1624P fill=1 cksum=3feb86d3fa14:ff98411222361a1:7cd8eb3816d141e1:2d65ae38a67197c7 diff --git a/tests/integration/data/regression_output/zfs/spa | head 1 | deref |member spa_uberblock | member ub_rootbp | blkptr b/tests/integration/data/regression_output/zfs/spa | head 1 | deref |member spa_uberblock | member ub_rootbp | blkptr new file mode 100644 index 00000000..17f35714 --- /dev/null +++ b/tests/integration/data/regression_output/zfs/spa | head 1 | deref |member spa_uberblock | member ub_rootbp | blkptr @@ -0,0 +1 @@ +DVA[0]=<0:80001e00:200> DVA[1]=<0:a0001e00:200> DVA[2]=<0:10000da00:200> [L0 DMU objset] fletcher4 lz4 unencrypted LE contiguous unique triple 1000L/200P birth=609L/609P fill=67 cksum=98a43f544:3eab35f140c:d164e4328324:1da8f37ef09087 diff --git a/tests/integration/test_linux_generic.py b/tests/integration/test_linux_generic.py index 7504bb13..39b75c08 100644 --- a/tests/integration/test_linux_generic.py +++ b/tests/integration/test_linux_generic.py @@ -68,6 +68,8 @@ "slabs | pp", "slabs -s util | slabs", "slabs | head 2 | slabs", + 'slabs | filter \'obj.name == "dnode_t"\' |walk | tail 8 | head 1 | cast dnode_t * | deref |member dn_phys |member dn_blkptr[0] |blkptr', + 'slabs | filter \'obj.name == "dnode_t"\' |walk | head 6056 | tail 1| cast dnode_t * | deref |member dn_phys |member dn_blkptr[0] |blkptr', # slub 'slabs | filter \'obj.name == "zio_cache"\' | slub_cache', diff --git a/tests/integration/test_zfs_generic.py b/tests/integration/test_zfs_generic.py index 812c2ae7..018d19b8 100644 --- a/tests/integration/test_zfs_generic.py +++ b/tests/integration/test_zfs_generic.py @@ -28,6 +28,10 @@ # arc "arc", + # blkptr + "spa | head 1 | deref |member spa_uberblock | member ub_rootbp | blkptr", + "dbuf | head 1 | member db_blkptr | blkptr", + # dbuf "dbuf", "dbuf -l 1", From 27f0a6e3d22547c81b6ccffb25e7e1361d6f3ab5 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Thu, 23 Sep 2021 10:30:52 -0400 Subject: [PATCH 06/39] Add mutex and rrwlock commands to sdb --- sdb/commands/linux/mutex.py | 110 ++++++++++++++++++ sdb/commands/linux/process.py | 32 +++++ sdb/commands/zfs/rrwlock.py | 98 ++++++++++++++++ .../linux/echo 0xffffa0894e7210b0 | mutex | 3 + ...a_activities_lock | member m_mutex | mutex | 9 ++ .../spa | member spa_feat_stats_lock | mutex | 5 + ...l_pool | member dp_config_rwlock | rrwlock | 18 +++ tests/integration/test_linux_generic.py | 7 ++ tests/integration/test_zfs_generic.py | 3 + 9 files changed, 285 insertions(+) create mode 100644 sdb/commands/linux/mutex.py create mode 100644 sdb/commands/zfs/rrwlock.py create mode 100644 tests/integration/data/regression_output/linux/echo 0xffffa0894e7210b0 | mutex create mode 100644 tests/integration/data/regression_output/linux/spa | member spa_activities_lock | member m_mutex | mutex create mode 100644 tests/integration/data/regression_output/linux/spa | member spa_feat_stats_lock | mutex create mode 100644 tests/integration/data/regression_output/zfs/spa | member spa_dsl_pool | member dp_config_rwlock | rrwlock diff --git a/sdb/commands/linux/mutex.py b/sdb/commands/linux/mutex.py new file mode 100644 index 00000000..f728f2f6 --- /dev/null +++ b/sdb/commands/linux/mutex.py @@ -0,0 +1,110 @@ +# +# Copyright 2019 Delphix +# Copyright 2021 Datto, Inc. +# +# 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. +# + +# pylint: disable=missing-docstring + +import drgn +from drgn.helpers.linux.list import list_for_each +import sdb +from sdb.commands.linux.process import Process + + +class Mutex(sdb.PrettyPrinter): + """ + DESCRIPTION + + Display the owner of a mutex and its waiters. + + EXAMPLES (some output shortened) + + sdb> spa |member spa_activities_lock | member m_mutex | mutex + owner of mutex 0xffff925f36005eb8: + -------------------------------- + PID: 13205 zpool scrub tank + + #0 at 0xffffffff90d79914 (__schedule+0x394/0xa53) in context_switch at ../core.c:3551:2 + #1 at 0xffffffff90d79914 (__schedule+0x394/0xa53) in __schedule at ../core.c:4312:8 + #2 at 0xffffffff90d7a035 (schedule+0x55/0xba) in schedule at ../kernel/sched/core.c:4387:3 + #3 at 0xffffffff90d7a406 (io_schedule+0x16/0x3a) in io_schedule at ../kernel/sched/core.c:6029:2 + #4 at 0xffffffffc09246ff (cv_wait_common+0xef/0x297) in cv_wait_common at ../spl-condvar.c:144:3 + #5 at 0xffffffffc09248e8 (__cv_wait_io+0x18/0x1a) in __cv_wait_io at ../spl/spl-condvar.c:178:2 + #6 at 0xffffffffc0be06b3 (txg_wait_synced_impl+0xf3/0x258) in txg_wait_synced_impl at .. + #7 at 0xffffffffc0be0830 (txg_wait_synced+0x10/0x3b) in txg_wait_synced at ../txg.c:736:2 + #8 at 0xffffffffc0b93d72 (dsl_sync_task_common+0x1c2/0x296) in dsl_sync_task_common at .. + #9 at 0xffffffffc0b93e6a (dsl_sync_task+0x1a/0x1c) in dsl_sync_task at ../dsl_synctask.c:132:10 + #10 at 0xffffffffc0b91206 (dsl_scan+0x96/0x123) in dsl_scan at ../dsl_scan.c:853:10 + #11 at 0xffffffffc0bbeaf1 (spa_scan+0x81/0x1c0) in spa_scan at ../spa.c:8037:10 + #12 at 0xffffffffc0c37a80 (zfs_ioc_pool_scan+0x60/0xd1) in zfs_ioc_pool_scan at zfs_ioctl.c:1691 + #13 at 0xffffffffc0c413b9 (zfsdev_ioctl_common+0x609/0x6b7) in zfsdev_ioctl_common at .. + #14 at 0xffffffffc0c7c477 (zfsdev_ioctl+0x57/0xdf) in zfsdev_ioctl at ../zfs/module/zfs/.. + #15 at 0xffffffff9050349d (ksys_ioctl+0x9d/0xc2) in vfs_ioctl at ../fs/ioctl.c:48:10 (inlined) + #16 at 0xffffffff9050349d (ksys_ioctl+0x9d/0xc2) in ksys_ioctl at ../fs/ioctl.c:753:11 + #17 at 0xffffffff905034ea (__x64_sys_ioctl+0x1a/0x1e) in __do_sys_ioctl at ../fs/ioctl.c:762:9 + #18 at 0xffffffff905034ea (__x64_sys_ioctl+0x1a/0x1e) in __se_sys_ioctl at ../fs/ioctl.c:760:1 + #19 at 0xffffffff905034ea (__x64_sys_ioctl+0x1a/0x1e) in __x64_sys_ioctl at ../fs/ioctl.c:760:1 + #20 at 0xffffffff90d6cb89 (do_syscall_64+0x49/0xb6) in do_syscall_64 at .. + #21 at 0xffffffff90e0008c (entry_SYSCALL_64+0x7c/0x156) at ../arch/x86/entry/entry_64.S:117 + -------------------------------- + + + waiters on mutex 0xffff925f36005eb8: + -------------------------------- + PID: 13156 + + #0 at 0xffffffff90d79914 (__schedule+0x394/0xa53) in context_switch at ../core.c:3551 + #1 at 0xffffffff90d79914 (__schedule+0x394/0xa53) in __schedule at ../core.c:4312:8 + #2 at 0xffffffff90d7a035 (schedule+0x55/0xba) in schedule at ../core.c:4387:3 + #3 at 0xffffffff90d7a33e (schedule_preempt_disabled+0xe/0x10) in schedule_preempt_disabled at .. + #4 at 0xffffffff90d7bf1d (__mutex_lock.isra.0+0x17d/0x4e0) in __mutex_lock_common at .. + #5 at 0xffffffff90d7bf1d (__mutex_lock.isra.0+0x17d/0x4e0) in __mutex_lock at .. + #6 at 0xffffffff90d7c293 (__mutex_lock_slowpath+0x13/0x15) in __mutex_lock_slowpath at .. + #7 at 0xffffffff90d7c2d2 (mutex_lock+0x32/0x36) in mutex_lock at ../kernel/locking/mutex.c:284:3 + #8 at 0xffffffffc0bc5a35 (spa_notify_waiters+0x35/0x9b) in spa_notify_waiters at ../spa.c:9546:2 + #9 at 0xffffffffc0b8ce8b (dsl_process_async_destroys+0x21b/0x73a) in dsl_process_async_destroys + #10 at 0xffffffffc0b92e63 (dsl_scan_sync+0x1e3/0xb70) in dsl_scan_sync at ../dsl_scan.c:3571:8 + #11 at 0xffffffffc0bc040a (spa_sync_iterate_to_convergence+0x13a/0x317) in spa_sync_iterate.. + #12 at 0xffffffffc0bc0bc2 (spa_sync+0x2f2/0x872) in spa_sync at ../zfs/module/zfs/spa.c:9269:2 + #13 at 0xffffffffc0be14d7 (txg_sync_thread+0x2a7/0x3de) in txg_sync_thread at ../txg.c:591:3 + #14 at 0xffffffffc092ec94 (thread_generic_wrapper+0x84/0xbc) in thread_generic_wrapper at .. + #15 at 0xffffffff902c18f4 (kthread+0x114/0x146) in kthread at ../kernel/kthread.c:291:9 + #16 at 0xffffffff90204482 (ret_from_fork+0x22/0x2d) at ../arch/x86/entry/entry_64.S:293 + -------------------------------- + + """ + + names = ["mutex"] + input_type = "struct mutex *" + output_type = "struct mutex *" + MUTEX_FLAGS = 0x07 + + def pretty_print(self, objs: drgn.Object) -> None: + for mtx in objs: + # see __mutex_owner() in kernel/locking/mutex.c + print(f"owner of mutex {hex(int(mtx))}:") + if mtx.owner.counter != 0: + contents = sdb.get_prog().read_u64(mtx.owner.address_of_()) + own_addr = int(contents) & ~self.MUTEX_FLAGS + own_task = sdb.create_object('struct task_struct *', own_addr) + Process(own_task.pid).print_process() + else: + print("NULL") + + # waiters + print(f"waiters on mutex {hex(int(mtx))}:") + for obj in list_for_each(mtx.wait_list.address_of_()): + sw = drgn.cast('struct semaphore_waiter *', obj) + Process(sw.task.pid).print_process() diff --git a/sdb/commands/linux/process.py b/sdb/commands/linux/process.py index 25ac9831..fa4af848 100644 --- a/sdb/commands/linux/process.py +++ b/sdb/commands/linux/process.py @@ -20,9 +20,41 @@ from typing import Iterable import drgn +from drgn.helpers.linux.pid import find_task, for_each_pid +from drgn.helpers.linux.mm import cmdline import sdb +class Process: + + def __init__(self, pid: int = 0) -> None: + self.pid = pid + self.prog = sdb.get_prog() + + # yield all the pid_t in the process table + def all(self) -> Iterable[drgn.Object]: + for pid in for_each_pid(self.prog): + yield pid + + def print_process(self, indent: int = 0) -> None: + # handle exception when no cmd line is present + try: + cmd = cmdline(find_task(sdb.get_prog(), self.pid)) + except drgn.FaultError: + cmd = [] + print("--------------------------------") + print(f"PID: {int(self.pid)} ", end='') + for c in cmd: + c_str = c.decode("utf-8") + print(f"{c_str} ", end='') + print("\n") + trace = sdb.get_prog().stack_trace(self.pid) + for frame in trace: + print(f"{' '*indent}{frame}") + print("--------------------------------") + print("\n") + + class FindPid(sdb.Command): """ Return "struct pid *" for the given PID number in the global namespace. diff --git a/sdb/commands/zfs/rrwlock.py b/sdb/commands/zfs/rrwlock.py new file mode 100644 index 00000000..90129d00 --- /dev/null +++ b/sdb/commands/zfs/rrwlock.py @@ -0,0 +1,98 @@ +# +# Copyright 2021 Datto, Inc. +# +# 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. +# + +# pylint: disable=missing-docstring + +import drgn +from drgn.helpers.linux.pid import pid_task +import sdb +from sdb.commands.zfs.zfs_refcount import Zfs_Refcount +from sdb.commands.linux.process import Process + + +class Rrw_lock(sdb.PrettyPrinter): + """ + DESCRIPTION + + Depending on the debug settings, readers may be anonymous. In this case + we only can print the count of readers. If reference_tracking_enabled was + set, we can display the function(s) holding the read lock. + + The thread actively holding RW_WRITER will be displayed, if any, and + we search the process table to print threads with rrw_enter_write in their + stack (if they are trying to enter the rrwlock in question). + + EXAMPLES + + spa | member spa_dsl_pool |member dp_config_rwlock | rrwlock + writer wanted?: (boolean_t)B_FALSE + -------------------------------- + + ... + + ... + anonymous readers: + zfs_refcount_t at 0xffff9dd55f5c0748 has 0 current holds tracked=1 + linked readers: + zfs_refcount_t at 0xffff9dd55f5c07d0 has 0 current holds tracked=1 + + """ + + names = ["rrwlock"] + input_type = "rrwlock_t *" + output_type = "rrwlock_t *" + + @staticmethod + def print_writer_wanted_stacks(rrw: drgn.Object, indent: int, + exclude: int) -> None: + prog = sdb.get_prog() + for pid in Process().all(): + try: + task = pid_task(pid, 0) + if sdb.is_null(task): + continue + cur_pid = task.pid + trace = prog.stack_trace(task) + except ValueError: + continue + # we will print the task holding the write lock later + if exclude != -1 and cur_pid == exclude: + continue + for frame in trace: + if frame.name == 'rrw_enter_write': + if frame['rrl'] == rrw: + Process(task.pid).print_process(indent) + continue + + def pretty_print(self, objs: drgn.Object) -> None: + for rrw in objs: + indent = 4 + print(f"writer wanted?: {rrw.rr_writer_wanted}") + exclude_pid = -1 + if not sdb.is_null(rrw.rr_writer): + exclude_pid = int(rrw.rr_writer.pid) + self.print_writer_wanted_stacks(rrw, indent, exclude_pid) + print(f"writer thread_t*: {hex(int(rrw.rr_writer))}") + if not sdb.is_null(rrw.rr_writer): + Process(rrw.rr_writer.pid).print_process(indent) + print("anonymous readers:") + Zfs_Refcount().print_one( + sdb.create_object('zfs_refcount_t *', + rrw.rr_anon_rcount.address_of_()), indent) + print("linked readers:") + Zfs_Refcount().print_one( + sdb.create_object('zfs_refcount_t *', + rrw.rr_linked_rcount.address_of_()), indent) diff --git a/tests/integration/data/regression_output/linux/echo 0xffffa0894e7210b0 | mutex b/tests/integration/data/regression_output/linux/echo 0xffffa0894e7210b0 | mutex new file mode 100644 index 00000000..e65d6470 --- /dev/null +++ b/tests/integration/data/regression_output/linux/echo 0xffffa0894e7210b0 | mutex @@ -0,0 +1,3 @@ +owner of mutex 0xffffa0894e7210b0: +NULL +waiters on mutex 0xffffa0894e7210b0: diff --git a/tests/integration/data/regression_output/linux/spa | member spa_activities_lock | member m_mutex | mutex b/tests/integration/data/regression_output/linux/spa | member spa_activities_lock | member m_mutex | mutex new file mode 100644 index 00000000..118aa266 --- /dev/null +++ b/tests/integration/data/regression_output/linux/spa | member spa_activities_lock | member m_mutex | mutex @@ -0,0 +1,9 @@ +owner of mutex 0xffffa0894e721f10: +NULL +waiters on mutex 0xffffa0894e721f10: +owner of mutex 0xffffa089413b9f10: +NULL +waiters on mutex 0xffffa089413b9f10: +owner of mutex 0xffffa08955c45f10: +NULL +waiters on mutex 0xffffa08955c45f10: diff --git a/tests/integration/data/regression_output/linux/spa | member spa_feat_stats_lock | mutex b/tests/integration/data/regression_output/linux/spa | member spa_feat_stats_lock | mutex new file mode 100644 index 00000000..f87ef81d --- /dev/null +++ b/tests/integration/data/regression_output/linux/spa | member spa_feat_stats_lock | mutex @@ -0,0 +1,5 @@ +sdb: mutex: expected input of type struct mutex *, but received type typedef struct { + struct mutex m_mutex; + spinlock_t m_lock; + kthread_t *m_owner; +} kmutex_t diff --git a/tests/integration/data/regression_output/zfs/spa | member spa_dsl_pool | member dp_config_rwlock | rrwlock b/tests/integration/data/regression_output/zfs/spa | member spa_dsl_pool | member dp_config_rwlock | rrwlock new file mode 100644 index 00000000..c32173c8 --- /dev/null +++ b/tests/integration/data/regression_output/zfs/spa | member spa_dsl_pool | member dp_config_rwlock | rrwlock @@ -0,0 +1,18 @@ +writer wanted?: (boolean_t)B_FALSE +writer thread_t*: 0x0 +anonymous readers: + zfs_refcount_t at 0xffffa0894e6e5748 has 0 current holds tracked=0 +linked readers: + zfs_refcount_t at 0xffffa0894e6e5750 has 0 current holds tracked=0 +writer wanted?: (boolean_t)B_FALSE +writer thread_t*: 0x0 +anonymous readers: + zfs_refcount_t at 0xffffa0894c707f48 has 0 current holds tracked=0 +linked readers: + zfs_refcount_t at 0xffffa0894c707f50 has 0 current holds tracked=0 +writer wanted?: (boolean_t)B_FALSE +writer thread_t*: 0x0 +anonymous readers: + zfs_refcount_t at 0xffffa089535c0748 has 0 current holds tracked=0 +linked readers: + zfs_refcount_t at 0xffffa089535c0750 has 0 current holds tracked=0 diff --git a/tests/integration/test_linux_generic.py b/tests/integration/test_linux_generic.py index 7504bb13..36024df0 100644 --- a/tests/integration/test_linux_generic.py +++ b/tests/integration/test_linux_generic.py @@ -53,6 +53,10 @@ # lxlist "addr modules | lxlist module list | member name", + # mutex + "spa | member spa_activities_lock | member m_mutex | mutex", + "echo 0xffffa0894e7210b0 | mutex", + # pid "pid 1", "pid 1 10 12437", @@ -133,6 +137,9 @@ "addr modules | lxlist bogus_type list | member name", "addr modules | lxlist module bogus_member | member name", + # mutex + "spa | member spa_feat_stats_lock | mutex", + # percpu - not valid CPU number 'slabs | filter \'obj.name == "kmalloc-8"\' | member cpu_slab | percpu 2', 'slabs | filter \'obj.name == "kmalloc-8"\' | member cpu_slab | percpu 3', diff --git a/tests/integration/test_zfs_generic.py b/tests/integration/test_zfs_generic.py index 812c2ae7..b99a68cd 100644 --- a/tests/integration/test_zfs_generic.py +++ b/tests/integration/test_zfs_generic.py @@ -34,6 +34,9 @@ "dbuf | dbuf -l 1", 'dbuf | dbuf -l 1 | head | dbuf', + # rrwlock + "spa | member spa_dsl_pool | member dp_config_rwlock | rrwlock", + # spa + vdev + metaslab "spa", "spa -H", From c05fd47251abfde54e20fad17a1ba9e193ee3360 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Thu, 11 Nov 2021 13:56:46 -0500 Subject: [PATCH 07/39] Add nvlist command to sdb Fixes #26 --- sdb/commands/nvpair/__init__.py | 26 +++ sdb/commands/nvpair/internal/__init__.py | 27 +++ sdb/commands/nvpair/nvpair.py | 210 +++++++++++++++++++++++ setup.py | 2 + 4 files changed, 265 insertions(+) create mode 100644 sdb/commands/nvpair/__init__.py create mode 100644 sdb/commands/nvpair/internal/__init__.py create mode 100644 sdb/commands/nvpair/nvpair.py diff --git a/sdb/commands/nvpair/__init__.py b/sdb/commands/nvpair/__init__.py new file mode 100644 index 00000000..59acfe39 --- /dev/null +++ b/sdb/commands/nvpair/__init__.py @@ -0,0 +1,26 @@ +# +# Copyright 2019 Delphix +# +# 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. +# + +# pylint: disable=missing-docstring + +import glob +import importlib +import os + +for path in glob.glob("{}/*.py".format(os.path.dirname(__file__))): + if path != __file__: + module = os.path.splitext(os.path.basename(path))[0] + importlib.import_module("sdb.commands.nvpair.{}".format(module)) diff --git a/sdb/commands/nvpair/internal/__init__.py b/sdb/commands/nvpair/internal/__init__.py new file mode 100644 index 00000000..328731a6 --- /dev/null +++ b/sdb/commands/nvpair/internal/__init__.py @@ -0,0 +1,27 @@ +# +# Copyright 2019 Delphix +# +# 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. +# + +# pylint: disable=missing-docstring + +import glob +import importlib +import os + +for path in glob.glob("{}/*.py".format(os.path.dirname(__file__))): + if path != __file__: + module = os.path.splitext(os.path.basename(path))[0] + importlib.import_module( + "sdb.commands.nvpair.internal.{}".format(module)) diff --git a/sdb/commands/nvpair/nvpair.py b/sdb/commands/nvpair/nvpair.py new file mode 100644 index 00000000..c32bbcb4 --- /dev/null +++ b/sdb/commands/nvpair/nvpair.py @@ -0,0 +1,210 @@ +# +# Copyright 2020 Datto, Inc. +# +# 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. +# + +# pylint: disable=missing-docstring + +import os +from typing import Iterable +import drgn +import sdb + + +class Nvpair: + # Member data and methods to print the value of the + # various nvpair_t types + def __init__(self, nvp: drgn.Object, nvl: drgn.Object) -> None: + self.addr = nvp.address_ + self.nvp = nvp + self.nvl = nvl + self.nvp_size_ = sdb.type_canonicalize_size("nvpair_t") + self.nvl_size = sdb.type_canonicalize_size("nvlist_t") + self.name_size = int(nvp.nvp_name_sz) + self.data_ptr = self.addr + ((self.nvp_size_ + self.name_size + 7) & ~7) + + def get_type(self, strip: int = 0) -> str: + # N.B. data_type_t enum is not zero indexed it starts + # with -1 so we add one to get the correct index + fields = sdb.get_type("data_type_t").type.enumerators + enum_string: str = fields[self.nvp.nvp_type + 1].name + if strip: + prefix = os.path.commonprefix([f[0] for f in fields]) + return enum_string[prefix.rfind("_") + 1:] + return enum_string + + def get_name(self) -> drgn.Object: + # name is located after the nvpair_t struct + ptr = self.addr + self.nvp_size_ + return sdb.create_object("char *", ptr).string_().decode("utf-8") + + # works for all signed and unsigned int, long, long long + @staticmethod + def get_value_int(type_: str, loc: int) -> str: + sz = sdb.create_object('size_t', sdb.type_canonicalize_size(type_)) + # value is located after the name + contents = sdb.get_prog().read(loc, sz) + value = drgn.Object.from_bytes_(sdb.get_prog(), type_, contents) + return str(value.value_()) + + # iterate the array, obtain and print nvpair values + def get_array_values(self, type_: str) -> None: + indent = " " + count = self.nvp.nvp_value_elem + type_ = type_.replace("_array", "") + if "boolean" in type_: + type_ = "uint32_t" + val = "" + # skip n 64 bit pointers for string and nvlist array type + offset = count * 8 + for x in range(count): + if x == 0: + print("values=") + if "nvlist" in type_: + self.nvl.set_indent(self.nvl.indent + 4) + self.nvl.print_one( + sdb.create_object("nvlist_t *", self.data_ptr + offset)) + self.nvl.set_indent(self.nvl.indent - 4) + offset += self.nvl_size + elif "int" in type_: + sz = sdb.create_object('size_t', + sdb.type_canonicalize_size(type_)) + val = self.get_value_int(type_, self.data_ptr + (sz * x)) + print(f"{indent}{val}") + elif "byte" in type_: + val = self.get_value_int("unsigned char", self.data_ptr + x) + print(f"{indent}{hex(int(val))}") + elif "string" in type_: + offset += len(val) + val = sdb.create_object("char *", self.data_ptr + + offset).string_().decode("utf-8") + print(f"{indent}{val}") + offset += 1 # null terminator + + # obtain and print the nvpair value + def get_value(self) -> None: + type_ = (self.get_type(1) + "_t").lower() + if "array" in type_: + self.get_array_values(type_) + return + if "nvlist" in type_: + print("values=") + self.nvl.set_indent(self.nvl.indent + 4) + self.nvl.print_one(sdb.create_object("nvlist_t *", self.data_ptr)) + self.nvl.set_indent(self.nvl.indent - 4) + return + print("value=", end='') + if "boolean_value" in type_: + type_ = "uint32_t" + elif "boolean" in type_: # DATA_TYPE_BOOLEAN has name and no value + print("") + elif "hrtime" in type_: + type_ = "int64_t" + if "int" in type_: + print(self.get_value_int(type_, self.data_ptr)) + if "string" in type_: + print( + sdb.create_object("char *", + self.data_ptr).string_().decode("utf-8")) + if "byte" in type_: + print(hex(int(self.get_value_int("unsigned char", self.data_ptr)))) + return + + +class Nvlist(sdb.Locator, sdb.PrettyPrinter): + """ + Print nvlist_t + + DESCRIPTION + Print all the nvpair_t in the passed nvlist_t. Handle basic types, + array types, and nvlist_t types. Type double is omitted as it is + not used in zfs. + + EXAMPLE + Print nvlist_t of snapshot holds from the nvlist_t * pointer address: + + sdb> echo 0xffff970d0ff681e0 | nvlist + name=monday-1 type=DATA_TYPE_UINT64 value=1633989858 + name=monday-2 type=DATA_TYPE_UINT64 value=1633989863 + """ + + names = ["nvlist"] + input_type = "nvlist_t *" + output_type = "nvlist_t *" + indent = 0 + + def set_indent(self, indent: int) -> None: + self.indent = indent + + # nvlist iteration methods + @staticmethod + def nvlist_contains_nvp(nvl: drgn.Object, nvp: drgn.Object) -> int: + priv = drgn.cast("nvpriv_t *", nvl.nvl_priv) + + if nvp.address_ == 0: + return 0 + + curr = priv.nvp_list + while not sdb.is_null(curr): + if curr.nvi_nvp.address_ == nvp.address_: + return 1 + # pylint: disable=protected-access + curr = curr._nvi_un._nvi._nvi_next + + return 0 + + @staticmethod + def nvlist_first_nvpair(nvl: drgn.Object) -> drgn.Object: + if sdb.is_null(nvl) or sdb.is_null(nvl.nvl_priv): + return None + priv = drgn.cast("nvpriv_t *", nvl.nvl_priv) + return priv.nvp_list.nvi_nvp + + @staticmethod + def nvlist_next_nvpair(nvl: drgn.Object, nvp: drgn.Object) -> drgn.Object: + if sdb.is_null(nvl) or sdb.is_null(nvl.nvl_priv): + return None + + priv = drgn.cast("nvpriv_t *", nvl.nvl_priv) + + curr_addr = nvp.address_ - drgn.offsetof(sdb.get_type("i_nvp_t"), + "nvi_nvp") + curr = sdb.create_object("i_nvp_t *", curr_addr) + + if priv.nvp_curr == curr or Nvlist.nvlist_contains_nvp(nvl, nvp): + # pylint: disable=protected-access + curr = curr._nvi_un._nvi._nvi_next + else: + curr = drgn.NULL(sdb.get_prog(), "i_nvp_t *") + + if not sdb.is_null(curr): + return curr.nvi_nvp + + return None + + # print one nvlist_t + def print_one(self, nvl: drgn.Object) -> None: + pair = self.nvlist_first_nvpair(nvl) + while pair is not None: + nvobj = Nvpair(pair, self) + print(f"{' '*self.indent}", end='') + print(f"name={nvobj.get_name()} ", end='') + print(f"type={nvobj.get_type()} ", end='') + # value will be printed in get_value function + nvobj.get_value() + pair = self.nvlist_next_nvpair(nvl, pair) + + def pretty_print(self, objs: Iterable[drgn.Object]) -> None: + for nvl in objs: + self.print_one(nvl) diff --git a/setup.py b/setup.py index adf4600e..0d75696f 100755 --- a/setup.py +++ b/setup.py @@ -12,6 +12,8 @@ "sdb.commands.internal", "sdb.commands.linux", "sdb.commands.linux.internal", + "sdb.commands.nvpair", + "sdb.commands.nvpair.internal", "sdb.commands.spl", "sdb.commands.spl.internal", "sdb.commands.zfs", From 4ecad1c57cfcce870605c22cdc28316e8575cd43 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 10:17:11 -0500 Subject: [PATCH 08/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000..871ca6b7 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,14 @@ +image: focal:latest +image: python-3.8 + +before_script: + - python --version + - pip install -r requirements.txt + +stages: + - Static Analysis + +pylint: + stage: Static Analysis + script: + - pylint -d duplicate-code -d invalid-name sdb From 62e3b4a638c507aac7b704c1f8ee21f2e44a1e0f Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 10:21:17 -0500 Subject: [PATCH 09/39] Update requirement.txt --- requirement.txt | 1 + 1 file changed, 1 insertion(+) create mode 100644 requirement.txt diff --git a/requirement.txt b/requirement.txt new file mode 100644 index 00000000..67dd2896 --- /dev/null +++ b/requirement.txt @@ -0,0 +1 @@ +pylint==3.8 From 4366b6437fa7b75a46b6c17c8fee89e5fe76fb30 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 10:24:28 -0500 Subject: [PATCH 10/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 871ca6b7..e514edb8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,14 +1,14 @@ image: focal:latest -image: python-3.8 +image: "python:3.8" before_script: - python --version - pip install -r requirements.txt -stages: - - Static Analysis + stages: + - Static Analysis pylint: - stage: Static Analysis - script: - - pylint -d duplicate-code -d invalid-name sdb + stage: Static Analysis + script: + - pylint -d duplicate-code -d invalid-name sdb From 218484444fdd977e04f9842ef05e6a98c45a6a7d Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 10:27:15 -0500 Subject: [PATCH 11/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e514edb8..14149844 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,14 +1,14 @@ -image: focal:latest image: "python:3.8" -before_script: - - python --version - - pip install -r requirements.txt +job: + before_script: + - python --version + - pip install -r requirements.txt - stages: - - Static Analysis + stages: + - Static Analysis -pylint: + pylint: stage: Static Analysis script: - pylint -d duplicate-code -d invalid-name sdb From c13a0068e1879babfe6145312877c8eb67093bfe Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 10:27:44 -0500 Subject: [PATCH 12/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 14149844..2fcac16b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,6 +5,7 @@ job: - python --version - pip install -r requirements.txt + # stages stages: - Static Analysis From 42a4e75bc8d7b463dcaec5123be324bdd7fb5e50 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 10:28:36 -0500 Subject: [PATCH 13/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2fcac16b..474d6a98 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,15 +1,14 @@ image: "python:3.8" -job: - before_script: - - python --version - - pip install -r requirements.txt - - # stages - stages: - - Static Analysis - - pylint: - stage: Static Analysis - script: - - pylint -d duplicate-code -d invalid-name sdb + +before_script: + - python --version + - pip install -r requirements.txt + +stages: + - Static Analysis + +pylint: + stage: Static Analysis + script: + - pylint -d duplicate-code -d invalid-name sdb From 6a3383edb9d0cf7022a450f92f8a798f66d663b7 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 10:42:11 -0500 Subject: [PATCH 14/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 474d6a98..078c3a70 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,6 +1,5 @@ image: "python:3.8" - before_script: - python --version - pip install -r requirements.txt From 03a80b1fc998f7218c6d86cc497799ca343a7bfc Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 10:44:09 -0500 Subject: [PATCH 15/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 078c3a70..91e367ca 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,9 @@ image: "python:3.8" +job: + tags: + - use1-ci-builder-20 + before_script: - python --version - pip install -r requirements.txt From 28b5bc9ef849281bcee65e7ec80b2b36b71ce9eb Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 10:45:23 -0500 Subject: [PATCH 16/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 91e367ca..7bdbf604 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,8 +1,7 @@ image: "python:3.8" -job: - tags: - - use1-ci-builder-20 +tags: + - use1-ci-builder-20 before_script: - python --version From 8ec9fde79046bda88a08eea5fa7ca5f5d88ad8cb Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 10:52:04 -0500 Subject: [PATCH 17/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 7bdbf604..adeeefa0 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,16 +1,11 @@ image: "python:3.8" -tags: - - use1-ci-builder-20 - before_script: - python --version - pip install -r requirements.txt -stages: - - Static Analysis - -pylint: - stage: Static Analysis +job: + tags: + - use1-ci-builder-20 script: - pylint -d duplicate-code -d invalid-name sdb From aad16d8a69d85bbfe5c63cbdba62cd51aeb74906 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 10:53:48 -0500 Subject: [PATCH 18/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index adeeefa0..647acd20 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,6 @@ image: "python:3.8" before_script: - python --version - - pip install -r requirements.txt job: tags: From 3f0e763bd2b5e706ed98b44a3c18bfc5365e002d Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 10:56:05 -0500 Subject: [PATCH 19/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 647acd20..3dd50bbc 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,6 +2,7 @@ image: "python:3.8" before_script: - python --version + - python3 -m pip install pylint job: tags: From 0b335482b44becb807ae170c61a2cdef5fe04549 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 10:59:06 -0500 Subject: [PATCH 20/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3dd50bbc..0b3b8a0d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,6 +3,7 @@ image: "python:3.8" before_script: - python --version - python3 -m pip install pylint + - pip3 install drgn job: tags: From 348286695b6ac7c9f7cd2dc9855907c045ee4b20 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 11:03:15 -0500 Subject: [PATCH 21/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0b3b8a0d..ad6fcda7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,4 +9,4 @@ job: tags: - use1-ci-builder-20 script: - - pylint -d duplicate-code -d invalid-name sdb + - pylint disable=consider-using-f-string -d duplicate-code -d invalid-name sdb From 53bebd5283d9221d9c1ecbfcba10ad4971a05b3e Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 11:07:42 -0500 Subject: [PATCH 22/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ad6fcda7..e1f93e69 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ image: "python:3.8" before_script: - python --version - - python3 -m pip install pylint + - python3 -m pip install pylint==3.8 - pip3 install drgn job: From 1e9395f6c08435addf5a1e78c468cbd451109255 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 11:09:18 -0500 Subject: [PATCH 23/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e1f93e69..8e2acf9b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ image: "python:3.8" before_script: - python --version - - python3 -m pip install pylint==3.8 + - python3 -m pip install pylint==2.10.0 - pip3 install drgn job: From cfad48f27108bd46ed9fb4b239a6dfdcbaaacda8 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 11:11:06 -0500 Subject: [PATCH 24/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8e2acf9b..a045f8bd 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -2,7 +2,7 @@ image: "python:3.8" before_script: - python --version - - python3 -m pip install pylint==2.10.0 + - python3 -m pip install pylint==2.6 - pip3 install drgn job: From ba2e213d8553c1d043448296b9d44005f4b5ee36 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 11:14:13 -0500 Subject: [PATCH 25/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a045f8bd..4e1f381d 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,4 +9,4 @@ job: tags: - use1-ci-builder-20 script: - - pylint disable=consider-using-f-string -d duplicate-code -d invalid-name sdb + - pylint -d duplicate-code -d invalid-name sdb From 408251f8c40b0d0783b0781434a9d33ddf662699 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 11:16:28 -0500 Subject: [PATCH 26/39] Update sdb/pipeline.py --- sdb/pipeline.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/sdb/pipeline.py b/sdb/pipeline.py index f5a2dac3..35b39fe9 100644 --- a/sdb/pipeline.py +++ b/sdb/pipeline.py @@ -129,12 +129,6 @@ def invoke(myprog: drgn.Program, first_input: Iterable[drgn.Object], # at the end. # if shell_cmd is not None: - # - # This is a false-positive from pylint as we need - # to explicitly wait for shell_proc to be done and - # re-arrange our std_out. - # - # pylint: disable=consider-using-with shell_proc = subprocess.Popen(shell_cmd, shell=True, stdin=subprocess.PIPE, From 41194d1f331154aa7c367dac1387838883515843 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 11:18:53 -0500 Subject: [PATCH 27/39] Update sdb/command.py --- sdb/command.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdb/command.py b/sdb/command.py index edd3b814..38094bf0 100644 --- a/sdb/command.py +++ b/sdb/command.py @@ -601,7 +601,7 @@ def _call(self, objs: Iterable[drgn.Object]) -> Iterable[drgn.Object]: for type_, class_ in Walker.allWalkers.items(): try: baked[type_canonicalize_name(type_)] = class_ - except LookupError as exc: + except LookupError: pass has_input = False From d5fa139bf3fffda71c83f9cd91ddb17dbfacf402 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 13:57:53 -0500 Subject: [PATCH 28/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 4e1f381d..72c8a996 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,6 +3,7 @@ image: "python:3.8" before_script: - python --version - python3 -m pip install pylint==2.6 + - python3 -m pip install yapf - pip3 install drgn job: @@ -10,3 +11,4 @@ job: - use1-ci-builder-20 script: - pylint -d duplicate-code -d invalid-name sdb + - yapf --diff --style google --recursive sdb From dd85c53a91b550821cf7fdcf0fa620051d29c313 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 14:01:00 -0500 Subject: [PATCH 29/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 72c8a996..238f410e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,6 +4,7 @@ before_script: - python --version - python3 -m pip install pylint==2.6 - python3 -m pip install yapf + - python3 -m pip install mypy==0.730 - pip3 install drgn job: @@ -12,3 +13,4 @@ job: script: - pylint -d duplicate-code -d invalid-name sdb - yapf --diff --style google --recursive sdb + - python3 -m mypy --strict --show-error-codes -p sdb From 514896c65481291a75faf7479eb3d51ba25f3a70 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 14:07:45 -0500 Subject: [PATCH 30/39] Deleted requirement.txt --- requirement.txt | 1 - 1 file changed, 1 deletion(-) delete mode 100644 requirement.txt diff --git a/requirement.txt b/requirement.txt deleted file mode 100644 index 67dd2896..00000000 --- a/requirement.txt +++ /dev/null @@ -1 +0,0 @@ -pylint==3.8 From ce6a973d2d244258c0cb081d9a72698a7e89f2c2 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Tue, 23 Nov 2021 14:16:16 -0500 Subject: [PATCH 31/39] Update .gitlab-ci.yml --- .gitlab-ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 238f410e..791b8ecf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,3 +1,6 @@ +# +# Code quality checking for sdb +# image: "python:3.8" before_script: From 87b5fdc3680fb92f80b7d0388aa397ad72db4a2d Mon Sep 17 00:00:00 2001 From: Tony Perkins Date: Tue, 23 Mar 2021 21:36:04 -0700 Subject: [PATCH 32/39] Add the ps command to sdb. --- sdb/commands/linux/ps.py | 155 +++++ sdb/commands/stacks.py | 5 +- sdb/commands/threads.py | 25 +- .../data/regression_output/linux/ps | 575 ++++++++++++++++++ .../data/regression_output/linux/ps -A | 575 ++++++++++++++++++ .../data/regression_output/linux/ps -C bash | 5 + .../data/regression_output/linux/ps -e | 575 ++++++++++++++++++ .../regression_output/linux/ps -o pid,ppid | 575 ++++++++++++++++++ .../data/regression_output/linux/ps -p 4275 | 3 + .../data/regression_output/linux/ps -x | 575 ++++++++++++++++++ tests/integration/test_linux_generic.py | 9 + 11 files changed, 3069 insertions(+), 8 deletions(-) create mode 100644 sdb/commands/linux/ps.py create mode 100644 tests/integration/data/regression_output/linux/ps create mode 100644 tests/integration/data/regression_output/linux/ps -A create mode 100644 tests/integration/data/regression_output/linux/ps -C bash create mode 100644 tests/integration/data/regression_output/linux/ps -e create mode 100644 tests/integration/data/regression_output/linux/ps -o pid,ppid create mode 100644 tests/integration/data/regression_output/linux/ps -p 4275 create mode 100644 tests/integration/data/regression_output/linux/ps -x diff --git a/sdb/commands/linux/ps.py b/sdb/commands/linux/ps.py new file mode 100644 index 00000000..1aefb22b --- /dev/null +++ b/sdb/commands/linux/ps.py @@ -0,0 +1,155 @@ +# +# Copyright 2021 Datto Inc. +# +# 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. +# + +# pylint: disable=missing-docstring + +import datetime +import argparse +from typing import Callable, Dict, Iterable, List, Union + +import drgn +from drgn.helpers.linux.pid import for_each_task + +import sdb +from sdb.commands.stacks import Stacks +from sdb.commands.threads import Threads + + +class Ps(Threads): + """ + Locate and print information about processes + + POTENTIAL COLUMNS + task - address of the task_struct + uid - user id + pid - the pid of the thread's process + time - cumulative CPU time, "[DD-]HH:MM:SS" format + state - the state of the thread + prio - the priority of the thread + comm - the thread's command + cmdline - the thread's command line (when available) + + EXAMPLE + sdb> ps -e + task uid pid time stime ppid cmd + ------------------ ---- ---- ------- ------- ----- ---------------- + 0xffff9995001a0000 1000 4387 0:00:00 0:00:00 1218 inotify_reader + 0xffff9995001a2d00 1000 4382 0:00:00 0:00:00 1218 slack + 0xffff9995001a4380 1000 4383 0:00:04 0:00:00 1218 slack + 0xffff9995001a5a00 1000 4554 0:11:00 0:09:56 4118 AudioIP~ent RPC + 0xffff99950a430000 1000 4284 0:00:00 0:00:00 4118 HTML5 Parser + 0xffff99950a431680 1000 4157 0:00:12 0:00:08 1218 localStorage DBa + ... + """ + + names = ["ps"] + input_type = "struct task_struct *" + output_type = "struct task_struct *" + + FIELDS: Dict[str, Callable[[drgn.Object], Union[str, int]]] = { + "task": + lambda obj: hex(obj.value_()), + "uid": + lambda obj: int(obj.real_cred.uid.val), + "pid": + lambda obj: int(obj.pid), + "time": + lambda obj: str( + datetime.timedelta(seconds=int(obj.utime) / 1000 / 1000)), + "stime": + lambda obj: str( + datetime.timedelta(seconds=int(obj.stime) / 1000 / 1000)), + "ppid": + lambda obj: int(obj.parent.pid), + "stat": + lambda obj: str(Stacks.task_struct_get_state(obj)), + "cmd": + lambda obj: str(obj.comm.string_().decode("utf-8")), + } + + @classmethod + def _init_parser(cls, name: str) -> argparse.ArgumentParser: + parser = super()._init_parser(name) + parser.add_argument('-e', '--every', action='store_true', \ + help="Select all processes. Identical to -A") + parser.add_argument('-A', '--all', action='store_true', \ + help="Select all processes. Identical to -e") + parser.add_argument('-C', '--C', type=str, \ + help="Print only the process IDs of a command") + parser.add_argument('-x', '--x', action='store_true', \ + help="Show PID, TIME, CMD") + parser.add_argument('--no-headers', '--no-heading', \ + action='store_true', \ + help="Show the output without headers.") + parser.add_argument('-p', '--pid', type=int, nargs="+", \ + help="Select by process ID. Identical to --pid.") + parser.add_argument('-P', '--ppid', type=int, nargs="+", \ + help="Select by parent process ID. \ + This selects the processes with \ + a parent process ID in the pid list." + ) + parser.add_argument('-o', + '--format', + type=str, + help="User-defined format. \ + format is a single argument in the form of a blank-separated \ + or comma-separated list, which offers a way to specify individual\ + output columns. Headers may be renamed (ps -o pid,ppid) as desired. " + ) + return parser + + def get_table_key(self) -> str: + return "pid" + + def get_filtered_fields(self) -> List[str]: + fields = list(self.FIELDS.keys()) + fields_option_ae = [ + x for x in fields if x in "task, uid, pid, ppid, stime, time, cmd" + ] + fields_option_x = [x for x in fields if x in "pid, stat, time, cmd"] + fields_option_default = [x for x in fields if x in "pid, time, cmd"] + + if self.args.every or self.args.all: + fields = fields_option_ae + elif self.args.x: + fields = fields_option_x + elif self.args.format: + fields_option_o = 'task,' + self.args.format.lower() + fields_option_o = [x for x in fields if x in fields_option_o] + fields = fields_option_o + else: + fields = fields_option_default + return fields + + def show_headers(self) -> bool: + return not self.args.no_headers + + def no_input(self) -> Iterable[drgn.Object]: + cmds = self.args.C.split(",") if self.args.C else [] + pids = self.args.pid if self.args.pid else [] + ppids = self.args.ppid if self.args.ppid else [] + for obj in for_each_task(sdb.get_prog()): + if self.args.pid: + if obj.pid not in pids: + continue + if self.args.C: + cmd = str(obj.comm.string_().decode("utf-8")) + if cmd not in cmds: + continue + if self.args.ppid: + if obj.parent.pid not in ppids: + continue + yield obj diff --git a/sdb/commands/stacks.py b/sdb/commands/stacks.py index 3e06efcf..61900bb3 100644 --- a/sdb/commands/stacks.py +++ b/sdb/commands/stacks.py @@ -1,5 +1,6 @@ # # Copyright 2019 Delphix +# Copyright 2021 Datto Inc # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -359,8 +360,8 @@ def print_header(self) -> None: # @staticmethod def aggregate_stacks( - objs: Iterable[drgn.Object] - ) -> List[Tuple[Tuple[str, Tuple[int, ...]], List[drgn.Object]]]: + objs: Iterable[drgn.Object]) \ + -> List[Tuple[Tuple[str, Tuple[int, ...]], List[drgn.Object]]]: stack_aggr: Dict[Tuple[str, Tuple[int, ...]], List[drgn.Object]] = defaultdict(list) for task in objs: diff --git a/sdb/commands/threads.py b/sdb/commands/threads.py index e46eb25a..2aa47766 100644 --- a/sdb/commands/threads.py +++ b/sdb/commands/threads.py @@ -17,7 +17,7 @@ # pylint: disable=missing-docstring from textwrap import shorten -from typing import Callable, Dict, Iterable, Union +from typing import Callable, Dict, Iterable, List, Union import drgn from drgn.helpers.linux.pid import for_each_task @@ -85,13 +85,26 @@ class Threads(sdb.Locator, sdb.PrettyPrinter): "cmdline": _cmdline, } + def get_filtered_fields(self) -> List[str]: + return list(self.FIELDS.keys()) + + def get_table_key(self) -> str: + # pylint: disable=R0201 + return "task" + + def show_headers(self) -> bool: + # pylint: disable=R0201 + return True + def pretty_print(self, objs: Iterable[drgn.Object]) -> None: - fields = list(Threads.FIELDS.keys()) - table = Table(fields, None, {"task": str}) + fields = self.get_filtered_fields() + table_key = self.get_table_key() + + table = Table(fields, None, {table_key: str}) for obj in objs: - row_dict = {field: Threads.FIELDS[field](obj) for field in fields} - table.add_row(row_dict["task"], row_dict) - table.print_() + row_dict = {field: self.FIELDS[field](obj) for field in fields} + table.add_row(row_dict[table_key], row_dict) + table.print_(print_headers=self.show_headers()) def no_input(self) -> Iterable[drgn.Object]: yield from for_each_task(sdb.get_prog()) diff --git a/tests/integration/data/regression_output/linux/ps b/tests/integration/data/regression_output/linux/ps new file mode 100644 index 00000000..2a23741b --- /dev/null +++ b/tests/integration/data/regression_output/linux/ps @@ -0,0 +1,575 @@ +pid time cmd +---- -------- --------------- +1 0:02:44 systemd +2 0:00:00 kthreadd +3 0:00:00 rcu_gp +4 0:00:00 rcu_par_gp +5 0:00:00 kworker/0:0 +6 0:00:00 kworker/0:0H +7 0:00:00 kworker/u4:0 +8 0:00:00 mm_percpu_wq +9 0:00:00 ksoftirqd/0 +10 0:00:00 rcu_sched +11 0:00:00 migration/0 +12 0:00:00 idle_inject/0 +13 0:00:00 kworker/0:1 +14 0:00:00 cpuhp/0 +15 0:00:00 cpuhp/1 +16 0:00:00 idle_inject/1 +17 0:00:00 migration/1 +18 0:00:00 ksoftirqd/1 +19 0:00:00 kworker/1:0 +20 0:00:00 kworker/1:0H +21 0:00:00 kdevtmpfs +22 0:00:00 netns +23 0:00:00 rcu_tasks_kthre +24 0:00:00 kauditd +25 0:00:00 khungtaskd +26 0:00:00 oom_reaper +27 0:00:00 writeback +28 0:00:00 kcompactd0 +29 0:00:00 ksmd +30 0:00:00 khugepaged +31 0:00:00 crypto +32 0:00:00 kintegrityd +33 0:00:00 kblockd +34 0:00:00 tpm_dev_wq +35 0:00:00 ata_sff +36 0:00:00 md +37 0:00:00 edac-poller +38 0:00:00 devfreq_wq +39 0:00:00 watchdogd +40 0:00:00 kworker/1:1 +41 0:00:00 kworker/u4:1 +44 0:00:00 kswapd0 +45 0:00:00 kworker/u5:0 +46 0:00:00 ecryptfs-kthrea +135 0:00:00 kthrotld +136 0:00:00 irq/24-pciehp +137 0:00:00 irq/25-pciehp +138 0:00:00 irq/26-pciehp +139 0:00:00 irq/27-pciehp +140 0:00:00 irq/28-pciehp +141 0:00:00 irq/29-pciehp +142 0:00:00 irq/30-pciehp +143 0:00:00 irq/31-pciehp +144 0:00:00 irq/32-pciehp +145 0:00:00 irq/33-pciehp +146 0:00:00 irq/34-pciehp +147 0:00:00 irq/35-pciehp +148 0:00:00 irq/36-pciehp +149 0:00:00 irq/37-pciehp +150 0:00:00 irq/38-pciehp +151 0:00:00 irq/39-pciehp +152 0:00:00 irq/40-pciehp +153 0:00:00 irq/41-pciehp +154 0:00:00 irq/42-pciehp +155 0:00:00 irq/43-pciehp +156 0:00:00 irq/44-pciehp +157 0:00:00 irq/45-pciehp +158 0:00:00 irq/46-pciehp +159 0:00:00 irq/47-pciehp +160 0:00:00 irq/48-pciehp +161 0:00:00 irq/49-pciehp +162 0:00:00 irq/50-pciehp +163 0:00:00 irq/51-pciehp +164 0:00:00 irq/52-pciehp +165 0:00:00 irq/53-pciehp +166 0:00:00 irq/54-pciehp +167 0:00:00 irq/55-pciehp +168 0:00:00 acpi_thermal_pm +169 0:00:00 scsi_eh_0 +170 0:00:00 scsi_tmf_0 +171 0:00:00 scsi_eh_1 +172 0:00:00 scsi_tmf_1 +173 0:00:00 kworker/u4:2 +174 0:00:00 kworker/u4:3 +175 0:00:00 kstrp +199 0:00:00 charger_manager +200 0:00:00 kworker/1:1H +251 0:00:00 mpt_poll_0 +253 0:00:00 mpt/0 +264 0:00:00 kworker/0:1H +265 0:00:00 scsi_eh_2 +266 0:00:00 scsi_tmf_2 +267 0:00:00 kworker/u4:4 +268 0:00:00 kworker/u4:5 +318 0:00:00 raid5wq +346 0:00:00 spl_system_task +347 0:00:00 spl_delay_taskq +348 0:00:00 spl_dynamic_tas +349 0:00:00 spl_kmem_cache +357 0:00:00 zvol +367 0:00:00 arc_prune +371 0:00:00 zthr_procedure +372 0:00:00 zthr_procedure +373 0:00:00 dbu_evict +375 0:00:00 dbuf_evict +378 0:00:00 z_vdev_file +379 0:00:00 l2arc_feed +446 0:00:00 z_null_iss +447 0:00:00 z_null_int +448 0:00:00 z_rd_iss +449 0:00:00 z_rd_int +450 0:00:00 z_rd_int +451 0:00:00 z_rd_int +452 0:00:00 z_rd_int +453 0:00:00 z_rd_int +454 0:00:00 z_rd_int +455 0:00:00 z_rd_int +456 0:00:00 z_rd_int +457 0:00:00 z_wr_iss +458 0:00:00 z_wr_iss_h +459 0:00:00 z_wr_int +460 0:00:00 z_wr_int +461 0:00:00 z_wr_int +462 0:00:00 z_wr_int +463 0:00:00 z_wr_int +464 0:00:00 z_wr_int +465 0:00:00 z_wr_int +466 0:00:00 z_wr_int +467 0:00:00 z_wr_int_h +468 0:00:00 z_fr_iss +469 0:00:00 z_fr_iss +470 0:00:00 z_fr_iss +471 0:00:00 z_fr_iss +472 0:00:00 z_fr_iss +473 0:00:00 z_fr_iss +474 0:00:00 z_fr_iss +475 0:00:00 z_fr_iss +476 0:00:00 z_fr_int +477 0:00:00 z_cl_iss +478 0:00:00 z_cl_int +479 0:00:00 z_ioctl_iss +480 0:00:00 z_ioctl_int +481 0:00:00 z_trim_iss +482 0:00:00 z_trim_int +483 0:00:00 z_zvol +484 0:00:00 z_prefetch +485 0:00:00 z_upgrade +487 0:00:00 dp_sync_taskq +488 0:00:00 dp_zil_clean_ta +489 0:00:00 dp_zil_clean_ta +490 0:00:00 z_iput +491 0:00:00 z_unlinked_drai +493 0:00:00 metaslab_group_ +494 0:00:00 metaslab_group_ +551 0:00:00 txg_quiesce +552 0:00:00 txg_sync +553 0:00:00 mmp +554 0:00:00 zthr_procedure +555 0:00:00 zthr_procedure +556 0:00:00 zthr_procedure +557 0:00:00 zthr_procedure +735 0:00:00 kworker/0:2 +743 0:03:12 systemd-journal +765 0:00:00 kworker/0:3 +766 0:00:00 kworker/0:4 +767 0:00:00 rpciod +774 0:00:00 xprtiod +779 0:00:00 blkmapd +781 0:13:08 systemd-udevd +830 0:00:00 irq/16-vmwgfx +837 0:00:00 ttm_swap +935 0:00:00 kworker/1:2 +1031 0:00:08 VGAuthService +1033 0:02:04 vmtoolsd +1037 0:00:52 auditd +1038 0:00:00 auditd +1237 0:00:00 z_null_iss +1238 0:00:00 z_null_int +1239 0:00:00 z_rd_iss +1240 0:00:00 z_rd_int +1241 0:00:00 z_rd_int +1242 0:00:00 z_rd_int +1243 0:00:00 z_rd_int +1244 0:00:00 z_rd_int +1245 0:00:00 z_rd_int +1246 0:00:00 z_rd_int +1247 0:00:00 z_rd_int +1248 0:00:00 z_wr_iss +1249 0:00:00 z_wr_iss_h +1250 0:00:00 z_wr_int +1251 0:00:00 z_wr_int +1252 0:00:00 z_wr_int +1253 0:00:00 z_wr_int +1254 0:00:00 z_wr_int +1255 0:00:00 z_wr_int +1256 0:00:00 z_wr_int +1257 0:00:00 z_wr_int +1258 0:00:00 z_wr_int_h +1259 0:00:00 z_fr_iss +1260 0:00:00 z_fr_iss +1261 0:00:00 z_fr_iss +1262 0:00:00 z_fr_iss +1263 0:00:00 z_fr_iss +1264 0:00:00 z_fr_iss +1265 0:00:00 z_fr_iss +1266 0:00:00 z_fr_iss +1267 0:00:00 z_fr_int +1268 0:00:00 z_cl_iss +1269 0:00:00 z_cl_int +1270 0:00:00 z_ioctl_iss +1271 0:00:00 z_ioctl_int +1272 0:00:00 z_trim_iss +1273 0:00:00 z_trim_int +1274 0:00:00 z_zvol +1275 0:00:00 z_prefetch +1276 0:00:00 z_upgrade +1281 0:00:00 dp_sync_taskq +1282 0:00:00 dp_zil_clean_ta +1283 0:00:00 dp_zil_clean_ta +1284 0:00:00 z_iput +1285 0:00:00 z_unlinked_drai +1290 0:00:00 metaslab_group_ +1291 0:00:00 metaslab_group_ +1335 0:00:00 txg_quiesce +1336 0:00:00 txg_sync +1337 0:00:00 mmp +1338 0:00:00 zthr_procedure +1339 0:00:00 zthr_procedure +1340 0:00:00 zthr_procedure +1341 0:00:00 zthr_procedure +1542 0:00:24 systemd-network +1578 0:00:40 systemd-resolve +1688 0:00:08 sshd +1728 0:00:04 rsyslogd +1730 0:00:40 dbus-daemon +1756 0:00:04 cron +1772 0:00:08 nscd +1781 0:01:32 networkd-dispat +1782 0:00:04 zed +1783 0:00:32 systemd-logind +1784 0:00:04 nscd +1785 0:00:00 nscd +1786 0:00:00 nscd +1787 0:00:00 nscd +1788 0:00:00 nscd +1789 0:00:00 nscd +1790 0:00:00 nscd +1791 0:00:00 nscd +1792 0:00:36 snmpd +1793 0:00:28 in:imuxsock +1794 0:00:00 in:imklog +1795 0:00:12 rs:main Q:Reg +1797 0:00:00 zed +1798 0:00:00 zed +1845 0:00:00 rsync +1857 0:00:00 delphix-stat-se +1858 0:00:04 sed +1860 0:00:00 delphix-stat-se +1861 0:00:00 sed +1870 0:00:00 delphix-stat-se +1871 0:00:00 sed +1878 0:00:00 rpc.idmapd +1887 0:00:00 rpc.mountd +1895 0:00:04 delphix-stat-se +1903 0:00:00 sed +1906 0:00:00 timeout +1910 0:00:00 timeout +1911 0:00:12 polkitd +1918 0:35:24 profile +1919 0:00:04 delphix-stat-se +1926 0:00:00 kworker/u5:1 +1934 0:00:00 sed +1936 0:00:00 timeout +1940 0:00:00 mpstat +1941 0:00:04 delphix-stat-se +1942 0:00:04 sed +1952 0:00:04 nginx +1958 0:00:00 iostat +1959 0:00:00 delphix-stat-se +1964 0:00:00 sed +1968 0:00:00 gmain +1972 0:00:00 gdbus +1977 0:00:00 delphix-stat-se +1979 0:00:00 nfsd +1982 0:00:00 sed +1984 0:00:00 nfsd +1986 0:00:00 nfsd +1987 0:00:00 nfsd +1990 0:00:00 delphix-stat-se +1991 0:00:00 nfsd +1992 0:00:00 nfsd +1994 0:00:00 nfsd +1995 0:00:08 sed +1996 0:00:00 nfsd +1998 0:00:00 nfsd +2002 0:00:00 nfsd +2004 0:00:00 nfsd +2007 0:00:00 nfsd +2011 0:00:00 delphix-stat-se +2012 0:00:00 sed +2013 0:00:00 nfsd +2017 0:00:00 nfsd +2019 0:00:00 nfsd +2021 0:00:08 nfs_delete +2025 0:00:00 nfsd +2028 0:00:00 nfsd +2035 0:00:00 nfsd +2039 0:00:00 nfsd +2042 0:00:00 nfsd +2044 0:00:00 nfsd +2045 0:00:00 gmain +2049 0:00:00 nfsd +2050 0:00:00 nfsd +2054 0:00:00 nfsd +2055 0:00:04 sudo +2057 0:00:00 nfsd +2058 0:00:00 nfsd +2059 0:00:00 nfsd +2062 0:00:00 nfsd +2063 0:00:00 nfsd +2064 0:00:00 nfsd +2066 0:00:00 nfsd +2067 0:00:00 nfsd +2068 0:00:00 nfsd +2069 0:00:00 nfsd +2071 0:00:00 nfsd +2072 0:00:00 nfsd +2073 0:00:00 nfsd +2074 0:00:00 nfsd +2075 0:00:00 nfsd +2076 0:00:00 nfsd +2077 0:00:00 nfsd +2078 0:00:00 nfsd +2079 0:00:12 postgres +2080 0:00:00 nfsd +2082 0:00:00 nfsd +2083 0:00:00 sleep +2084 0:00:00 nfsd +2085 0:00:00 nfsd +2086 0:00:00 nfsd +2087 0:00:00 nfsd +2088 0:00:00 nfsd +2089 0:00:00 nfsd +2091 0:00:00 nfsd +2092 0:00:00 nfsd +2093 0:00:00 nfsd +2095 0:00:00 nfsd +2096 0:00:00 nfsd +2097 0:00:00 nfsd +2098 0:00:00 nfsd +2099 0:00:00 nfsd +2100 0:00:00 nfsd +2101 0:00:00 nfsd +2103 0:00:00 nfsd +2104 0:00:00 nfsd +2105 0:00:00 nfsd +2106 0:00:00 nfsd +2121 0:00:24 rngd +2124 0:00:08 automount +2125 0:00:04 automount +2126 0:00:00 automount +2127 0:00:00 agetty +2132 0:00:36 login +2150 0:00:00 automount +2156 0:00:00 automount +2250 0:00:00 postgres +2251 0:00:04 postgres +2252 0:00:00 postgres +2253 0:00:04 postgres +2254 0:00:12 postgres +2255 0:00:00 postgres +2438 0:00:00 target_completi +2439 0:00:00 xcopy_wq +2445 0:00:00 iscsi_np +2853 0:00:00 java +2856 16:50:40 java +2857 0:18:44 java +2858 0:18:04 java +2859 0:42:04 java +2861 0:00:56 java +2862 0:01:24 java +2865 0:00:00 java +2866 0:00:00 java +2867 0:00:00 java +2868 10:56:20 java +2869 1:48:48 java +2870 0:00:00 java +2874 0:00:00 sleep +2877 0:00:00 java +2878 0:00:04 sleep +2879 0:00:00 sleep +2880 0:01:44 java +2910 0:00:08 java +3249 0:00:00 kworker/1:3 +3853 0:00:00 java +3856 0:00:20 java +3857 0:00:04 java +3858 0:00:08 java +3859 0:00:00 java +3860 0:00:00 java +3861 0:00:08 java +3862 0:00:12 java +3863 0:00:00 java +3864 0:00:04 java +3865 0:00:04 java +3921 0:00:36 java +4003 0:03:00 java +4005 0:02:44 java +4006 0:00:04 java +4007 0:00:00 java +4033 0:00:12 java +4038 0:02:28 java +4070 0:02:32 java +4074 0:02:28 java +4098 0:02:12 java +4099 0:00:00 java +4104 0:01:44 java +4136 0:02:00 java +4141 0:00:44 postgres +4142 0:00:44 postgres +4143 0:00:24 postgres +4144 0:00:32 postgres +4145 0:00:32 postgres +4146 0:00:40 postgres +4147 0:00:20 postgres +4148 0:00:44 postgres +4149 0:00:24 postgres +4150 0:00:44 postgres +4151 0:00:56 postgres +4152 0:00:32 postgres +4153 0:00:44 postgres +4154 0:00:28 postgres +4155 0:00:36 postgres +4156 0:00:40 postgres +4157 0:00:36 postgres +4158 0:01:00 postgres +4159 0:00:20 postgres +4160 0:00:40 postgres +4163 0:02:28 java +4237 0:00:48 systemd +4250 0:00:00 (sd-pam) +4275 0:00:04 bash +4291 0:00:00 java +4292 0:02:04 java +4293 0:00:00 java +4312 0:00:00 java +4363 0:00:00 java +4364 0:00:00 java +4365 0:00:04 java +4366 0:00:00 java +4367 0:00:04 java +4368 0:00:00 java +4369 0:00:04 java +4372 0:00:00 java +4373 0:00:00 java +4374 0:00:00 java +4375 0:00:00 java +4376 0:00:00 java +4379 0:00:20 java +4381 0:00:12 java +4469 0:00:24 java +4473 0:37:16 python2 +4474 0:00:00 java +4475 0:00:00 java +4476 0:00:00 java +4477 0:47:00 python2 +4478 0:00:00 java +4479 0:00:00 java +4480 0:00:00 java +4481 0:01:16 python3 +4482 0:00:00 java +4483 0:13:40 java +4484 0:00:00 java +4496 0:00:24 sshd +4505 0:00:00 sshd +4506 0:00:32 bash +4625 0:00:00 nginx +4665 0:00:00 kworker/1:4 +4666 0:00:00 kworker/1:5 +4722 0:00:28 java +4723 0:00:00 java +4724 0:00:00 java +4725 0:00:00 java +4726 0:00:00 java +4727 0:00:00 java +4728 0:00:00 java +4729 0:00:00 java +4730 0:00:00 java +4731 0:00:00 java +4732 0:00:00 java +4733 0:00:04 java +4734 0:00:04 java +4735 0:00:00 java +4742 0:00:04 native_oom_hand +4756 0:00:00 oom_waiter +5464 0:00:00 sleep +5468 0:00:00 sleep +5472 0:00:00 sleep +5517 0:00:00 z_null_iss +5518 0:00:00 z_null_int +5519 0:00:00 z_rd_iss +5520 0:00:00 z_rd_int +5521 0:00:00 z_rd_int +5522 0:00:00 z_rd_int +5523 0:00:00 z_rd_int +5524 0:00:00 z_rd_int +5525 0:00:00 z_rd_int +5526 0:00:00 z_rd_int +5527 0:00:00 z_rd_int +5528 0:00:00 z_wr_iss +5529 0:00:00 z_wr_iss_h +5530 0:00:00 z_wr_int +5531 0:00:00 z_wr_int +5532 0:00:00 z_wr_int +5533 0:00:00 z_wr_int +5534 0:00:00 z_wr_int +5535 0:00:00 z_wr_int +5536 0:00:00 z_wr_int +5537 0:00:00 z_wr_int +5538 0:00:00 z_wr_int_h +5539 0:00:00 z_fr_iss +5540 0:00:00 z_fr_iss +5541 0:00:00 z_fr_iss +5542 0:00:00 z_fr_iss +5543 0:00:00 z_fr_iss +5544 0:00:00 z_fr_iss +5545 0:00:00 z_fr_iss +5546 0:00:00 z_fr_iss +5547 0:00:00 z_fr_int +5548 0:00:00 z_cl_iss +5549 0:00:00 z_cl_int +5550 0:00:00 z_ioctl_iss +5551 0:00:00 z_ioctl_int +5552 0:00:00 z_trim_iss +5553 0:00:00 z_trim_int +5554 0:00:00 z_zvol +5555 0:00:00 z_prefetch +5556 0:00:00 z_upgrade +5588 0:00:00 metaslab_group_ +5589 0:00:00 metaslab_group_ +5592 0:00:00 dp_sync_taskq +5595 0:00:00 dp_zil_clean_ta +5596 0:00:00 dp_zil_clean_ta +5597 0:00:00 z_iput +5598 0:00:00 z_unlinked_drai +5599 0:00:00 txg_quiesce +5601 0:00:00 txg_sync +5602 0:00:00 mmp +5673 0:00:00 zthr_procedure +5674 0:00:00 zthr_procedure +5675 0:00:00 zthr_procedure +5676 0:00:00 zthr_procedure +5891 0:00:00 z_vdev_file +5899 0:00:00 z_vdev_file +5952 0:00:00 z_vdev_file +5976 0:00:00 z_vdev_file +5981 0:00:04 sudo +5983 0:02:56 dd +6026 0:00:04 sudo +6028 0:00:00 su +6029 0:00:00 bash +6030 0:00:00 z_vdev_file +6184 0:00:00 z_wr_int +6186 0:00:00 z_vdev_file +6188 0:00:00 z_vdev_file +6189 0:00:00 z_wr_int +6190 0:00:00 z_wr_int +6191 0:00:00 z_vdev_file +6192 0:00:00 z_vdev_file +6194 0:00:00 z_wr_int +6196 0:00:00 z_wr_int +6279 0:00:00 z_vdev_file +6309 0:00:00 sleep diff --git a/tests/integration/data/regression_output/linux/ps -A b/tests/integration/data/regression_output/linux/ps -A new file mode 100644 index 00000000..977441ce --- /dev/null +++ b/tests/integration/data/regression_output/linux/ps -A @@ -0,0 +1,575 @@ +task uid pid time stime ppid cmd +------------------ ----- ---- -------- ------- ---- --------------- +0xffffa089669edc00 0 1 0:02:44 0:52:48 0 systemd +0xffffa089669ec500 0 2 0:00:00 0:01:48 0 kthreadd +0xffffa089669eae00 0 3 0:00:00 0:00:00 2 rcu_gp +0xffffa089669e8000 0 4 0:00:00 0:00:00 2 rcu_par_gp +0xffffa089669e9700 0 5 0:00:00 0:00:00 2 kworker/0:0 +0xffffa08966a05c00 0 6 0:00:00 0:00:00 2 kworker/0:0H +0xffffa08966a04500 0 7 0:00:00 0:00:48 2 kworker/u4:0 +0xffffa08966a02e00 0 8 0:00:00 0:00:00 2 mm_percpu_wq +0xffffa08966a00000 0 9 0:00:00 0:00:00 2 ksoftirqd/0 +0xffffa08966a01700 0 10 0:00:00 0:00:00 2 rcu_sched +0xffffa08966a0ae00 0 11 0:00:00 0:00:08 2 migration/0 +0xffffa08966a08000 0 12 0:00:00 0:00:00 2 idle_inject/0 +0xffffa08966a09700 0 13 0:00:00 0:00:08 2 kworker/0:1 +0xffffa08966a0c500 0 14 0:00:00 0:00:00 2 cpuhp/0 +0xffffa08966a50000 0 15 0:00:00 0:00:00 2 cpuhp/1 +0xffffa08966a51700 0 16 0:00:00 0:00:00 2 idle_inject/1 +0xffffa08966a55c00 0 17 0:00:00 0:00:04 2 migration/1 +0xffffa08966a54500 0 18 0:00:00 0:00:04 2 ksoftirqd/1 +0xffffa08966a52e00 0 19 0:00:00 0:00:40 2 kworker/1:0 +0xffffa08966a69700 0 20 0:00:00 0:00:00 2 kworker/1:0H +0xffffa08966a6dc00 0 21 0:00:00 0:00:04 2 kdevtmpfs +0xffffa08966a6c500 0 22 0:00:00 0:00:00 2 netns +0xffffa08966a6ae00 0 23 0:00:00 0:00:00 2 rcu_tasks_kthre +0xffffa08966a68000 0 24 0:00:00 0:01:04 2 kauditd +0xffffa08966bcae00 0 25 0:00:00 0:00:00 2 khungtaskd +0xffffa08966bc8000 0 26 0:00:00 0:00:00 2 oom_reaper +0xffffa08966bc9700 0 27 0:00:00 0:00:00 2 writeback +0xffffa08966bcdc00 0 28 0:00:00 0:00:08 2 kcompactd0 +0xffffa08966bcc500 0 29 0:00:00 0:00:00 2 ksmd +0xffffa08966bd2e00 0 30 0:00:00 0:00:00 2 khugepaged +0xffffa08966bd0000 0 31 0:00:00 0:00:00 2 crypto +0xffffa08966bd1700 0 32 0:00:00 0:00:00 2 kintegrityd +0xffffa08966bd5c00 0 33 0:00:00 0:00:00 2 kblockd +0xffffa08966bd4500 0 34 0:00:00 0:00:00 2 tpm_dev_wq +0xffffa089666d5c00 0 35 0:00:00 0:00:00 2 ata_sff +0xffffa089666d4500 0 36 0:00:00 0:00:00 2 md +0xffffa089666d2e00 0 37 0:00:00 0:00:00 2 edac-poller +0xffffa089666d0000 0 38 0:00:00 0:00:00 2 devfreq_wq +0xffffa089666d1700 0 39 0:00:00 0:00:00 2 watchdogd +0xffffa08966795c00 0 40 0:00:00 0:00:00 2 kworker/1:1 +0xffffa08966794500 0 41 0:00:00 0:00:16 2 kworker/u4:1 +0xffffa08966791700 0 44 0:00:00 0:00:04 2 kswapd0 +0xffffa089587bdc00 0 45 0:00:00 0:00:00 2 kworker/u5:0 +0xffffa089587bc500 0 46 0:00:00 0:00:00 2 ecryptfs-kthrea +0xffffa08958039700 0 135 0:00:00 0:00:00 2 kthrotld +0xffffa0895803c500 0 136 0:00:00 0:00:00 2 irq/24-pciehp +0xffffa0895803dc00 0 137 0:00:00 0:00:00 2 irq/25-pciehp +0xffffa0895803ae00 0 138 0:00:00 0:00:00 2 irq/26-pciehp +0xffffa08958038000 0 139 0:00:00 0:00:00 2 irq/27-pciehp +0xffffa0895802c500 0 140 0:00:00 0:00:00 2 irq/28-pciehp +0xffffa0895802dc00 0 141 0:00:00 0:00:00 2 irq/29-pciehp +0xffffa08958029700 0 142 0:00:00 0:00:00 2 irq/30-pciehp +0xffffa08958028000 0 143 0:00:00 0:00:00 2 irq/31-pciehp +0xffffa0895802ae00 0 144 0:00:00 0:00:00 2 irq/32-pciehp +0xffffa0895809ae00 0 145 0:00:00 0:00:00 2 irq/33-pciehp +0xffffa0895809c500 0 146 0:00:00 0:00:00 2 irq/34-pciehp +0xffffa0895809dc00 0 147 0:00:00 0:00:00 2 irq/35-pciehp +0xffffa08958099700 0 148 0:00:00 0:00:00 2 irq/36-pciehp +0xffffa08958098000 0 149 0:00:00 0:00:00 2 irq/37-pciehp +0xffffa08958031700 0 150 0:00:00 0:00:00 2 irq/38-pciehp +0xffffa08958034500 0 151 0:00:00 0:00:00 2 irq/39-pciehp +0xffffa08958035c00 0 152 0:00:00 0:00:00 2 irq/40-pciehp +0xffffa08958030000 0 153 0:00:00 0:00:00 2 irq/41-pciehp +0xffffa08958032e00 0 154 0:00:00 0:00:00 2 irq/42-pciehp +0xffffa089580e2e00 0 155 0:00:00 0:00:00 2 irq/43-pciehp +0xffffa089580e5c00 0 156 0:00:00 0:00:00 2 irq/44-pciehp +0xffffa089580e1700 0 157 0:00:00 0:00:00 2 irq/45-pciehp +0xffffa089580e0000 0 158 0:00:00 0:00:00 2 irq/46-pciehp +0xffffa089580e4500 0 159 0:00:00 0:00:00 2 irq/47-pciehp +0xffffa08958089700 0 160 0:00:00 0:00:00 2 irq/48-pciehp +0xffffa0895808ae00 0 161 0:00:00 0:00:00 2 irq/49-pciehp +0xffffa0895808dc00 0 162 0:00:00 0:00:00 2 irq/50-pciehp +0xffffa08958088000 0 163 0:00:00 0:00:00 2 irq/51-pciehp +0xffffa0895808c500 0 164 0:00:00 0:00:00 2 irq/52-pciehp +0xffffa0895820c500 0 165 0:00:00 0:00:00 2 irq/53-pciehp +0xffffa0895820ae00 0 166 0:00:00 0:00:00 2 irq/54-pciehp +0xffffa08958208000 0 167 0:00:00 0:00:00 2 irq/55-pciehp +0xffffa08958209700 0 168 0:00:00 0:00:00 2 acpi_thermal_pm +0xffffa0895820dc00 0 169 0:00:00 0:00:04 2 scsi_eh_0 +0xffffa08957d18000 0 170 0:00:00 0:00:00 2 scsi_tmf_0 +0xffffa08957d19700 0 171 0:00:00 0:00:04 2 scsi_eh_1 +0xffffa08957d1dc00 0 172 0:00:00 0:00:00 2 scsi_tmf_1 +0xffffa08957d1c500 0 173 0:00:00 0:01:00 2 kworker/u4:2 +0xffffa08958082e00 0 174 0:00:00 0:00:52 2 kworker/u4:3 +0xffffa08958084500 0 175 0:00:00 0:00:00 2 kstrp +0xffffa08957db8000 0 199 0:00:00 0:00:00 2 charger_manager +0xffffa08957dbdc00 0 200 0:00:00 0:00:00 2 kworker/1:1H +0xffffa08957db5c00 0 251 0:00:00 0:00:00 2 mpt_poll_0 +0xffffa089587b9700 0 253 0:00:00 0:00:00 2 mpt/0 +0xffffa08957585c00 0 264 0:00:00 0:00:00 2 kworker/0:1H +0xffffa08957582e00 0 265 0:00:00 0:00:00 2 scsi_eh_2 +0xffffa08957580000 0 266 0:00:00 0:00:00 2 scsi_tmf_2 +0xffffa08957581700 0 267 0:00:00 0:00:16 2 kworker/u4:4 +0xffffa08957584500 0 268 0:00:00 0:00:00 2 kworker/u4:5 +0xffffa08966790000 0 318 0:00:00 0:00:00 2 raid5wq +0xffffa08957da8000 0 346 0:00:00 0:00:04 2 spl_system_task +0xffffa08957dadc00 0 347 0:00:00 0:00:00 2 spl_delay_taskq +0xffffa08957dac500 0 348 0:00:00 0:00:24 2 spl_dynamic_tas +0xffffa08957daae00 0 349 0:00:00 0:01:32 2 spl_kmem_cache +0xffffa08966792e00 0 357 0:00:00 0:00:00 2 zvol +0xffffa08956848000 0 367 0:00:00 0:00:00 2 arc_prune +0xffffa0895684c500 0 371 0:00:00 0:00:00 2 zthr_procedure +0xffffa08956849700 0 372 0:00:00 0:00:04 2 zthr_procedure +0xffffa0895684ae00 0 373 0:00:00 0:00:04 2 dbu_evict +0xffffa0895684dc00 0 375 0:00:00 0:01:52 2 dbuf_evict +0xffffa089580b2e00 0 378 0:00:00 0:00:16 2 z_vdev_file +0xffffa089580b1700 0 379 0:00:00 0:00:00 2 l2arc_feed +0xffffa089587bae00 0 446 0:00:00 0:00:16 2 z_null_iss +0xffffa089587b8000 0 447 0:00:00 0:00:28 2 z_null_int +0xffffa08957dbc500 0 448 0:00:00 0:00:00 2 z_rd_iss +0xffffa08957dbae00 0 449 0:00:00 0:13:00 2 z_rd_int +0xffffa08957db9700 0 450 0:00:00 0:11:20 2 z_rd_int +0xffffa08957db0000 0 451 0:00:00 0:12:32 2 z_rd_int +0xffffa08957db1700 0 452 0:00:00 0:11:04 2 z_rd_int +0xffffa08957db2e00 0 453 0:00:00 0:13:08 2 z_rd_int +0xffffa08957db4500 0 454 0:00:00 0:12:48 2 z_rd_int +0xffffa08953515c00 0 455 0:00:00 0:12:00 2 z_rd_int +0xffffa08953514500 0 456 0:00:00 0:11:20 2 z_rd_int +0xffffa08953512e00 0 457 0:00:00 1:24:20 2 z_wr_iss +0xffffa08953510000 0 458 0:00:00 0:06:36 2 z_wr_iss_h +0xffffa08953511700 0 459 0:00:00 0:01:36 2 z_wr_int +0xffffa0895350ae00 0 460 0:00:00 0:01:56 2 z_wr_int +0xffffa08953508000 0 461 0:00:00 0:01:08 2 z_wr_int +0xffffa08953509700 0 462 0:00:00 0:01:20 2 z_wr_int +0xffffa0895350dc00 0 463 0:00:00 0:01:44 2 z_wr_int +0xffffa0895350c500 0 464 0:00:00 0:01:56 2 z_wr_int +0xffffa089534b4500 0 465 0:00:00 0:02:44 2 z_wr_int +0xffffa089534b2e00 0 466 0:00:00 0:01:20 2 z_wr_int +0xffffa089534b0000 0 467 0:00:00 0:00:48 2 z_wr_int_h +0xffffa089534b1700 0 468 0:00:00 0:00:00 2 z_fr_iss +0xffffa089534b5c00 0 469 0:00:00 0:00:00 2 z_fr_iss +0xffffa089534a2e00 0 470 0:00:00 0:00:00 2 z_fr_iss +0xffffa089534a0000 0 471 0:00:00 0:00:00 2 z_fr_iss +0xffffa089534a1700 0 472 0:00:00 0:00:00 2 z_fr_iss +0xffffa089534a5c00 0 473 0:00:00 0:00:00 2 z_fr_iss +0xffffa089534a4500 0 474 0:00:00 0:00:00 2 z_fr_iss +0xffffa08953474500 0 475 0:00:00 0:00:00 2 z_fr_iss +0xffffa08953472e00 0 476 0:00:00 0:00:00 2 z_fr_int +0xffffa08953470000 0 477 0:00:00 0:00:00 2 z_cl_iss +0xffffa08953471700 0 478 0:00:00 0:00:00 2 z_cl_int +0xffffa08953475c00 0 479 0:00:00 0:00:00 2 z_ioctl_iss +0xffffa0895346c500 0 480 0:00:00 0:00:12 2 z_ioctl_int +0xffffa0895346ae00 0 481 0:00:00 0:00:00 2 z_trim_iss +0xffffa08953468000 0 482 0:00:00 0:00:00 2 z_trim_int +0xffffa08953469700 0 483 0:00:00 0:00:12 2 z_zvol +0xffffa0895346dc00 0 484 0:00:00 0:00:00 2 z_prefetch +0xffffa089533fdc00 0 485 0:00:00 0:00:00 2 z_upgrade +0xffffa089533fc500 0 487 0:00:00 0:03:28 2 dp_sync_taskq +0xffffa089533fae00 0 488 0:00:00 0:00:00 2 dp_zil_clean_ta +0xffffa089533f8000 0 489 0:00:00 0:00:08 2 dp_zil_clean_ta +0xffffa089533f9700 0 490 0:00:00 0:00:00 2 z_iput +0xffffa08952e71700 0 491 0:00:00 0:00:00 2 z_unlinked_drai +0xffffa08952e75c00 0 493 0:00:00 0:00:04 2 metaslab_group_ +0xffffa08952e70000 0 494 0:00:00 0:00:00 2 metaslab_group_ +0xffffa08957e3c500 0 551 0:00:00 0:00:00 2 txg_quiesce +0xffffa08957da9700 0 552 0:00:00 0:02:04 2 txg_sync +0xffffa08952e5ae00 0 553 0:00:00 0:00:04 2 mmp +0xffffa08952e5dc00 0 554 0:00:00 0:00:00 2 zthr_procedure +0xffffa08952e58000 0 555 0:00:00 0:00:00 2 zthr_procedure +0xffffa08952e5c500 0 556 0:00:00 0:00:00 2 zthr_procedure +0xffffa08952e59700 0 557 0:00:00 0:00:00 2 zthr_procedure +0xffffa089320e0000 0 735 0:00:00 0:00:04 2 kworker/0:2 +0xffffa089320e1700 0 743 0:03:12 0:06:12 1 systemd-journal +0xffffa0893085dc00 0 765 0:00:00 0:00:32 2 kworker/0:3 +0xffffa08952e72e00 0 766 0:00:00 0:00:32 2 kworker/0:4 +0xffffa08952e74500 0 767 0:00:00 0:00:00 2 rpciod +0xffffa089304e8000 0 774 0:00:00 0:00:00 2 xprtiod +0xffffa08931968000 0 779 0:00:00 0:00:08 1 blkmapd +0xffffa0893196dc00 0 781 0:13:08 0:06:00 1 systemd-udevd +0xffffa089320e5c00 0 830 0:00:00 0:00:00 2 irq/16-vmwgfx +0xffffa08957e38000 0 837 0:00:00 0:00:00 2 ttm_swap +0xffffa089304ec500 0 935 0:00:00 0:00:04 2 kworker/1:2 +0xffffa08958081700 0 1031 0:00:08 0:00:28 1 VGAuthService +0xffffa089320e4500 0 1033 0:02:04 0:01:40 1 vmtoolsd +0xffffa08952ec4500 0 1037 0:00:52 0:03:44 1 auditd +0xffffa0893a532e00 0 1038 0:00:00 0:01:08 1 auditd +0xffffa0894e7b2e00 0 1237 0:00:00 0:00:28 2 z_null_iss +0xffffa0894e7f4500 0 1238 0:00:00 0:00:32 2 z_null_int +0xffffa0894e7f2e00 0 1239 0:00:00 0:00:00 2 z_rd_iss +0xffffa0894e7f0000 0 1240 0:00:00 0:00:04 2 z_rd_int +0xffffa0894e7f1700 0 1241 0:00:00 0:00:00 2 z_rd_int +0xffffa0894e7f5c00 0 1242 0:00:00 0:00:00 2 z_rd_int +0xffffa0894e7fdc00 0 1243 0:00:00 0:00:00 2 z_rd_int +0xffffa0894e7fc500 0 1244 0:00:00 0:00:00 2 z_rd_int +0xffffa0894e7fae00 0 1245 0:00:00 0:00:00 2 z_rd_int +0xffffa0894e7f8000 0 1246 0:00:00 0:00:00 2 z_rd_int +0xffffa0894e7f9700 0 1247 0:00:00 0:00:00 2 z_rd_int +0xffffa0894ea71700 0 1248 0:00:00 0:00:00 2 z_wr_iss +0xffffa0894ea75c00 0 1249 0:00:00 0:00:00 2 z_wr_iss_h +0xffffa0894ea74500 0 1250 0:00:00 0:00:00 2 z_wr_int +0xffffa0894ea72e00 0 1251 0:00:00 0:00:00 2 z_wr_int +0xffffa0894ea70000 0 1252 0:00:00 0:00:00 2 z_wr_int +0xffffa0894ea7dc00 0 1253 0:00:00 0:00:04 2 z_wr_int +0xffffa0894ea7c500 0 1254 0:00:00 0:00:00 2 z_wr_int +0xffffa0894ea7ae00 0 1255 0:00:00 0:00:00 2 z_wr_int +0xffffa0894ea78000 0 1256 0:00:00 0:00:00 2 z_wr_int +0xffffa0894ea79700 0 1257 0:00:00 0:00:00 2 z_wr_int +0xffffa0894eaaae00 0 1258 0:00:00 0:00:00 2 z_wr_int_h +0xffffa0894eaa8000 0 1259 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eaa9700 0 1260 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eaadc00 0 1261 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eaac500 0 1262 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eabae00 0 1263 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eab8000 0 1264 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eab9700 0 1265 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eabdc00 0 1266 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eabc500 0 1267 0:00:00 0:00:00 2 z_fr_int +0xffffa0894eb61700 0 1268 0:00:00 0:00:00 2 z_cl_iss +0xffffa0894eb65c00 0 1269 0:00:00 0:00:00 2 z_cl_int +0xffffa0894eb64500 0 1270 0:00:00 0:00:00 2 z_ioctl_iss +0xffffa0894eb62e00 0 1271 0:00:00 0:00:00 2 z_ioctl_int +0xffffa0894eb60000 0 1272 0:00:00 0:00:00 2 z_trim_iss +0xffffa0894eb69700 0 1273 0:00:00 0:00:00 2 z_trim_int +0xffffa0894eb6dc00 0 1274 0:00:00 0:00:00 2 z_zvol +0xffffa0894eb6c500 0 1275 0:00:00 0:00:00 2 z_prefetch +0xffffa0894eb6ae00 0 1276 0:00:00 0:00:00 2 z_upgrade +0xffffa0894ebb2e00 0 1281 0:00:00 0:00:00 2 dp_sync_taskq +0xffffa0894ebb0000 0 1282 0:00:00 0:00:00 2 dp_zil_clean_ta +0xffffa0894ebb1700 0 1283 0:00:00 0:00:00 2 dp_zil_clean_ta +0xffffa0894ebb4500 0 1284 0:00:00 0:00:00 2 z_iput +0xffffa0894ebb5c00 0 1285 0:00:00 0:00:00 2 z_unlinked_drai +0xffffa0893085c500 0 1290 0:00:00 0:00:00 2 metaslab_group_ +0xffffa08930858000 0 1291 0:00:00 0:00:00 2 metaslab_group_ +0xffffa089553a8000 0 1335 0:00:00 0:00:00 2 txg_quiesce +0xffffa089553a9700 0 1336 0:00:00 0:00:08 2 txg_sync +0xffffa089553adc00 0 1337 0:00:00 0:00:00 2 mmp +0xffffa089553ac500 0 1338 0:00:00 0:00:00 2 zthr_procedure +0xffffa089553bae00 0 1339 0:00:00 0:00:00 2 zthr_procedure +0xffffa089553b8000 0 1340 0:00:00 0:00:00 2 zthr_procedure +0xffffa089553b9700 0 1341 0:00:00 0:00:00 2 zthr_procedure +0xffffa0893085ae00 101 1542 0:00:24 0:00:44 1 systemd-network +0xffffa089408f1700 102 1578 0:00:40 0:00:24 1 systemd-resolve +0xffffa089408f2e00 0 1688 0:00:08 0:00:12 1 sshd +0xffffa08940965c00 103 1728 0:00:04 0:00:16 1 rsyslogd +0xffffa08940962e00 104 1730 0:00:40 0:00:48 1 dbus-daemon +0xffffa08931969700 0 1756 0:00:04 0:00:00 1 cron +0xffffa0894e6a9700 0 1772 0:00:08 0:00:12 1 nscd +0xffffa089408f8000 0 1781 0:01:32 0:01:00 1 networkd-dispat +0xffffa089408fdc00 0 1782 0:00:04 0:00:40 1 zed +0xffffa089408fc500 0 1783 0:00:32 0:00:24 1 systemd-logind +0xffffa0895601dc00 0 1784 0:00:04 0:00:00 1 nscd +0xffffa08956018000 0 1785 0:00:00 0:00:08 1 nscd +0xffffa08956019700 0 1786 0:00:00 0:00:04 1 nscd +0xffffa0895601c500 0 1787 0:00:00 0:00:12 1 nscd +0xffffa0895601ae00 0 1788 0:00:00 0:00:08 1 nscd +0xffffa089560c1700 0 1789 0:00:00 0:00:08 1 nscd +0xffffa089560c4500 0 1790 0:00:00 0:00:00 1 nscd +0xffffa089560c2e00 0 1791 0:00:00 0:00:00 1 nscd +0xffffa089553bc500 107 1792 0:00:36 0:01:08 1 snmpd +0xffffa089408f5c00 103 1793 0:00:28 0:00:24 1 in:imuxsock +0xffffa089408f4500 103 1794 0:00:00 0:00:04 1 in:imklog +0xffffa08930859700 103 1795 0:00:12 0:00:32 1 rs:main Q:Reg +0xffffa0895541dc00 0 1797 0:00:00 0:00:00 1 zed +0xffffa0895541ae00 0 1798 0:00:00 0:00:00 1 zed +0xffffa08957d1ae00 0 1845 0:00:00 0:00:00 1 rsync +0xffffa0893691dc00 0 1857 0:00:00 0:00:00 1 delphix-stat-se +0xffffa08936918000 0 1858 0:00:04 0:00:04 1 sed +0xffffa0893691c500 0 1860 0:00:00 0:00:00 1 delphix-stat-se +0xffffa08936919700 0 1861 0:00:00 0:00:00 1 sed +0xffffa0893691ae00 0 1870 0:00:00 0:00:00 1 delphix-stat-se +0xffffa0893304dc00 0 1871 0:00:00 0:00:00 1 sed +0xffffa08952ec2e00 0 1878 0:00:00 0:00:00 1 rpc.idmapd +0xffffa08952ec0000 0 1887 0:00:00 0:00:00 1 rpc.mountd +0xffffa08933048000 0 1895 0:00:04 0:00:04 1 delphix-stat-se +0xffffa08933049700 0 1903 0:00:00 0:00:00 1 sed +0xffffa0893649ae00 0 1906 0:00:00 0:00:00 1860 timeout +0xffffa08936498000 0 1910 0:00:00 0:00:00 1857 timeout +0xffffa089304edc00 0 1911 0:00:12 0:00:20 1 polkitd +0xffffa089320c1700 0 1918 0:35:24 0:12:28 1910 profile +0xffffa0893304c500 0 1919 0:00:04 0:00:04 1 delphix-stat-se +0xffffa08957e39700 0 1926 0:00:00 0:00:00 2 kworker/u5:1 +0xffffa0893304ae00 0 1934 0:00:00 0:00:00 1 sed +0xffffa089320c4500 0 1936 0:00:00 0:00:00 1870 timeout +0xffffa089320c5c00 0 1940 0:00:00 0:00:00 1906 mpstat +0xffffa08931d50000 0 1941 0:00:04 0:00:04 1 delphix-stat-se +0xffffa089320c0000 0 1942 0:00:04 0:00:24 1 sed +0xffffa0893319dc00 0 1952 0:00:04 0:00:00 1 nginx +0xffffa0894b280000 0 1958 0:00:00 0:00:00 1936 iostat +0xffffa0894b281700 0 1959 0:00:00 0:00:00 1 delphix-stat-se +0xffffa0894b282e00 0 1964 0:00:00 0:00:04 1 sed +0xffffa08952ec5c00 0 1968 0:00:00 0:00:00 1 gmain +0xffffa08930464500 0 1972 0:00:00 0:00:00 1 gdbus +0xffffa089320c2e00 0 1977 0:00:00 0:00:04 1 delphix-stat-se +0xffffa08958085c00 0 1979 0:00:00 0:00:04 2 nfsd +0xffffa0896510dc00 0 1982 0:00:00 0:00:04 1 sed +0xffffa0894e7b0000 0 1984 0:00:00 0:00:00 2 nfsd +0xffffa0894e7b5c00 0 1986 0:00:00 0:00:00 2 nfsd +0xffffa0894e7b1700 0 1987 0:00:00 0:00:00 2 nfsd +0xffffa0896510ae00 0 1990 0:00:00 0:00:04 1 delphix-stat-se +0xffffa0894e7b4500 0 1991 0:00:00 0:00:00 2 nfsd +0xffffa089580b0000 0 1992 0:00:00 0:00:00 2 nfsd +0xffffa089580b5c00 0 1994 0:00:00 0:00:00 2 nfsd +0xffffa089405c9700 0 1995 0:00:08 0:00:08 1 sed +0xffffa089580b4500 0 1996 0:00:00 0:00:00 2 nfsd +0xffffa089408f9700 0 1998 0:00:00 0:00:00 2 nfsd +0xffffa089553bdc00 0 2002 0:00:00 0:00:00 2 nfsd +0xffffa0894e6aae00 0 2004 0:00:00 0:00:00 2 nfsd +0xffffa0894e6ac500 0 2007 0:00:00 0:00:00 2 nfsd +0xffffa0894b285c00 0 2011 0:00:00 0:00:04 1 delphix-stat-se +0xffffa08965109700 0 2012 0:00:00 0:00:16 1 sed +0xffffa0894e6adc00 0 2013 0:00:00 0:00:00 2 nfsd +0xffffa089408fae00 0 2017 0:00:00 0:00:00 2 nfsd +0xffffa08957e3ae00 0 2019 0:00:00 0:00:00 2 nfsd +0xffffa0893649dc00 0 2021 0:00:08 0:00:36 1 nfs_delete +0xffffa089304e9700 0 2025 0:00:00 0:00:00 2 nfsd +0xffffa08940961700 0 2028 0:00:00 0:00:00 2 nfsd +0xffffa08940960000 0 2035 0:00:00 0:00:00 2 nfsd +0xffffa0893bf7ae00 0 2039 0:00:00 0:00:00 2 nfsd +0xffffa0893bf78000 0 2042 0:00:00 0:00:00 2 nfsd +0xffffa0893bf79700 0 2044 0:00:00 0:00:00 2 nfsd +0xffffa0894483dc00 0 2045 0:00:00 0:00:00 1 gmain +0xffffa0893bf7dc00 0 2049 0:00:00 0:00:00 2 nfsd +0xffffa0893bf7c500 0 2050 0:00:00 0:00:00 2 nfsd +0xffffa08957e3dc00 0 2054 0:00:00 0:00:00 2 nfsd +0xffffa08936801700 0 2055 0:00:04 0:00:12 1 sudo +0xffffa0894eb68000 0 2057 0:00:00 0:00:00 2 nfsd +0xffffa08958080000 0 2058 0:00:00 0:00:00 2 nfsd +0xffffa08941f6c500 0 2059 0:00:00 0:00:00 2 nfsd +0xffffa08941f6ae00 0 2062 0:00:00 0:00:00 2 nfsd +0xffffa08941f68000 0 2063 0:00:00 0:00:00 2 nfsd +0xffffa08941f69700 0 2064 0:00:00 0:00:00 2 nfsd +0xffffa08941f6dc00 0 2066 0:00:00 0:00:00 2 nfsd +0xffffa08934e00000 0 2067 0:00:00 0:00:00 2 nfsd +0xffffa08934e01700 0 2068 0:00:00 0:00:00 2 nfsd +0xffffa08934e05c00 0 2069 0:00:00 0:00:00 2 nfsd +0xffffa08934e04500 0 2071 0:00:00 0:00:00 2 nfsd +0xffffa08934e02e00 0 2072 0:00:00 0:00:00 2 nfsd +0xffffa08934b58000 0 2073 0:00:00 0:00:00 2 nfsd +0xffffa08934b59700 0 2074 0:00:00 0:00:00 2 nfsd +0xffffa08934b5dc00 0 2075 0:00:00 0:00:00 2 nfsd +0xffffa08934b5c500 0 2076 0:00:00 0:00:00 2 nfsd +0xffffa08934b5ae00 0 2077 0:00:00 0:00:00 2 nfsd +0xffffa089358f1700 0 2078 0:00:00 0:00:00 2 nfsd +0xffffa08936800000 65437 2079 0:00:12 0:02:24 2055 postgres +0xffffa089358f5c00 0 2080 0:00:00 0:00:00 2 nfsd +0xffffa089358f4500 0 2082 0:00:00 0:00:00 2 nfsd +0xffffa0893dd31700 0 2083 0:00:00 0:00:00 1959 sleep +0xffffa089358f2e00 0 2084 0:00:00 0:00:00 2 nfsd +0xffffa089358f0000 0 2085 0:00:00 0:00:00 2 nfsd +0xffffa0893d89ae00 0 2086 0:00:00 0:00:00 2 nfsd +0xffffa0893d898000 0 2087 0:00:00 0:00:00 2 nfsd +0xffffa0893d899700 0 2088 0:00:00 0:00:00 2 nfsd +0xffffa0893d89dc00 0 2089 0:00:00 0:00:00 2 nfsd +0xffffa0893f96c500 0 2091 0:00:00 0:00:00 2 nfsd +0xffffa0893f96ae00 0 2092 0:00:00 0:00:00 2 nfsd +0xffffa0893f968000 0 2093 0:00:00 0:00:00 2 nfsd +0xffffa0893f969700 0 2095 0:00:00 0:00:00 2 nfsd +0xffffa0893f96dc00 0 2096 0:00:00 0:00:00 2 nfsd +0xffffa0893d89c500 0 2097 0:00:00 0:00:00 2 nfsd +0xffffa089408f0000 0 2098 0:00:00 0:00:00 2 nfsd +0xffffa089553aae00 0 2099 0:00:00 0:00:00 2 nfsd +0xffffa08939f70000 0 2100 0:00:00 0:00:00 2 nfsd +0xffffa08939f71700 0 2101 0:00:00 0:00:00 2 nfsd +0xffffa08939f75c00 0 2103 0:00:00 0:00:00 2 nfsd +0xffffa08939f74500 0 2104 0:00:00 0:00:00 2 nfsd +0xffffa08939f72e00 0 2105 0:00:00 0:00:00 2 nfsd +0xffffa0893c08ae00 0 2106 0:00:00 0:00:00 2 nfsd +0xffffa08950a89700 0 2121 0:00:24 0:00:08 1 rngd +0xffffa089304eae00 0 2124 0:00:08 0:00:12 1 automount +0xffffa089410b9700 0 2125 0:00:04 0:00:00 1 automount +0xffffa089410bae00 0 2126 0:00:00 0:00:00 1 automount +0xffffa0893c2b1700 0 2127 0:00:00 0:00:08 1 agetty +0xffffa0893c2b4500 0 2132 0:00:36 0:01:00 1 login +0xffffa089410bc500 0 2150 0:00:00 0:00:00 1 automount +0xffffa08960f42e00 0 2156 0:00:00 0:00:08 1 automount +0xffffa0894cc81700 65437 2250 0:00:00 0:00:00 2079 postgres +0xffffa0894cc82e00 65437 2251 0:00:04 0:00:16 2079 postgres +0xffffa0894cc80000 65437 2252 0:00:00 0:00:00 2079 postgres +0xffffa0894cc85c00 65437 2253 0:00:04 0:00:00 2079 postgres +0xffffa0894cc84500 65437 2254 0:00:12 0:01:28 2079 postgres +0xffffa0891e0ec500 65437 2255 0:00:00 0:00:00 2079 postgres +0xffffa0890590c500 0 2438 0:00:00 0:00:00 2 target_completi +0xffffa0890590dc00 0 2439 0:00:00 0:00:00 2 xcopy_wq +0xffffa08905909700 0 2445 0:00:00 0:00:00 2 iscsi_np +0xffffa08960a38000 0 2853 0:00:00 0:00:00 1 java +0xffffa08960a3dc00 0 2856 16:50:40 6:15:24 1 java +0xffffa08960a3ae00 0 2857 0:18:44 0:04:24 1 java +0xffffa08960a3c500 0 2858 0:18:04 0:04:16 1 java +0xffffa088ef2d5c00 0 2859 0:42:04 0:07:40 1 java +0xffffa088ef2d2e00 0 2861 0:00:56 0:00:12 1 java +0xffffa088ef2d0000 0 2862 0:01:24 0:00:00 1 java +0xffffa088ef2d4500 0 2865 0:00:00 0:00:04 1 java +0xffffa088ef2d1700 0 2866 0:00:00 0:00:00 1 java +0xffffa088f097dc00 0 2867 0:00:00 0:00:04 1 java +0xffffa088f097ae00 0 2868 10:56:20 0:11:12 1 java +0xffffa088f0978000 0 2869 1:48:48 0:04:56 1 java +0xffffa088f6e5c500 0 2870 0:00:00 0:00:00 1 java +0xffffa0893dd34500 0 2874 0:00:00 0:00:00 2011 sleep +0xffffa088f0979700 0 2877 0:00:00 0:00:00 1 java +0xffffa0893dd30000 0 2878 0:00:04 0:00:00 1990 sleep +0xffffa089405cc500 0 2879 0:00:00 0:00:00 1977 sleep +0xffffa08960a39700 0 2880 0:01:44 0:00:36 1 java +0xffffa08960a24500 0 2910 0:00:08 0:00:04 1 java +0xffffa08905908000 0 3249 0:00:00 0:00:00 2 kworker/1:3 +0xffffa08960a20000 0 3853 0:00:00 0:00:00 1 java +0xffffa08960a25c00 0 3856 0:00:20 0:00:16 1 java +0xffffa08960a22e00 0 3857 0:00:04 0:00:08 1 java +0xffffa08960a21700 0 3858 0:00:08 0:00:04 1 java +0xffffa088f097c500 0 3859 0:00:00 0:00:16 1 java +0xffffa088f677dc00 0 3860 0:00:00 0:00:00 1 java +0xffffa088f6779700 0 3861 0:00:08 0:00:04 1 java +0xffffa088f677c500 0 3862 0:00:12 0:00:12 1 java +0xffffa088f6778000 0 3863 0:00:00 0:00:08 1 java +0xffffa088f677ae00 0 3864 0:00:04 0:00:00 1 java +0xffffa0889cd4dc00 0 3865 0:00:04 0:00:00 1 java +0xffffa088f6e5dc00 0 3921 0:00:36 0:00:00 1 java +0xffffa0889cd48000 0 4003 0:03:00 0:00:32 1 java +0xffffa088f6e5ae00 0 4005 0:02:44 0:00:24 1 java +0xffffa088f6e59700 0 4006 0:00:04 0:00:04 1 java +0xffffa0889cd4ae00 0 4007 0:00:00 0:00:00 1 java +0xffffa088d33d1700 0 4033 0:00:12 0:00:04 1 java +0xffffa088d33d2e00 0 4038 0:02:28 0:00:28 1 java +0xffffa088d33d5c00 0 4070 0:02:32 0:00:12 1 java +0xffffa088d33d0000 0 4074 0:02:28 0:00:16 1 java +0xffffa0889cd4c500 0 4098 0:02:12 0:00:28 1 java +0xffffa0889cd49700 0 4099 0:00:00 0:00:00 1 java +0xffffa08889c92e00 0 4104 0:01:44 0:00:12 1 java +0xffffa08889c95c00 0 4136 0:02:00 0:00:40 1 java +0xffffa0895a329700 65437 4141 0:00:44 0:00:28 2079 postgres +0xffffa0895a32dc00 65437 4142 0:00:44 0:00:36 2079 postgres +0xffffa0895a328000 65437 4143 0:00:24 0:00:20 2079 postgres +0xffffa0895a32ae00 65437 4144 0:00:32 0:00:32 2079 postgres +0xffffa08936805c00 65437 4145 0:00:32 0:00:36 2079 postgres +0xffffa08936804500 65437 4146 0:00:40 0:00:28 2079 postgres +0xffffa08936802e00 65437 4147 0:00:20 0:00:52 2079 postgres +0xffffa088be0fc500 65437 4148 0:00:44 0:01:00 2079 postgres +0xffffa088be0fdc00 65437 4149 0:00:24 0:00:36 2079 postgres +0xffffa088be0f9700 65437 4150 0:00:44 0:00:32 2079 postgres +0xffffa088be0fae00 65437 4151 0:00:56 0:00:52 2079 postgres +0xffffa088be0f8000 65437 4152 0:00:32 0:00:32 2079 postgres +0xffffa08889755c00 65437 4153 0:00:44 0:00:52 2079 postgres +0xffffa08889751700 65437 4154 0:00:28 0:00:32 2079 postgres +0xffffa08889752e00 65437 4155 0:00:36 0:00:32 2079 postgres +0xffffa08889750000 65437 4156 0:00:40 0:00:36 2079 postgres +0xffffa08889754500 65437 4157 0:00:36 0:00:40 2079 postgres +0xffffa08888afc500 65437 4158 0:01:00 0:00:16 2079 postgres +0xffffa08888afdc00 65437 4159 0:00:20 0:00:40 2079 postgres +0xffffa08888af9700 65437 4160 0:00:40 0:00:56 2079 postgres +0xffffa08889c91700 0 4163 0:02:28 0:00:04 1 java +0xffffa0893196c500 65433 4237 0:00:48 0:00:28 1 systemd +0xffffa088c58aae00 65433 4250 0:00:00 0:00:00 4237 (sd-pam) +0xffffa0888cc64500 65433 4275 0:00:04 0:00:24 2132 bash +0xffffa088d33d4500 0 4291 0:00:00 0:00:00 1 java +0xffffa088f6e58000 0 4292 0:02:04 0:00:32 1 java +0xffffa0889366c500 0 4293 0:00:00 0:00:00 1 java +0xffffa08896518000 0 4312 0:00:00 0:00:00 1 java +0xffffa0889651dc00 0 4363 0:00:00 0:00:00 1 java +0xffffa08896519700 0 4364 0:00:00 0:00:00 1 java +0xffffa0889651ae00 0 4365 0:00:04 0:00:00 1 java +0xffffa0889651c500 0 4366 0:00:00 0:00:00 1 java +0xffffa0888e8a1700 0 4367 0:00:04 0:00:00 1 java +0xffffa0888e8a5c00 0 4368 0:00:00 0:00:00 1 java +0xffffa08889c90000 0 4369 0:00:04 0:00:00 1 java +0xffffa08893669700 0 4372 0:00:00 0:00:00 1 java +0xffffa0888e8a0000 0 4373 0:00:00 0:00:00 1 java +0xffffa08889c94500 0 4374 0:00:00 0:00:00 1 java +0xffffa0888e8a2e00 0 4375 0:00:00 0:00:04 1 java +0xffffa0889fdd0000 0 4376 0:00:00 0:00:00 1 java +0xffffa0889fdd2e00 0 4379 0:00:20 0:00:04 1 java +0xffffa088f7408000 0 4381 0:00:12 0:00:04 1 java +0xffffa0889fdd1700 0 4469 0:00:24 0:00:04 1 java +0xffffa088f740c500 0 4473 0:37:16 0:08:32 2856 python2 +0xffffa088f740ae00 0 4474 0:00:00 0:00:00 1 java +0xffffa088f740dc00 0 4475 0:00:00 0:00:00 1 java +0xffffa088f7409700 0 4476 0:00:00 0:00:00 1 java +0xffffa08894564500 0 4477 0:47:00 0:14:12 2856 python2 +0xffffa08894560000 0 4478 0:00:00 0:00:00 1 java +0xffffa08894562e00 0 4479 0:00:00 0:00:00 1 java +0xffffa08894565c00 0 4480 0:00:00 0:00:00 1 java +0xffffa0889445dc00 0 4481 0:01:16 0:00:36 2856 python3 +0xffffa0889445ae00 0 4482 0:00:00 0:00:00 1 java +0xffffa08894458000 0 4483 0:13:40 0:04:00 1 java +0xffffa0889445c500 0 4484 0:00:00 0:00:00 1 java +0xffffa0893196ae00 0 4496 0:00:24 0:00:20 1688 sshd +0xffffa088a150ae00 65433 4505 0:00:00 0:00:44 4496 sshd +0xffffa0888548ae00 65433 4506 0:00:32 0:00:24 4505 bash +0xffffa08931488000 65534 4625 0:00:00 0:00:04 1952 nginx +0xffffa0893c2b2e00 0 4665 0:00:00 0:00:00 2 kworker/1:4 +0xffffa0893c2b5c00 0 4666 0:00:00 0:00:00 2 kworker/1:5 +0xffffa08894a69700 0 4722 0:00:28 0:00:04 1 java +0xffffa08894a6ae00 0 4723 0:00:00 0:00:00 1 java +0xffffa08894a68000 0 4724 0:00:00 0:00:00 1 java +0xffffa08894a6dc00 0 4725 0:00:00 0:00:00 1 java +0xffffa08893668000 0 4726 0:00:00 0:00:00 1 java +0xffffa0889fdd5c00 0 4727 0:00:00 0:00:04 1 java +0xffffa0889fdd4500 0 4728 0:00:00 0:00:00 1 java +0xffffa08894561700 0 4729 0:00:00 0:00:00 1 java +0xffffa08888c49700 0 4730 0:00:00 0:00:00 1 java +0xffffa08888c48000 0 4731 0:00:00 0:00:00 1 java +0xffffa088ca874500 0 4732 0:00:00 0:00:00 1 java +0xffffa088ca871700 0 4733 0:00:04 0:00:00 1 java +0xffffa088ca875c00 0 4734 0:00:04 0:00:08 1 java +0xffffa088ca872e00 0 4735 0:00:00 0:00:04 1 java +0xffffa0893c08c500 0 4742 0:00:04 0:00:00 1 native_oom_hand +0xffffa08941afae00 0 4756 0:00:00 0:00:00 4742 oom_waiter +0xffffa089405cdc00 0 5464 0:00:00 0:00:00 1895 sleep +0xffffa0896510c500 0 5468 0:00:00 0:00:00 1941 sleep +0xffffa0894b284500 0 5472 0:00:00 0:00:00 1919 sleep +0xffffa0893c088000 0 5517 0:00:00 0:00:36 2 z_null_iss +0xffffa0893c08dc00 0 5518 0:00:00 0:00:20 2 z_null_int +0xffffa0893c089700 0 5519 0:00:00 0:00:00 2 z_rd_iss +0xffffa089481b8000 0 5520 0:00:00 0:00:00 2 z_rd_int +0xffffa089481bae00 0 5521 0:00:00 0:00:00 2 z_rd_int +0xffffa089481bdc00 0 5522 0:00:00 0:00:00 2 z_rd_int +0xffffa089481bc500 0 5523 0:00:00 0:00:00 2 z_rd_int +0xffffa089481b9700 0 5524 0:00:00 0:00:00 2 z_rd_int +0xffffa08940964500 0 5525 0:00:00 0:00:00 2 z_rd_int +0xffffa088c58adc00 0 5526 0:00:00 0:00:00 2 z_rd_int +0xffffa088c58a8000 0 5527 0:00:00 0:00:00 2 z_rd_int +0xffffa088c58a9700 0 5528 0:00:00 0:03:56 2 z_wr_iss +0xffffa088c58ac500 0 5529 0:00:00 0:00:00 2 z_wr_iss_h +0xffffa0893c2b0000 0 5530 0:00:00 0:00:04 2 z_wr_int +0xffffa089320e2e00 0 5531 0:00:00 0:00:48 2 z_wr_int +0xffffa0890590ae00 0 5532 0:00:00 0:00:12 2 z_wr_int +0xffffa08952ec1700 0 5533 0:00:00 0:00:24 2 z_wr_int +0xffffa08951028000 0 5534 0:00:00 0:00:32 2 z_wr_int +0xffffa08951029700 0 5535 0:00:00 0:00:12 2 z_wr_int +0xffffa0895102dc00 0 5536 0:00:00 0:00:24 2 z_wr_int +0xffffa0895102c500 0 5537 0:00:00 0:00:36 2 z_wr_int +0xffffa0895102ae00 0 5538 0:00:00 0:00:00 2 z_wr_int_h +0xffffa0888c779700 0 5539 0:00:00 0:00:00 2 z_fr_iss +0xffffa0888c77dc00 0 5540 0:00:00 0:00:00 2 z_fr_iss +0xffffa0888c77c500 0 5541 0:00:00 0:00:00 2 z_fr_iss +0xffffa0888c77ae00 0 5542 0:00:00 0:00:00 2 z_fr_iss +0xffffa0888c778000 0 5543 0:00:00 0:00:00 2 z_fr_iss +0xffffa08941a69700 0 5544 0:00:00 0:00:00 2 z_fr_iss +0xffffa08941a6dc00 0 5545 0:00:00 0:00:00 2 z_fr_iss +0xffffa08941a6c500 0 5546 0:00:00 0:00:00 2 z_fr_iss +0xffffa08941a6ae00 0 5547 0:00:00 0:00:00 2 z_fr_int +0xffffa08941a68000 0 5548 0:00:00 0:00:00 2 z_cl_iss +0xffffa0889bef1700 0 5549 0:00:00 0:00:00 2 z_cl_int +0xffffa0889bef5c00 0 5550 0:00:00 0:00:00 2 z_ioctl_iss +0xffffa0889bef4500 0 5551 0:00:00 0:00:00 2 z_ioctl_int +0xffffa0889bef2e00 0 5552 0:00:00 0:00:00 2 z_trim_iss +0xffffa0889bef0000 0 5553 0:00:00 0:00:00 2 z_trim_int +0xffffa0889c9eae00 0 5554 0:00:00 0:00:00 2 z_zvol +0xffffa0889c9e8000 0 5555 0:00:00 0:00:00 2 z_prefetch +0xffffa0889c9e9700 0 5556 0:00:00 0:00:00 2 z_upgrade +0xffffa08953ac5c00 0 5588 0:00:00 0:00:00 2 metaslab_group_ +0xffffa0889c9edc00 0 5589 0:00:00 0:00:00 2 metaslab_group_ +0xffffa08953acae00 0 5592 0:00:00 0:00:08 2 dp_sync_taskq +0xffffa08953ac8000 0 5595 0:00:00 0:00:00 2 dp_zil_clean_ta +0xffffa0895a31c500 0 5596 0:00:00 0:00:40 2 dp_zil_clean_ta +0xffffa0895a319700 0 5597 0:00:00 0:00:00 2 z_iput +0xffffa0895a31ae00 0 5598 0:00:00 0:00:00 2 z_unlinked_drai +0xffffa0895a318000 0 5599 0:00:00 0:00:00 2 txg_quiesce +0xffffa0895a31dc00 0 5601 0:00:00 0:01:04 2 txg_sync +0xffffa0888d2cdc00 0 5602 0:00:00 0:00:00 2 mmp +0xffffa08883df0000 0 5673 0:00:00 0:00:00 2 zthr_procedure +0xffffa08883df5c00 0 5674 0:00:00 0:00:00 2 zthr_procedure +0xffffa08883df1700 0 5675 0:00:00 0:00:00 2 zthr_procedure +0xffffa08937f4dc00 0 5676 0:00:00 0:00:00 2 zthr_procedure +0xffffa08959894500 0 5891 0:00:00 0:00:24 2 z_vdev_file +0xffffa0888c784500 0 5899 0:00:00 0:00:16 2 z_vdev_file +0xffffa088ce681700 0 5952 0:00:00 0:00:32 2 z_vdev_file +0xffffa0894e6a8000 0 5976 0:00:00 0:00:24 2 z_vdev_file +0xffffa08884834500 0 5981 0:00:04 0:00:16 4506 sudo +0xffffa0888cc62e00 0 5983 0:02:56 2:07:16 5981 dd +0xffffa08884832e00 0 6026 0:00:04 0:00:12 4506 sudo +0xffffa08884830000 0 6028 0:00:00 0:00:20 6026 su +0xffffa08884831700 0 6029 0:00:00 0:00:00 6028 bash +0xffffa0888d2cae00 0 6030 0:00:00 0:00:28 2 z_vdev_file +0xffffa088ce682e00 0 6184 0:00:00 0:00:00 2 z_wr_int +0xffffa08953ac9700 0 6186 0:00:00 0:00:00 2 z_vdev_file +0xffffa08953acdc00 0 6188 0:00:00 0:00:00 2 z_vdev_file +0xffffa0889c9ec500 0 6189 0:00:00 0:00:00 2 z_wr_int +0xffffa08883df2e00 0 6190 0:00:00 0:00:00 2 z_wr_int +0xffffa08883df4500 0 6191 0:00:00 0:00:00 2 z_vdev_file +0xffffa0888d2cc500 0 6192 0:00:00 0:00:00 2 z_vdev_file +0xffffa0888d2c8000 0 6194 0:00:00 0:00:00 2 z_wr_int +0xffffa0888d2fdc00 0 6196 0:00:00 0:00:00 2 z_wr_int +0xffffa087d20edc00 0 6279 0:00:00 0:00:00 2 z_vdev_file +0xffffa088f1e95c00 0 6309 0:00:00 0:00:00 2021 sleep diff --git a/tests/integration/data/regression_output/linux/ps -C bash b/tests/integration/data/regression_output/linux/ps -C bash new file mode 100644 index 00000000..31946988 --- /dev/null +++ b/tests/integration/data/regression_output/linux/ps -C bash @@ -0,0 +1,5 @@ +pid time cmd +---- ------- ---- +4275 0:00:04 bash +4506 0:00:32 bash +6029 0:00:00 bash diff --git a/tests/integration/data/regression_output/linux/ps -e b/tests/integration/data/regression_output/linux/ps -e new file mode 100644 index 00000000..977441ce --- /dev/null +++ b/tests/integration/data/regression_output/linux/ps -e @@ -0,0 +1,575 @@ +task uid pid time stime ppid cmd +------------------ ----- ---- -------- ------- ---- --------------- +0xffffa089669edc00 0 1 0:02:44 0:52:48 0 systemd +0xffffa089669ec500 0 2 0:00:00 0:01:48 0 kthreadd +0xffffa089669eae00 0 3 0:00:00 0:00:00 2 rcu_gp +0xffffa089669e8000 0 4 0:00:00 0:00:00 2 rcu_par_gp +0xffffa089669e9700 0 5 0:00:00 0:00:00 2 kworker/0:0 +0xffffa08966a05c00 0 6 0:00:00 0:00:00 2 kworker/0:0H +0xffffa08966a04500 0 7 0:00:00 0:00:48 2 kworker/u4:0 +0xffffa08966a02e00 0 8 0:00:00 0:00:00 2 mm_percpu_wq +0xffffa08966a00000 0 9 0:00:00 0:00:00 2 ksoftirqd/0 +0xffffa08966a01700 0 10 0:00:00 0:00:00 2 rcu_sched +0xffffa08966a0ae00 0 11 0:00:00 0:00:08 2 migration/0 +0xffffa08966a08000 0 12 0:00:00 0:00:00 2 idle_inject/0 +0xffffa08966a09700 0 13 0:00:00 0:00:08 2 kworker/0:1 +0xffffa08966a0c500 0 14 0:00:00 0:00:00 2 cpuhp/0 +0xffffa08966a50000 0 15 0:00:00 0:00:00 2 cpuhp/1 +0xffffa08966a51700 0 16 0:00:00 0:00:00 2 idle_inject/1 +0xffffa08966a55c00 0 17 0:00:00 0:00:04 2 migration/1 +0xffffa08966a54500 0 18 0:00:00 0:00:04 2 ksoftirqd/1 +0xffffa08966a52e00 0 19 0:00:00 0:00:40 2 kworker/1:0 +0xffffa08966a69700 0 20 0:00:00 0:00:00 2 kworker/1:0H +0xffffa08966a6dc00 0 21 0:00:00 0:00:04 2 kdevtmpfs +0xffffa08966a6c500 0 22 0:00:00 0:00:00 2 netns +0xffffa08966a6ae00 0 23 0:00:00 0:00:00 2 rcu_tasks_kthre +0xffffa08966a68000 0 24 0:00:00 0:01:04 2 kauditd +0xffffa08966bcae00 0 25 0:00:00 0:00:00 2 khungtaskd +0xffffa08966bc8000 0 26 0:00:00 0:00:00 2 oom_reaper +0xffffa08966bc9700 0 27 0:00:00 0:00:00 2 writeback +0xffffa08966bcdc00 0 28 0:00:00 0:00:08 2 kcompactd0 +0xffffa08966bcc500 0 29 0:00:00 0:00:00 2 ksmd +0xffffa08966bd2e00 0 30 0:00:00 0:00:00 2 khugepaged +0xffffa08966bd0000 0 31 0:00:00 0:00:00 2 crypto +0xffffa08966bd1700 0 32 0:00:00 0:00:00 2 kintegrityd +0xffffa08966bd5c00 0 33 0:00:00 0:00:00 2 kblockd +0xffffa08966bd4500 0 34 0:00:00 0:00:00 2 tpm_dev_wq +0xffffa089666d5c00 0 35 0:00:00 0:00:00 2 ata_sff +0xffffa089666d4500 0 36 0:00:00 0:00:00 2 md +0xffffa089666d2e00 0 37 0:00:00 0:00:00 2 edac-poller +0xffffa089666d0000 0 38 0:00:00 0:00:00 2 devfreq_wq +0xffffa089666d1700 0 39 0:00:00 0:00:00 2 watchdogd +0xffffa08966795c00 0 40 0:00:00 0:00:00 2 kworker/1:1 +0xffffa08966794500 0 41 0:00:00 0:00:16 2 kworker/u4:1 +0xffffa08966791700 0 44 0:00:00 0:00:04 2 kswapd0 +0xffffa089587bdc00 0 45 0:00:00 0:00:00 2 kworker/u5:0 +0xffffa089587bc500 0 46 0:00:00 0:00:00 2 ecryptfs-kthrea +0xffffa08958039700 0 135 0:00:00 0:00:00 2 kthrotld +0xffffa0895803c500 0 136 0:00:00 0:00:00 2 irq/24-pciehp +0xffffa0895803dc00 0 137 0:00:00 0:00:00 2 irq/25-pciehp +0xffffa0895803ae00 0 138 0:00:00 0:00:00 2 irq/26-pciehp +0xffffa08958038000 0 139 0:00:00 0:00:00 2 irq/27-pciehp +0xffffa0895802c500 0 140 0:00:00 0:00:00 2 irq/28-pciehp +0xffffa0895802dc00 0 141 0:00:00 0:00:00 2 irq/29-pciehp +0xffffa08958029700 0 142 0:00:00 0:00:00 2 irq/30-pciehp +0xffffa08958028000 0 143 0:00:00 0:00:00 2 irq/31-pciehp +0xffffa0895802ae00 0 144 0:00:00 0:00:00 2 irq/32-pciehp +0xffffa0895809ae00 0 145 0:00:00 0:00:00 2 irq/33-pciehp +0xffffa0895809c500 0 146 0:00:00 0:00:00 2 irq/34-pciehp +0xffffa0895809dc00 0 147 0:00:00 0:00:00 2 irq/35-pciehp +0xffffa08958099700 0 148 0:00:00 0:00:00 2 irq/36-pciehp +0xffffa08958098000 0 149 0:00:00 0:00:00 2 irq/37-pciehp +0xffffa08958031700 0 150 0:00:00 0:00:00 2 irq/38-pciehp +0xffffa08958034500 0 151 0:00:00 0:00:00 2 irq/39-pciehp +0xffffa08958035c00 0 152 0:00:00 0:00:00 2 irq/40-pciehp +0xffffa08958030000 0 153 0:00:00 0:00:00 2 irq/41-pciehp +0xffffa08958032e00 0 154 0:00:00 0:00:00 2 irq/42-pciehp +0xffffa089580e2e00 0 155 0:00:00 0:00:00 2 irq/43-pciehp +0xffffa089580e5c00 0 156 0:00:00 0:00:00 2 irq/44-pciehp +0xffffa089580e1700 0 157 0:00:00 0:00:00 2 irq/45-pciehp +0xffffa089580e0000 0 158 0:00:00 0:00:00 2 irq/46-pciehp +0xffffa089580e4500 0 159 0:00:00 0:00:00 2 irq/47-pciehp +0xffffa08958089700 0 160 0:00:00 0:00:00 2 irq/48-pciehp +0xffffa0895808ae00 0 161 0:00:00 0:00:00 2 irq/49-pciehp +0xffffa0895808dc00 0 162 0:00:00 0:00:00 2 irq/50-pciehp +0xffffa08958088000 0 163 0:00:00 0:00:00 2 irq/51-pciehp +0xffffa0895808c500 0 164 0:00:00 0:00:00 2 irq/52-pciehp +0xffffa0895820c500 0 165 0:00:00 0:00:00 2 irq/53-pciehp +0xffffa0895820ae00 0 166 0:00:00 0:00:00 2 irq/54-pciehp +0xffffa08958208000 0 167 0:00:00 0:00:00 2 irq/55-pciehp +0xffffa08958209700 0 168 0:00:00 0:00:00 2 acpi_thermal_pm +0xffffa0895820dc00 0 169 0:00:00 0:00:04 2 scsi_eh_0 +0xffffa08957d18000 0 170 0:00:00 0:00:00 2 scsi_tmf_0 +0xffffa08957d19700 0 171 0:00:00 0:00:04 2 scsi_eh_1 +0xffffa08957d1dc00 0 172 0:00:00 0:00:00 2 scsi_tmf_1 +0xffffa08957d1c500 0 173 0:00:00 0:01:00 2 kworker/u4:2 +0xffffa08958082e00 0 174 0:00:00 0:00:52 2 kworker/u4:3 +0xffffa08958084500 0 175 0:00:00 0:00:00 2 kstrp +0xffffa08957db8000 0 199 0:00:00 0:00:00 2 charger_manager +0xffffa08957dbdc00 0 200 0:00:00 0:00:00 2 kworker/1:1H +0xffffa08957db5c00 0 251 0:00:00 0:00:00 2 mpt_poll_0 +0xffffa089587b9700 0 253 0:00:00 0:00:00 2 mpt/0 +0xffffa08957585c00 0 264 0:00:00 0:00:00 2 kworker/0:1H +0xffffa08957582e00 0 265 0:00:00 0:00:00 2 scsi_eh_2 +0xffffa08957580000 0 266 0:00:00 0:00:00 2 scsi_tmf_2 +0xffffa08957581700 0 267 0:00:00 0:00:16 2 kworker/u4:4 +0xffffa08957584500 0 268 0:00:00 0:00:00 2 kworker/u4:5 +0xffffa08966790000 0 318 0:00:00 0:00:00 2 raid5wq +0xffffa08957da8000 0 346 0:00:00 0:00:04 2 spl_system_task +0xffffa08957dadc00 0 347 0:00:00 0:00:00 2 spl_delay_taskq +0xffffa08957dac500 0 348 0:00:00 0:00:24 2 spl_dynamic_tas +0xffffa08957daae00 0 349 0:00:00 0:01:32 2 spl_kmem_cache +0xffffa08966792e00 0 357 0:00:00 0:00:00 2 zvol +0xffffa08956848000 0 367 0:00:00 0:00:00 2 arc_prune +0xffffa0895684c500 0 371 0:00:00 0:00:00 2 zthr_procedure +0xffffa08956849700 0 372 0:00:00 0:00:04 2 zthr_procedure +0xffffa0895684ae00 0 373 0:00:00 0:00:04 2 dbu_evict +0xffffa0895684dc00 0 375 0:00:00 0:01:52 2 dbuf_evict +0xffffa089580b2e00 0 378 0:00:00 0:00:16 2 z_vdev_file +0xffffa089580b1700 0 379 0:00:00 0:00:00 2 l2arc_feed +0xffffa089587bae00 0 446 0:00:00 0:00:16 2 z_null_iss +0xffffa089587b8000 0 447 0:00:00 0:00:28 2 z_null_int +0xffffa08957dbc500 0 448 0:00:00 0:00:00 2 z_rd_iss +0xffffa08957dbae00 0 449 0:00:00 0:13:00 2 z_rd_int +0xffffa08957db9700 0 450 0:00:00 0:11:20 2 z_rd_int +0xffffa08957db0000 0 451 0:00:00 0:12:32 2 z_rd_int +0xffffa08957db1700 0 452 0:00:00 0:11:04 2 z_rd_int +0xffffa08957db2e00 0 453 0:00:00 0:13:08 2 z_rd_int +0xffffa08957db4500 0 454 0:00:00 0:12:48 2 z_rd_int +0xffffa08953515c00 0 455 0:00:00 0:12:00 2 z_rd_int +0xffffa08953514500 0 456 0:00:00 0:11:20 2 z_rd_int +0xffffa08953512e00 0 457 0:00:00 1:24:20 2 z_wr_iss +0xffffa08953510000 0 458 0:00:00 0:06:36 2 z_wr_iss_h +0xffffa08953511700 0 459 0:00:00 0:01:36 2 z_wr_int +0xffffa0895350ae00 0 460 0:00:00 0:01:56 2 z_wr_int +0xffffa08953508000 0 461 0:00:00 0:01:08 2 z_wr_int +0xffffa08953509700 0 462 0:00:00 0:01:20 2 z_wr_int +0xffffa0895350dc00 0 463 0:00:00 0:01:44 2 z_wr_int +0xffffa0895350c500 0 464 0:00:00 0:01:56 2 z_wr_int +0xffffa089534b4500 0 465 0:00:00 0:02:44 2 z_wr_int +0xffffa089534b2e00 0 466 0:00:00 0:01:20 2 z_wr_int +0xffffa089534b0000 0 467 0:00:00 0:00:48 2 z_wr_int_h +0xffffa089534b1700 0 468 0:00:00 0:00:00 2 z_fr_iss +0xffffa089534b5c00 0 469 0:00:00 0:00:00 2 z_fr_iss +0xffffa089534a2e00 0 470 0:00:00 0:00:00 2 z_fr_iss +0xffffa089534a0000 0 471 0:00:00 0:00:00 2 z_fr_iss +0xffffa089534a1700 0 472 0:00:00 0:00:00 2 z_fr_iss +0xffffa089534a5c00 0 473 0:00:00 0:00:00 2 z_fr_iss +0xffffa089534a4500 0 474 0:00:00 0:00:00 2 z_fr_iss +0xffffa08953474500 0 475 0:00:00 0:00:00 2 z_fr_iss +0xffffa08953472e00 0 476 0:00:00 0:00:00 2 z_fr_int +0xffffa08953470000 0 477 0:00:00 0:00:00 2 z_cl_iss +0xffffa08953471700 0 478 0:00:00 0:00:00 2 z_cl_int +0xffffa08953475c00 0 479 0:00:00 0:00:00 2 z_ioctl_iss +0xffffa0895346c500 0 480 0:00:00 0:00:12 2 z_ioctl_int +0xffffa0895346ae00 0 481 0:00:00 0:00:00 2 z_trim_iss +0xffffa08953468000 0 482 0:00:00 0:00:00 2 z_trim_int +0xffffa08953469700 0 483 0:00:00 0:00:12 2 z_zvol +0xffffa0895346dc00 0 484 0:00:00 0:00:00 2 z_prefetch +0xffffa089533fdc00 0 485 0:00:00 0:00:00 2 z_upgrade +0xffffa089533fc500 0 487 0:00:00 0:03:28 2 dp_sync_taskq +0xffffa089533fae00 0 488 0:00:00 0:00:00 2 dp_zil_clean_ta +0xffffa089533f8000 0 489 0:00:00 0:00:08 2 dp_zil_clean_ta +0xffffa089533f9700 0 490 0:00:00 0:00:00 2 z_iput +0xffffa08952e71700 0 491 0:00:00 0:00:00 2 z_unlinked_drai +0xffffa08952e75c00 0 493 0:00:00 0:00:04 2 metaslab_group_ +0xffffa08952e70000 0 494 0:00:00 0:00:00 2 metaslab_group_ +0xffffa08957e3c500 0 551 0:00:00 0:00:00 2 txg_quiesce +0xffffa08957da9700 0 552 0:00:00 0:02:04 2 txg_sync +0xffffa08952e5ae00 0 553 0:00:00 0:00:04 2 mmp +0xffffa08952e5dc00 0 554 0:00:00 0:00:00 2 zthr_procedure +0xffffa08952e58000 0 555 0:00:00 0:00:00 2 zthr_procedure +0xffffa08952e5c500 0 556 0:00:00 0:00:00 2 zthr_procedure +0xffffa08952e59700 0 557 0:00:00 0:00:00 2 zthr_procedure +0xffffa089320e0000 0 735 0:00:00 0:00:04 2 kworker/0:2 +0xffffa089320e1700 0 743 0:03:12 0:06:12 1 systemd-journal +0xffffa0893085dc00 0 765 0:00:00 0:00:32 2 kworker/0:3 +0xffffa08952e72e00 0 766 0:00:00 0:00:32 2 kworker/0:4 +0xffffa08952e74500 0 767 0:00:00 0:00:00 2 rpciod +0xffffa089304e8000 0 774 0:00:00 0:00:00 2 xprtiod +0xffffa08931968000 0 779 0:00:00 0:00:08 1 blkmapd +0xffffa0893196dc00 0 781 0:13:08 0:06:00 1 systemd-udevd +0xffffa089320e5c00 0 830 0:00:00 0:00:00 2 irq/16-vmwgfx +0xffffa08957e38000 0 837 0:00:00 0:00:00 2 ttm_swap +0xffffa089304ec500 0 935 0:00:00 0:00:04 2 kworker/1:2 +0xffffa08958081700 0 1031 0:00:08 0:00:28 1 VGAuthService +0xffffa089320e4500 0 1033 0:02:04 0:01:40 1 vmtoolsd +0xffffa08952ec4500 0 1037 0:00:52 0:03:44 1 auditd +0xffffa0893a532e00 0 1038 0:00:00 0:01:08 1 auditd +0xffffa0894e7b2e00 0 1237 0:00:00 0:00:28 2 z_null_iss +0xffffa0894e7f4500 0 1238 0:00:00 0:00:32 2 z_null_int +0xffffa0894e7f2e00 0 1239 0:00:00 0:00:00 2 z_rd_iss +0xffffa0894e7f0000 0 1240 0:00:00 0:00:04 2 z_rd_int +0xffffa0894e7f1700 0 1241 0:00:00 0:00:00 2 z_rd_int +0xffffa0894e7f5c00 0 1242 0:00:00 0:00:00 2 z_rd_int +0xffffa0894e7fdc00 0 1243 0:00:00 0:00:00 2 z_rd_int +0xffffa0894e7fc500 0 1244 0:00:00 0:00:00 2 z_rd_int +0xffffa0894e7fae00 0 1245 0:00:00 0:00:00 2 z_rd_int +0xffffa0894e7f8000 0 1246 0:00:00 0:00:00 2 z_rd_int +0xffffa0894e7f9700 0 1247 0:00:00 0:00:00 2 z_rd_int +0xffffa0894ea71700 0 1248 0:00:00 0:00:00 2 z_wr_iss +0xffffa0894ea75c00 0 1249 0:00:00 0:00:00 2 z_wr_iss_h +0xffffa0894ea74500 0 1250 0:00:00 0:00:00 2 z_wr_int +0xffffa0894ea72e00 0 1251 0:00:00 0:00:00 2 z_wr_int +0xffffa0894ea70000 0 1252 0:00:00 0:00:00 2 z_wr_int +0xffffa0894ea7dc00 0 1253 0:00:00 0:00:04 2 z_wr_int +0xffffa0894ea7c500 0 1254 0:00:00 0:00:00 2 z_wr_int +0xffffa0894ea7ae00 0 1255 0:00:00 0:00:00 2 z_wr_int +0xffffa0894ea78000 0 1256 0:00:00 0:00:00 2 z_wr_int +0xffffa0894ea79700 0 1257 0:00:00 0:00:00 2 z_wr_int +0xffffa0894eaaae00 0 1258 0:00:00 0:00:00 2 z_wr_int_h +0xffffa0894eaa8000 0 1259 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eaa9700 0 1260 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eaadc00 0 1261 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eaac500 0 1262 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eabae00 0 1263 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eab8000 0 1264 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eab9700 0 1265 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eabdc00 0 1266 0:00:00 0:00:00 2 z_fr_iss +0xffffa0894eabc500 0 1267 0:00:00 0:00:00 2 z_fr_int +0xffffa0894eb61700 0 1268 0:00:00 0:00:00 2 z_cl_iss +0xffffa0894eb65c00 0 1269 0:00:00 0:00:00 2 z_cl_int +0xffffa0894eb64500 0 1270 0:00:00 0:00:00 2 z_ioctl_iss +0xffffa0894eb62e00 0 1271 0:00:00 0:00:00 2 z_ioctl_int +0xffffa0894eb60000 0 1272 0:00:00 0:00:00 2 z_trim_iss +0xffffa0894eb69700 0 1273 0:00:00 0:00:00 2 z_trim_int +0xffffa0894eb6dc00 0 1274 0:00:00 0:00:00 2 z_zvol +0xffffa0894eb6c500 0 1275 0:00:00 0:00:00 2 z_prefetch +0xffffa0894eb6ae00 0 1276 0:00:00 0:00:00 2 z_upgrade +0xffffa0894ebb2e00 0 1281 0:00:00 0:00:00 2 dp_sync_taskq +0xffffa0894ebb0000 0 1282 0:00:00 0:00:00 2 dp_zil_clean_ta +0xffffa0894ebb1700 0 1283 0:00:00 0:00:00 2 dp_zil_clean_ta +0xffffa0894ebb4500 0 1284 0:00:00 0:00:00 2 z_iput +0xffffa0894ebb5c00 0 1285 0:00:00 0:00:00 2 z_unlinked_drai +0xffffa0893085c500 0 1290 0:00:00 0:00:00 2 metaslab_group_ +0xffffa08930858000 0 1291 0:00:00 0:00:00 2 metaslab_group_ +0xffffa089553a8000 0 1335 0:00:00 0:00:00 2 txg_quiesce +0xffffa089553a9700 0 1336 0:00:00 0:00:08 2 txg_sync +0xffffa089553adc00 0 1337 0:00:00 0:00:00 2 mmp +0xffffa089553ac500 0 1338 0:00:00 0:00:00 2 zthr_procedure +0xffffa089553bae00 0 1339 0:00:00 0:00:00 2 zthr_procedure +0xffffa089553b8000 0 1340 0:00:00 0:00:00 2 zthr_procedure +0xffffa089553b9700 0 1341 0:00:00 0:00:00 2 zthr_procedure +0xffffa0893085ae00 101 1542 0:00:24 0:00:44 1 systemd-network +0xffffa089408f1700 102 1578 0:00:40 0:00:24 1 systemd-resolve +0xffffa089408f2e00 0 1688 0:00:08 0:00:12 1 sshd +0xffffa08940965c00 103 1728 0:00:04 0:00:16 1 rsyslogd +0xffffa08940962e00 104 1730 0:00:40 0:00:48 1 dbus-daemon +0xffffa08931969700 0 1756 0:00:04 0:00:00 1 cron +0xffffa0894e6a9700 0 1772 0:00:08 0:00:12 1 nscd +0xffffa089408f8000 0 1781 0:01:32 0:01:00 1 networkd-dispat +0xffffa089408fdc00 0 1782 0:00:04 0:00:40 1 zed +0xffffa089408fc500 0 1783 0:00:32 0:00:24 1 systemd-logind +0xffffa0895601dc00 0 1784 0:00:04 0:00:00 1 nscd +0xffffa08956018000 0 1785 0:00:00 0:00:08 1 nscd +0xffffa08956019700 0 1786 0:00:00 0:00:04 1 nscd +0xffffa0895601c500 0 1787 0:00:00 0:00:12 1 nscd +0xffffa0895601ae00 0 1788 0:00:00 0:00:08 1 nscd +0xffffa089560c1700 0 1789 0:00:00 0:00:08 1 nscd +0xffffa089560c4500 0 1790 0:00:00 0:00:00 1 nscd +0xffffa089560c2e00 0 1791 0:00:00 0:00:00 1 nscd +0xffffa089553bc500 107 1792 0:00:36 0:01:08 1 snmpd +0xffffa089408f5c00 103 1793 0:00:28 0:00:24 1 in:imuxsock +0xffffa089408f4500 103 1794 0:00:00 0:00:04 1 in:imklog +0xffffa08930859700 103 1795 0:00:12 0:00:32 1 rs:main Q:Reg +0xffffa0895541dc00 0 1797 0:00:00 0:00:00 1 zed +0xffffa0895541ae00 0 1798 0:00:00 0:00:00 1 zed +0xffffa08957d1ae00 0 1845 0:00:00 0:00:00 1 rsync +0xffffa0893691dc00 0 1857 0:00:00 0:00:00 1 delphix-stat-se +0xffffa08936918000 0 1858 0:00:04 0:00:04 1 sed +0xffffa0893691c500 0 1860 0:00:00 0:00:00 1 delphix-stat-se +0xffffa08936919700 0 1861 0:00:00 0:00:00 1 sed +0xffffa0893691ae00 0 1870 0:00:00 0:00:00 1 delphix-stat-se +0xffffa0893304dc00 0 1871 0:00:00 0:00:00 1 sed +0xffffa08952ec2e00 0 1878 0:00:00 0:00:00 1 rpc.idmapd +0xffffa08952ec0000 0 1887 0:00:00 0:00:00 1 rpc.mountd +0xffffa08933048000 0 1895 0:00:04 0:00:04 1 delphix-stat-se +0xffffa08933049700 0 1903 0:00:00 0:00:00 1 sed +0xffffa0893649ae00 0 1906 0:00:00 0:00:00 1860 timeout +0xffffa08936498000 0 1910 0:00:00 0:00:00 1857 timeout +0xffffa089304edc00 0 1911 0:00:12 0:00:20 1 polkitd +0xffffa089320c1700 0 1918 0:35:24 0:12:28 1910 profile +0xffffa0893304c500 0 1919 0:00:04 0:00:04 1 delphix-stat-se +0xffffa08957e39700 0 1926 0:00:00 0:00:00 2 kworker/u5:1 +0xffffa0893304ae00 0 1934 0:00:00 0:00:00 1 sed +0xffffa089320c4500 0 1936 0:00:00 0:00:00 1870 timeout +0xffffa089320c5c00 0 1940 0:00:00 0:00:00 1906 mpstat +0xffffa08931d50000 0 1941 0:00:04 0:00:04 1 delphix-stat-se +0xffffa089320c0000 0 1942 0:00:04 0:00:24 1 sed +0xffffa0893319dc00 0 1952 0:00:04 0:00:00 1 nginx +0xffffa0894b280000 0 1958 0:00:00 0:00:00 1936 iostat +0xffffa0894b281700 0 1959 0:00:00 0:00:00 1 delphix-stat-se +0xffffa0894b282e00 0 1964 0:00:00 0:00:04 1 sed +0xffffa08952ec5c00 0 1968 0:00:00 0:00:00 1 gmain +0xffffa08930464500 0 1972 0:00:00 0:00:00 1 gdbus +0xffffa089320c2e00 0 1977 0:00:00 0:00:04 1 delphix-stat-se +0xffffa08958085c00 0 1979 0:00:00 0:00:04 2 nfsd +0xffffa0896510dc00 0 1982 0:00:00 0:00:04 1 sed +0xffffa0894e7b0000 0 1984 0:00:00 0:00:00 2 nfsd +0xffffa0894e7b5c00 0 1986 0:00:00 0:00:00 2 nfsd +0xffffa0894e7b1700 0 1987 0:00:00 0:00:00 2 nfsd +0xffffa0896510ae00 0 1990 0:00:00 0:00:04 1 delphix-stat-se +0xffffa0894e7b4500 0 1991 0:00:00 0:00:00 2 nfsd +0xffffa089580b0000 0 1992 0:00:00 0:00:00 2 nfsd +0xffffa089580b5c00 0 1994 0:00:00 0:00:00 2 nfsd +0xffffa089405c9700 0 1995 0:00:08 0:00:08 1 sed +0xffffa089580b4500 0 1996 0:00:00 0:00:00 2 nfsd +0xffffa089408f9700 0 1998 0:00:00 0:00:00 2 nfsd +0xffffa089553bdc00 0 2002 0:00:00 0:00:00 2 nfsd +0xffffa0894e6aae00 0 2004 0:00:00 0:00:00 2 nfsd +0xffffa0894e6ac500 0 2007 0:00:00 0:00:00 2 nfsd +0xffffa0894b285c00 0 2011 0:00:00 0:00:04 1 delphix-stat-se +0xffffa08965109700 0 2012 0:00:00 0:00:16 1 sed +0xffffa0894e6adc00 0 2013 0:00:00 0:00:00 2 nfsd +0xffffa089408fae00 0 2017 0:00:00 0:00:00 2 nfsd +0xffffa08957e3ae00 0 2019 0:00:00 0:00:00 2 nfsd +0xffffa0893649dc00 0 2021 0:00:08 0:00:36 1 nfs_delete +0xffffa089304e9700 0 2025 0:00:00 0:00:00 2 nfsd +0xffffa08940961700 0 2028 0:00:00 0:00:00 2 nfsd +0xffffa08940960000 0 2035 0:00:00 0:00:00 2 nfsd +0xffffa0893bf7ae00 0 2039 0:00:00 0:00:00 2 nfsd +0xffffa0893bf78000 0 2042 0:00:00 0:00:00 2 nfsd +0xffffa0893bf79700 0 2044 0:00:00 0:00:00 2 nfsd +0xffffa0894483dc00 0 2045 0:00:00 0:00:00 1 gmain +0xffffa0893bf7dc00 0 2049 0:00:00 0:00:00 2 nfsd +0xffffa0893bf7c500 0 2050 0:00:00 0:00:00 2 nfsd +0xffffa08957e3dc00 0 2054 0:00:00 0:00:00 2 nfsd +0xffffa08936801700 0 2055 0:00:04 0:00:12 1 sudo +0xffffa0894eb68000 0 2057 0:00:00 0:00:00 2 nfsd +0xffffa08958080000 0 2058 0:00:00 0:00:00 2 nfsd +0xffffa08941f6c500 0 2059 0:00:00 0:00:00 2 nfsd +0xffffa08941f6ae00 0 2062 0:00:00 0:00:00 2 nfsd +0xffffa08941f68000 0 2063 0:00:00 0:00:00 2 nfsd +0xffffa08941f69700 0 2064 0:00:00 0:00:00 2 nfsd +0xffffa08941f6dc00 0 2066 0:00:00 0:00:00 2 nfsd +0xffffa08934e00000 0 2067 0:00:00 0:00:00 2 nfsd +0xffffa08934e01700 0 2068 0:00:00 0:00:00 2 nfsd +0xffffa08934e05c00 0 2069 0:00:00 0:00:00 2 nfsd +0xffffa08934e04500 0 2071 0:00:00 0:00:00 2 nfsd +0xffffa08934e02e00 0 2072 0:00:00 0:00:00 2 nfsd +0xffffa08934b58000 0 2073 0:00:00 0:00:00 2 nfsd +0xffffa08934b59700 0 2074 0:00:00 0:00:00 2 nfsd +0xffffa08934b5dc00 0 2075 0:00:00 0:00:00 2 nfsd +0xffffa08934b5c500 0 2076 0:00:00 0:00:00 2 nfsd +0xffffa08934b5ae00 0 2077 0:00:00 0:00:00 2 nfsd +0xffffa089358f1700 0 2078 0:00:00 0:00:00 2 nfsd +0xffffa08936800000 65437 2079 0:00:12 0:02:24 2055 postgres +0xffffa089358f5c00 0 2080 0:00:00 0:00:00 2 nfsd +0xffffa089358f4500 0 2082 0:00:00 0:00:00 2 nfsd +0xffffa0893dd31700 0 2083 0:00:00 0:00:00 1959 sleep +0xffffa089358f2e00 0 2084 0:00:00 0:00:00 2 nfsd +0xffffa089358f0000 0 2085 0:00:00 0:00:00 2 nfsd +0xffffa0893d89ae00 0 2086 0:00:00 0:00:00 2 nfsd +0xffffa0893d898000 0 2087 0:00:00 0:00:00 2 nfsd +0xffffa0893d899700 0 2088 0:00:00 0:00:00 2 nfsd +0xffffa0893d89dc00 0 2089 0:00:00 0:00:00 2 nfsd +0xffffa0893f96c500 0 2091 0:00:00 0:00:00 2 nfsd +0xffffa0893f96ae00 0 2092 0:00:00 0:00:00 2 nfsd +0xffffa0893f968000 0 2093 0:00:00 0:00:00 2 nfsd +0xffffa0893f969700 0 2095 0:00:00 0:00:00 2 nfsd +0xffffa0893f96dc00 0 2096 0:00:00 0:00:00 2 nfsd +0xffffa0893d89c500 0 2097 0:00:00 0:00:00 2 nfsd +0xffffa089408f0000 0 2098 0:00:00 0:00:00 2 nfsd +0xffffa089553aae00 0 2099 0:00:00 0:00:00 2 nfsd +0xffffa08939f70000 0 2100 0:00:00 0:00:00 2 nfsd +0xffffa08939f71700 0 2101 0:00:00 0:00:00 2 nfsd +0xffffa08939f75c00 0 2103 0:00:00 0:00:00 2 nfsd +0xffffa08939f74500 0 2104 0:00:00 0:00:00 2 nfsd +0xffffa08939f72e00 0 2105 0:00:00 0:00:00 2 nfsd +0xffffa0893c08ae00 0 2106 0:00:00 0:00:00 2 nfsd +0xffffa08950a89700 0 2121 0:00:24 0:00:08 1 rngd +0xffffa089304eae00 0 2124 0:00:08 0:00:12 1 automount +0xffffa089410b9700 0 2125 0:00:04 0:00:00 1 automount +0xffffa089410bae00 0 2126 0:00:00 0:00:00 1 automount +0xffffa0893c2b1700 0 2127 0:00:00 0:00:08 1 agetty +0xffffa0893c2b4500 0 2132 0:00:36 0:01:00 1 login +0xffffa089410bc500 0 2150 0:00:00 0:00:00 1 automount +0xffffa08960f42e00 0 2156 0:00:00 0:00:08 1 automount +0xffffa0894cc81700 65437 2250 0:00:00 0:00:00 2079 postgres +0xffffa0894cc82e00 65437 2251 0:00:04 0:00:16 2079 postgres +0xffffa0894cc80000 65437 2252 0:00:00 0:00:00 2079 postgres +0xffffa0894cc85c00 65437 2253 0:00:04 0:00:00 2079 postgres +0xffffa0894cc84500 65437 2254 0:00:12 0:01:28 2079 postgres +0xffffa0891e0ec500 65437 2255 0:00:00 0:00:00 2079 postgres +0xffffa0890590c500 0 2438 0:00:00 0:00:00 2 target_completi +0xffffa0890590dc00 0 2439 0:00:00 0:00:00 2 xcopy_wq +0xffffa08905909700 0 2445 0:00:00 0:00:00 2 iscsi_np +0xffffa08960a38000 0 2853 0:00:00 0:00:00 1 java +0xffffa08960a3dc00 0 2856 16:50:40 6:15:24 1 java +0xffffa08960a3ae00 0 2857 0:18:44 0:04:24 1 java +0xffffa08960a3c500 0 2858 0:18:04 0:04:16 1 java +0xffffa088ef2d5c00 0 2859 0:42:04 0:07:40 1 java +0xffffa088ef2d2e00 0 2861 0:00:56 0:00:12 1 java +0xffffa088ef2d0000 0 2862 0:01:24 0:00:00 1 java +0xffffa088ef2d4500 0 2865 0:00:00 0:00:04 1 java +0xffffa088ef2d1700 0 2866 0:00:00 0:00:00 1 java +0xffffa088f097dc00 0 2867 0:00:00 0:00:04 1 java +0xffffa088f097ae00 0 2868 10:56:20 0:11:12 1 java +0xffffa088f0978000 0 2869 1:48:48 0:04:56 1 java +0xffffa088f6e5c500 0 2870 0:00:00 0:00:00 1 java +0xffffa0893dd34500 0 2874 0:00:00 0:00:00 2011 sleep +0xffffa088f0979700 0 2877 0:00:00 0:00:00 1 java +0xffffa0893dd30000 0 2878 0:00:04 0:00:00 1990 sleep +0xffffa089405cc500 0 2879 0:00:00 0:00:00 1977 sleep +0xffffa08960a39700 0 2880 0:01:44 0:00:36 1 java +0xffffa08960a24500 0 2910 0:00:08 0:00:04 1 java +0xffffa08905908000 0 3249 0:00:00 0:00:00 2 kworker/1:3 +0xffffa08960a20000 0 3853 0:00:00 0:00:00 1 java +0xffffa08960a25c00 0 3856 0:00:20 0:00:16 1 java +0xffffa08960a22e00 0 3857 0:00:04 0:00:08 1 java +0xffffa08960a21700 0 3858 0:00:08 0:00:04 1 java +0xffffa088f097c500 0 3859 0:00:00 0:00:16 1 java +0xffffa088f677dc00 0 3860 0:00:00 0:00:00 1 java +0xffffa088f6779700 0 3861 0:00:08 0:00:04 1 java +0xffffa088f677c500 0 3862 0:00:12 0:00:12 1 java +0xffffa088f6778000 0 3863 0:00:00 0:00:08 1 java +0xffffa088f677ae00 0 3864 0:00:04 0:00:00 1 java +0xffffa0889cd4dc00 0 3865 0:00:04 0:00:00 1 java +0xffffa088f6e5dc00 0 3921 0:00:36 0:00:00 1 java +0xffffa0889cd48000 0 4003 0:03:00 0:00:32 1 java +0xffffa088f6e5ae00 0 4005 0:02:44 0:00:24 1 java +0xffffa088f6e59700 0 4006 0:00:04 0:00:04 1 java +0xffffa0889cd4ae00 0 4007 0:00:00 0:00:00 1 java +0xffffa088d33d1700 0 4033 0:00:12 0:00:04 1 java +0xffffa088d33d2e00 0 4038 0:02:28 0:00:28 1 java +0xffffa088d33d5c00 0 4070 0:02:32 0:00:12 1 java +0xffffa088d33d0000 0 4074 0:02:28 0:00:16 1 java +0xffffa0889cd4c500 0 4098 0:02:12 0:00:28 1 java +0xffffa0889cd49700 0 4099 0:00:00 0:00:00 1 java +0xffffa08889c92e00 0 4104 0:01:44 0:00:12 1 java +0xffffa08889c95c00 0 4136 0:02:00 0:00:40 1 java +0xffffa0895a329700 65437 4141 0:00:44 0:00:28 2079 postgres +0xffffa0895a32dc00 65437 4142 0:00:44 0:00:36 2079 postgres +0xffffa0895a328000 65437 4143 0:00:24 0:00:20 2079 postgres +0xffffa0895a32ae00 65437 4144 0:00:32 0:00:32 2079 postgres +0xffffa08936805c00 65437 4145 0:00:32 0:00:36 2079 postgres +0xffffa08936804500 65437 4146 0:00:40 0:00:28 2079 postgres +0xffffa08936802e00 65437 4147 0:00:20 0:00:52 2079 postgres +0xffffa088be0fc500 65437 4148 0:00:44 0:01:00 2079 postgres +0xffffa088be0fdc00 65437 4149 0:00:24 0:00:36 2079 postgres +0xffffa088be0f9700 65437 4150 0:00:44 0:00:32 2079 postgres +0xffffa088be0fae00 65437 4151 0:00:56 0:00:52 2079 postgres +0xffffa088be0f8000 65437 4152 0:00:32 0:00:32 2079 postgres +0xffffa08889755c00 65437 4153 0:00:44 0:00:52 2079 postgres +0xffffa08889751700 65437 4154 0:00:28 0:00:32 2079 postgres +0xffffa08889752e00 65437 4155 0:00:36 0:00:32 2079 postgres +0xffffa08889750000 65437 4156 0:00:40 0:00:36 2079 postgres +0xffffa08889754500 65437 4157 0:00:36 0:00:40 2079 postgres +0xffffa08888afc500 65437 4158 0:01:00 0:00:16 2079 postgres +0xffffa08888afdc00 65437 4159 0:00:20 0:00:40 2079 postgres +0xffffa08888af9700 65437 4160 0:00:40 0:00:56 2079 postgres +0xffffa08889c91700 0 4163 0:02:28 0:00:04 1 java +0xffffa0893196c500 65433 4237 0:00:48 0:00:28 1 systemd +0xffffa088c58aae00 65433 4250 0:00:00 0:00:00 4237 (sd-pam) +0xffffa0888cc64500 65433 4275 0:00:04 0:00:24 2132 bash +0xffffa088d33d4500 0 4291 0:00:00 0:00:00 1 java +0xffffa088f6e58000 0 4292 0:02:04 0:00:32 1 java +0xffffa0889366c500 0 4293 0:00:00 0:00:00 1 java +0xffffa08896518000 0 4312 0:00:00 0:00:00 1 java +0xffffa0889651dc00 0 4363 0:00:00 0:00:00 1 java +0xffffa08896519700 0 4364 0:00:00 0:00:00 1 java +0xffffa0889651ae00 0 4365 0:00:04 0:00:00 1 java +0xffffa0889651c500 0 4366 0:00:00 0:00:00 1 java +0xffffa0888e8a1700 0 4367 0:00:04 0:00:00 1 java +0xffffa0888e8a5c00 0 4368 0:00:00 0:00:00 1 java +0xffffa08889c90000 0 4369 0:00:04 0:00:00 1 java +0xffffa08893669700 0 4372 0:00:00 0:00:00 1 java +0xffffa0888e8a0000 0 4373 0:00:00 0:00:00 1 java +0xffffa08889c94500 0 4374 0:00:00 0:00:00 1 java +0xffffa0888e8a2e00 0 4375 0:00:00 0:00:04 1 java +0xffffa0889fdd0000 0 4376 0:00:00 0:00:00 1 java +0xffffa0889fdd2e00 0 4379 0:00:20 0:00:04 1 java +0xffffa088f7408000 0 4381 0:00:12 0:00:04 1 java +0xffffa0889fdd1700 0 4469 0:00:24 0:00:04 1 java +0xffffa088f740c500 0 4473 0:37:16 0:08:32 2856 python2 +0xffffa088f740ae00 0 4474 0:00:00 0:00:00 1 java +0xffffa088f740dc00 0 4475 0:00:00 0:00:00 1 java +0xffffa088f7409700 0 4476 0:00:00 0:00:00 1 java +0xffffa08894564500 0 4477 0:47:00 0:14:12 2856 python2 +0xffffa08894560000 0 4478 0:00:00 0:00:00 1 java +0xffffa08894562e00 0 4479 0:00:00 0:00:00 1 java +0xffffa08894565c00 0 4480 0:00:00 0:00:00 1 java +0xffffa0889445dc00 0 4481 0:01:16 0:00:36 2856 python3 +0xffffa0889445ae00 0 4482 0:00:00 0:00:00 1 java +0xffffa08894458000 0 4483 0:13:40 0:04:00 1 java +0xffffa0889445c500 0 4484 0:00:00 0:00:00 1 java +0xffffa0893196ae00 0 4496 0:00:24 0:00:20 1688 sshd +0xffffa088a150ae00 65433 4505 0:00:00 0:00:44 4496 sshd +0xffffa0888548ae00 65433 4506 0:00:32 0:00:24 4505 bash +0xffffa08931488000 65534 4625 0:00:00 0:00:04 1952 nginx +0xffffa0893c2b2e00 0 4665 0:00:00 0:00:00 2 kworker/1:4 +0xffffa0893c2b5c00 0 4666 0:00:00 0:00:00 2 kworker/1:5 +0xffffa08894a69700 0 4722 0:00:28 0:00:04 1 java +0xffffa08894a6ae00 0 4723 0:00:00 0:00:00 1 java +0xffffa08894a68000 0 4724 0:00:00 0:00:00 1 java +0xffffa08894a6dc00 0 4725 0:00:00 0:00:00 1 java +0xffffa08893668000 0 4726 0:00:00 0:00:00 1 java +0xffffa0889fdd5c00 0 4727 0:00:00 0:00:04 1 java +0xffffa0889fdd4500 0 4728 0:00:00 0:00:00 1 java +0xffffa08894561700 0 4729 0:00:00 0:00:00 1 java +0xffffa08888c49700 0 4730 0:00:00 0:00:00 1 java +0xffffa08888c48000 0 4731 0:00:00 0:00:00 1 java +0xffffa088ca874500 0 4732 0:00:00 0:00:00 1 java +0xffffa088ca871700 0 4733 0:00:04 0:00:00 1 java +0xffffa088ca875c00 0 4734 0:00:04 0:00:08 1 java +0xffffa088ca872e00 0 4735 0:00:00 0:00:04 1 java +0xffffa0893c08c500 0 4742 0:00:04 0:00:00 1 native_oom_hand +0xffffa08941afae00 0 4756 0:00:00 0:00:00 4742 oom_waiter +0xffffa089405cdc00 0 5464 0:00:00 0:00:00 1895 sleep +0xffffa0896510c500 0 5468 0:00:00 0:00:00 1941 sleep +0xffffa0894b284500 0 5472 0:00:00 0:00:00 1919 sleep +0xffffa0893c088000 0 5517 0:00:00 0:00:36 2 z_null_iss +0xffffa0893c08dc00 0 5518 0:00:00 0:00:20 2 z_null_int +0xffffa0893c089700 0 5519 0:00:00 0:00:00 2 z_rd_iss +0xffffa089481b8000 0 5520 0:00:00 0:00:00 2 z_rd_int +0xffffa089481bae00 0 5521 0:00:00 0:00:00 2 z_rd_int +0xffffa089481bdc00 0 5522 0:00:00 0:00:00 2 z_rd_int +0xffffa089481bc500 0 5523 0:00:00 0:00:00 2 z_rd_int +0xffffa089481b9700 0 5524 0:00:00 0:00:00 2 z_rd_int +0xffffa08940964500 0 5525 0:00:00 0:00:00 2 z_rd_int +0xffffa088c58adc00 0 5526 0:00:00 0:00:00 2 z_rd_int +0xffffa088c58a8000 0 5527 0:00:00 0:00:00 2 z_rd_int +0xffffa088c58a9700 0 5528 0:00:00 0:03:56 2 z_wr_iss +0xffffa088c58ac500 0 5529 0:00:00 0:00:00 2 z_wr_iss_h +0xffffa0893c2b0000 0 5530 0:00:00 0:00:04 2 z_wr_int +0xffffa089320e2e00 0 5531 0:00:00 0:00:48 2 z_wr_int +0xffffa0890590ae00 0 5532 0:00:00 0:00:12 2 z_wr_int +0xffffa08952ec1700 0 5533 0:00:00 0:00:24 2 z_wr_int +0xffffa08951028000 0 5534 0:00:00 0:00:32 2 z_wr_int +0xffffa08951029700 0 5535 0:00:00 0:00:12 2 z_wr_int +0xffffa0895102dc00 0 5536 0:00:00 0:00:24 2 z_wr_int +0xffffa0895102c500 0 5537 0:00:00 0:00:36 2 z_wr_int +0xffffa0895102ae00 0 5538 0:00:00 0:00:00 2 z_wr_int_h +0xffffa0888c779700 0 5539 0:00:00 0:00:00 2 z_fr_iss +0xffffa0888c77dc00 0 5540 0:00:00 0:00:00 2 z_fr_iss +0xffffa0888c77c500 0 5541 0:00:00 0:00:00 2 z_fr_iss +0xffffa0888c77ae00 0 5542 0:00:00 0:00:00 2 z_fr_iss +0xffffa0888c778000 0 5543 0:00:00 0:00:00 2 z_fr_iss +0xffffa08941a69700 0 5544 0:00:00 0:00:00 2 z_fr_iss +0xffffa08941a6dc00 0 5545 0:00:00 0:00:00 2 z_fr_iss +0xffffa08941a6c500 0 5546 0:00:00 0:00:00 2 z_fr_iss +0xffffa08941a6ae00 0 5547 0:00:00 0:00:00 2 z_fr_int +0xffffa08941a68000 0 5548 0:00:00 0:00:00 2 z_cl_iss +0xffffa0889bef1700 0 5549 0:00:00 0:00:00 2 z_cl_int +0xffffa0889bef5c00 0 5550 0:00:00 0:00:00 2 z_ioctl_iss +0xffffa0889bef4500 0 5551 0:00:00 0:00:00 2 z_ioctl_int +0xffffa0889bef2e00 0 5552 0:00:00 0:00:00 2 z_trim_iss +0xffffa0889bef0000 0 5553 0:00:00 0:00:00 2 z_trim_int +0xffffa0889c9eae00 0 5554 0:00:00 0:00:00 2 z_zvol +0xffffa0889c9e8000 0 5555 0:00:00 0:00:00 2 z_prefetch +0xffffa0889c9e9700 0 5556 0:00:00 0:00:00 2 z_upgrade +0xffffa08953ac5c00 0 5588 0:00:00 0:00:00 2 metaslab_group_ +0xffffa0889c9edc00 0 5589 0:00:00 0:00:00 2 metaslab_group_ +0xffffa08953acae00 0 5592 0:00:00 0:00:08 2 dp_sync_taskq +0xffffa08953ac8000 0 5595 0:00:00 0:00:00 2 dp_zil_clean_ta +0xffffa0895a31c500 0 5596 0:00:00 0:00:40 2 dp_zil_clean_ta +0xffffa0895a319700 0 5597 0:00:00 0:00:00 2 z_iput +0xffffa0895a31ae00 0 5598 0:00:00 0:00:00 2 z_unlinked_drai +0xffffa0895a318000 0 5599 0:00:00 0:00:00 2 txg_quiesce +0xffffa0895a31dc00 0 5601 0:00:00 0:01:04 2 txg_sync +0xffffa0888d2cdc00 0 5602 0:00:00 0:00:00 2 mmp +0xffffa08883df0000 0 5673 0:00:00 0:00:00 2 zthr_procedure +0xffffa08883df5c00 0 5674 0:00:00 0:00:00 2 zthr_procedure +0xffffa08883df1700 0 5675 0:00:00 0:00:00 2 zthr_procedure +0xffffa08937f4dc00 0 5676 0:00:00 0:00:00 2 zthr_procedure +0xffffa08959894500 0 5891 0:00:00 0:00:24 2 z_vdev_file +0xffffa0888c784500 0 5899 0:00:00 0:00:16 2 z_vdev_file +0xffffa088ce681700 0 5952 0:00:00 0:00:32 2 z_vdev_file +0xffffa0894e6a8000 0 5976 0:00:00 0:00:24 2 z_vdev_file +0xffffa08884834500 0 5981 0:00:04 0:00:16 4506 sudo +0xffffa0888cc62e00 0 5983 0:02:56 2:07:16 5981 dd +0xffffa08884832e00 0 6026 0:00:04 0:00:12 4506 sudo +0xffffa08884830000 0 6028 0:00:00 0:00:20 6026 su +0xffffa08884831700 0 6029 0:00:00 0:00:00 6028 bash +0xffffa0888d2cae00 0 6030 0:00:00 0:00:28 2 z_vdev_file +0xffffa088ce682e00 0 6184 0:00:00 0:00:00 2 z_wr_int +0xffffa08953ac9700 0 6186 0:00:00 0:00:00 2 z_vdev_file +0xffffa08953acdc00 0 6188 0:00:00 0:00:00 2 z_vdev_file +0xffffa0889c9ec500 0 6189 0:00:00 0:00:00 2 z_wr_int +0xffffa08883df2e00 0 6190 0:00:00 0:00:00 2 z_wr_int +0xffffa08883df4500 0 6191 0:00:00 0:00:00 2 z_vdev_file +0xffffa0888d2cc500 0 6192 0:00:00 0:00:00 2 z_vdev_file +0xffffa0888d2c8000 0 6194 0:00:00 0:00:00 2 z_wr_int +0xffffa0888d2fdc00 0 6196 0:00:00 0:00:00 2 z_wr_int +0xffffa087d20edc00 0 6279 0:00:00 0:00:00 2 z_vdev_file +0xffffa088f1e95c00 0 6309 0:00:00 0:00:00 2021 sleep diff --git a/tests/integration/data/regression_output/linux/ps -o pid,ppid b/tests/integration/data/regression_output/linux/ps -o pid,ppid new file mode 100644 index 00000000..b5b367c7 --- /dev/null +++ b/tests/integration/data/regression_output/linux/ps -o pid,ppid @@ -0,0 +1,575 @@ +task pid ppid +------------------ ---- ---- +0xffffa089669edc00 1 0 +0xffffa089669ec500 2 0 +0xffffa089669eae00 3 2 +0xffffa089669e8000 4 2 +0xffffa089669e9700 5 2 +0xffffa08966a05c00 6 2 +0xffffa08966a04500 7 2 +0xffffa08966a02e00 8 2 +0xffffa08966a00000 9 2 +0xffffa08966a01700 10 2 +0xffffa08966a0ae00 11 2 +0xffffa08966a08000 12 2 +0xffffa08966a09700 13 2 +0xffffa08966a0c500 14 2 +0xffffa08966a50000 15 2 +0xffffa08966a51700 16 2 +0xffffa08966a55c00 17 2 +0xffffa08966a54500 18 2 +0xffffa08966a52e00 19 2 +0xffffa08966a69700 20 2 +0xffffa08966a6dc00 21 2 +0xffffa08966a6c500 22 2 +0xffffa08966a6ae00 23 2 +0xffffa08966a68000 24 2 +0xffffa08966bcae00 25 2 +0xffffa08966bc8000 26 2 +0xffffa08966bc9700 27 2 +0xffffa08966bcdc00 28 2 +0xffffa08966bcc500 29 2 +0xffffa08966bd2e00 30 2 +0xffffa08966bd0000 31 2 +0xffffa08966bd1700 32 2 +0xffffa08966bd5c00 33 2 +0xffffa08966bd4500 34 2 +0xffffa089666d5c00 35 2 +0xffffa089666d4500 36 2 +0xffffa089666d2e00 37 2 +0xffffa089666d0000 38 2 +0xffffa089666d1700 39 2 +0xffffa08966795c00 40 2 +0xffffa08966794500 41 2 +0xffffa08966791700 44 2 +0xffffa089587bdc00 45 2 +0xffffa089587bc500 46 2 +0xffffa08958039700 135 2 +0xffffa0895803c500 136 2 +0xffffa0895803dc00 137 2 +0xffffa0895803ae00 138 2 +0xffffa08958038000 139 2 +0xffffa0895802c500 140 2 +0xffffa0895802dc00 141 2 +0xffffa08958029700 142 2 +0xffffa08958028000 143 2 +0xffffa0895802ae00 144 2 +0xffffa0895809ae00 145 2 +0xffffa0895809c500 146 2 +0xffffa0895809dc00 147 2 +0xffffa08958099700 148 2 +0xffffa08958098000 149 2 +0xffffa08958031700 150 2 +0xffffa08958034500 151 2 +0xffffa08958035c00 152 2 +0xffffa08958030000 153 2 +0xffffa08958032e00 154 2 +0xffffa089580e2e00 155 2 +0xffffa089580e5c00 156 2 +0xffffa089580e1700 157 2 +0xffffa089580e0000 158 2 +0xffffa089580e4500 159 2 +0xffffa08958089700 160 2 +0xffffa0895808ae00 161 2 +0xffffa0895808dc00 162 2 +0xffffa08958088000 163 2 +0xffffa0895808c500 164 2 +0xffffa0895820c500 165 2 +0xffffa0895820ae00 166 2 +0xffffa08958208000 167 2 +0xffffa08958209700 168 2 +0xffffa0895820dc00 169 2 +0xffffa08957d18000 170 2 +0xffffa08957d19700 171 2 +0xffffa08957d1dc00 172 2 +0xffffa08957d1c500 173 2 +0xffffa08958082e00 174 2 +0xffffa08958084500 175 2 +0xffffa08957db8000 199 2 +0xffffa08957dbdc00 200 2 +0xffffa08957db5c00 251 2 +0xffffa089587b9700 253 2 +0xffffa08957585c00 264 2 +0xffffa08957582e00 265 2 +0xffffa08957580000 266 2 +0xffffa08957581700 267 2 +0xffffa08957584500 268 2 +0xffffa08966790000 318 2 +0xffffa08957da8000 346 2 +0xffffa08957dadc00 347 2 +0xffffa08957dac500 348 2 +0xffffa08957daae00 349 2 +0xffffa08966792e00 357 2 +0xffffa08956848000 367 2 +0xffffa0895684c500 371 2 +0xffffa08956849700 372 2 +0xffffa0895684ae00 373 2 +0xffffa0895684dc00 375 2 +0xffffa089580b2e00 378 2 +0xffffa089580b1700 379 2 +0xffffa089587bae00 446 2 +0xffffa089587b8000 447 2 +0xffffa08957dbc500 448 2 +0xffffa08957dbae00 449 2 +0xffffa08957db9700 450 2 +0xffffa08957db0000 451 2 +0xffffa08957db1700 452 2 +0xffffa08957db2e00 453 2 +0xffffa08957db4500 454 2 +0xffffa08953515c00 455 2 +0xffffa08953514500 456 2 +0xffffa08953512e00 457 2 +0xffffa08953510000 458 2 +0xffffa08953511700 459 2 +0xffffa0895350ae00 460 2 +0xffffa08953508000 461 2 +0xffffa08953509700 462 2 +0xffffa0895350dc00 463 2 +0xffffa0895350c500 464 2 +0xffffa089534b4500 465 2 +0xffffa089534b2e00 466 2 +0xffffa089534b0000 467 2 +0xffffa089534b1700 468 2 +0xffffa089534b5c00 469 2 +0xffffa089534a2e00 470 2 +0xffffa089534a0000 471 2 +0xffffa089534a1700 472 2 +0xffffa089534a5c00 473 2 +0xffffa089534a4500 474 2 +0xffffa08953474500 475 2 +0xffffa08953472e00 476 2 +0xffffa08953470000 477 2 +0xffffa08953471700 478 2 +0xffffa08953475c00 479 2 +0xffffa0895346c500 480 2 +0xffffa0895346ae00 481 2 +0xffffa08953468000 482 2 +0xffffa08953469700 483 2 +0xffffa0895346dc00 484 2 +0xffffa089533fdc00 485 2 +0xffffa089533fc500 487 2 +0xffffa089533fae00 488 2 +0xffffa089533f8000 489 2 +0xffffa089533f9700 490 2 +0xffffa08952e71700 491 2 +0xffffa08952e75c00 493 2 +0xffffa08952e70000 494 2 +0xffffa08957e3c500 551 2 +0xffffa08957da9700 552 2 +0xffffa08952e5ae00 553 2 +0xffffa08952e5dc00 554 2 +0xffffa08952e58000 555 2 +0xffffa08952e5c500 556 2 +0xffffa08952e59700 557 2 +0xffffa089320e0000 735 2 +0xffffa089320e1700 743 1 +0xffffa0893085dc00 765 2 +0xffffa08952e72e00 766 2 +0xffffa08952e74500 767 2 +0xffffa089304e8000 774 2 +0xffffa08931968000 779 1 +0xffffa0893196dc00 781 1 +0xffffa089320e5c00 830 2 +0xffffa08957e38000 837 2 +0xffffa089304ec500 935 2 +0xffffa08958081700 1031 1 +0xffffa089320e4500 1033 1 +0xffffa08952ec4500 1037 1 +0xffffa0893a532e00 1038 1 +0xffffa0894e7b2e00 1237 2 +0xffffa0894e7f4500 1238 2 +0xffffa0894e7f2e00 1239 2 +0xffffa0894e7f0000 1240 2 +0xffffa0894e7f1700 1241 2 +0xffffa0894e7f5c00 1242 2 +0xffffa0894e7fdc00 1243 2 +0xffffa0894e7fc500 1244 2 +0xffffa0894e7fae00 1245 2 +0xffffa0894e7f8000 1246 2 +0xffffa0894e7f9700 1247 2 +0xffffa0894ea71700 1248 2 +0xffffa0894ea75c00 1249 2 +0xffffa0894ea74500 1250 2 +0xffffa0894ea72e00 1251 2 +0xffffa0894ea70000 1252 2 +0xffffa0894ea7dc00 1253 2 +0xffffa0894ea7c500 1254 2 +0xffffa0894ea7ae00 1255 2 +0xffffa0894ea78000 1256 2 +0xffffa0894ea79700 1257 2 +0xffffa0894eaaae00 1258 2 +0xffffa0894eaa8000 1259 2 +0xffffa0894eaa9700 1260 2 +0xffffa0894eaadc00 1261 2 +0xffffa0894eaac500 1262 2 +0xffffa0894eabae00 1263 2 +0xffffa0894eab8000 1264 2 +0xffffa0894eab9700 1265 2 +0xffffa0894eabdc00 1266 2 +0xffffa0894eabc500 1267 2 +0xffffa0894eb61700 1268 2 +0xffffa0894eb65c00 1269 2 +0xffffa0894eb64500 1270 2 +0xffffa0894eb62e00 1271 2 +0xffffa0894eb60000 1272 2 +0xffffa0894eb69700 1273 2 +0xffffa0894eb6dc00 1274 2 +0xffffa0894eb6c500 1275 2 +0xffffa0894eb6ae00 1276 2 +0xffffa0894ebb2e00 1281 2 +0xffffa0894ebb0000 1282 2 +0xffffa0894ebb1700 1283 2 +0xffffa0894ebb4500 1284 2 +0xffffa0894ebb5c00 1285 2 +0xffffa0893085c500 1290 2 +0xffffa08930858000 1291 2 +0xffffa089553a8000 1335 2 +0xffffa089553a9700 1336 2 +0xffffa089553adc00 1337 2 +0xffffa089553ac500 1338 2 +0xffffa089553bae00 1339 2 +0xffffa089553b8000 1340 2 +0xffffa089553b9700 1341 2 +0xffffa0893085ae00 1542 1 +0xffffa089408f1700 1578 1 +0xffffa089408f2e00 1688 1 +0xffffa08940965c00 1728 1 +0xffffa08940962e00 1730 1 +0xffffa08931969700 1756 1 +0xffffa0894e6a9700 1772 1 +0xffffa089408f8000 1781 1 +0xffffa089408fdc00 1782 1 +0xffffa089408fc500 1783 1 +0xffffa0895601dc00 1784 1 +0xffffa08956018000 1785 1 +0xffffa08956019700 1786 1 +0xffffa0895601c500 1787 1 +0xffffa0895601ae00 1788 1 +0xffffa089560c1700 1789 1 +0xffffa089560c4500 1790 1 +0xffffa089560c2e00 1791 1 +0xffffa089553bc500 1792 1 +0xffffa089408f5c00 1793 1 +0xffffa089408f4500 1794 1 +0xffffa08930859700 1795 1 +0xffffa0895541dc00 1797 1 +0xffffa0895541ae00 1798 1 +0xffffa08957d1ae00 1845 1 +0xffffa0893691dc00 1857 1 +0xffffa08936918000 1858 1 +0xffffa0893691c500 1860 1 +0xffffa08936919700 1861 1 +0xffffa0893691ae00 1870 1 +0xffffa0893304dc00 1871 1 +0xffffa08952ec2e00 1878 1 +0xffffa08952ec0000 1887 1 +0xffffa08933048000 1895 1 +0xffffa08933049700 1903 1 +0xffffa0893649ae00 1906 1860 +0xffffa08936498000 1910 1857 +0xffffa089304edc00 1911 1 +0xffffa089320c1700 1918 1910 +0xffffa0893304c500 1919 1 +0xffffa08957e39700 1926 2 +0xffffa0893304ae00 1934 1 +0xffffa089320c4500 1936 1870 +0xffffa089320c5c00 1940 1906 +0xffffa08931d50000 1941 1 +0xffffa089320c0000 1942 1 +0xffffa0893319dc00 1952 1 +0xffffa0894b280000 1958 1936 +0xffffa0894b281700 1959 1 +0xffffa0894b282e00 1964 1 +0xffffa08952ec5c00 1968 1 +0xffffa08930464500 1972 1 +0xffffa089320c2e00 1977 1 +0xffffa08958085c00 1979 2 +0xffffa0896510dc00 1982 1 +0xffffa0894e7b0000 1984 2 +0xffffa0894e7b5c00 1986 2 +0xffffa0894e7b1700 1987 2 +0xffffa0896510ae00 1990 1 +0xffffa0894e7b4500 1991 2 +0xffffa089580b0000 1992 2 +0xffffa089580b5c00 1994 2 +0xffffa089405c9700 1995 1 +0xffffa089580b4500 1996 2 +0xffffa089408f9700 1998 2 +0xffffa089553bdc00 2002 2 +0xffffa0894e6aae00 2004 2 +0xffffa0894e6ac500 2007 2 +0xffffa0894b285c00 2011 1 +0xffffa08965109700 2012 1 +0xffffa0894e6adc00 2013 2 +0xffffa089408fae00 2017 2 +0xffffa08957e3ae00 2019 2 +0xffffa0893649dc00 2021 1 +0xffffa089304e9700 2025 2 +0xffffa08940961700 2028 2 +0xffffa08940960000 2035 2 +0xffffa0893bf7ae00 2039 2 +0xffffa0893bf78000 2042 2 +0xffffa0893bf79700 2044 2 +0xffffa0894483dc00 2045 1 +0xffffa0893bf7dc00 2049 2 +0xffffa0893bf7c500 2050 2 +0xffffa08957e3dc00 2054 2 +0xffffa08936801700 2055 1 +0xffffa0894eb68000 2057 2 +0xffffa08958080000 2058 2 +0xffffa08941f6c500 2059 2 +0xffffa08941f6ae00 2062 2 +0xffffa08941f68000 2063 2 +0xffffa08941f69700 2064 2 +0xffffa08941f6dc00 2066 2 +0xffffa08934e00000 2067 2 +0xffffa08934e01700 2068 2 +0xffffa08934e05c00 2069 2 +0xffffa08934e04500 2071 2 +0xffffa08934e02e00 2072 2 +0xffffa08934b58000 2073 2 +0xffffa08934b59700 2074 2 +0xffffa08934b5dc00 2075 2 +0xffffa08934b5c500 2076 2 +0xffffa08934b5ae00 2077 2 +0xffffa089358f1700 2078 2 +0xffffa08936800000 2079 2055 +0xffffa089358f5c00 2080 2 +0xffffa089358f4500 2082 2 +0xffffa0893dd31700 2083 1959 +0xffffa089358f2e00 2084 2 +0xffffa089358f0000 2085 2 +0xffffa0893d89ae00 2086 2 +0xffffa0893d898000 2087 2 +0xffffa0893d899700 2088 2 +0xffffa0893d89dc00 2089 2 +0xffffa0893f96c500 2091 2 +0xffffa0893f96ae00 2092 2 +0xffffa0893f968000 2093 2 +0xffffa0893f969700 2095 2 +0xffffa0893f96dc00 2096 2 +0xffffa0893d89c500 2097 2 +0xffffa089408f0000 2098 2 +0xffffa089553aae00 2099 2 +0xffffa08939f70000 2100 2 +0xffffa08939f71700 2101 2 +0xffffa08939f75c00 2103 2 +0xffffa08939f74500 2104 2 +0xffffa08939f72e00 2105 2 +0xffffa0893c08ae00 2106 2 +0xffffa08950a89700 2121 1 +0xffffa089304eae00 2124 1 +0xffffa089410b9700 2125 1 +0xffffa089410bae00 2126 1 +0xffffa0893c2b1700 2127 1 +0xffffa0893c2b4500 2132 1 +0xffffa089410bc500 2150 1 +0xffffa08960f42e00 2156 1 +0xffffa0894cc81700 2250 2079 +0xffffa0894cc82e00 2251 2079 +0xffffa0894cc80000 2252 2079 +0xffffa0894cc85c00 2253 2079 +0xffffa0894cc84500 2254 2079 +0xffffa0891e0ec500 2255 2079 +0xffffa0890590c500 2438 2 +0xffffa0890590dc00 2439 2 +0xffffa08905909700 2445 2 +0xffffa08960a38000 2853 1 +0xffffa08960a3dc00 2856 1 +0xffffa08960a3ae00 2857 1 +0xffffa08960a3c500 2858 1 +0xffffa088ef2d5c00 2859 1 +0xffffa088ef2d2e00 2861 1 +0xffffa088ef2d0000 2862 1 +0xffffa088ef2d4500 2865 1 +0xffffa088ef2d1700 2866 1 +0xffffa088f097dc00 2867 1 +0xffffa088f097ae00 2868 1 +0xffffa088f0978000 2869 1 +0xffffa088f6e5c500 2870 1 +0xffffa0893dd34500 2874 2011 +0xffffa088f0979700 2877 1 +0xffffa0893dd30000 2878 1990 +0xffffa089405cc500 2879 1977 +0xffffa08960a39700 2880 1 +0xffffa08960a24500 2910 1 +0xffffa08905908000 3249 2 +0xffffa08960a20000 3853 1 +0xffffa08960a25c00 3856 1 +0xffffa08960a22e00 3857 1 +0xffffa08960a21700 3858 1 +0xffffa088f097c500 3859 1 +0xffffa088f677dc00 3860 1 +0xffffa088f6779700 3861 1 +0xffffa088f677c500 3862 1 +0xffffa088f6778000 3863 1 +0xffffa088f677ae00 3864 1 +0xffffa0889cd4dc00 3865 1 +0xffffa088f6e5dc00 3921 1 +0xffffa0889cd48000 4003 1 +0xffffa088f6e5ae00 4005 1 +0xffffa088f6e59700 4006 1 +0xffffa0889cd4ae00 4007 1 +0xffffa088d33d1700 4033 1 +0xffffa088d33d2e00 4038 1 +0xffffa088d33d5c00 4070 1 +0xffffa088d33d0000 4074 1 +0xffffa0889cd4c500 4098 1 +0xffffa0889cd49700 4099 1 +0xffffa08889c92e00 4104 1 +0xffffa08889c95c00 4136 1 +0xffffa0895a329700 4141 2079 +0xffffa0895a32dc00 4142 2079 +0xffffa0895a328000 4143 2079 +0xffffa0895a32ae00 4144 2079 +0xffffa08936805c00 4145 2079 +0xffffa08936804500 4146 2079 +0xffffa08936802e00 4147 2079 +0xffffa088be0fc500 4148 2079 +0xffffa088be0fdc00 4149 2079 +0xffffa088be0f9700 4150 2079 +0xffffa088be0fae00 4151 2079 +0xffffa088be0f8000 4152 2079 +0xffffa08889755c00 4153 2079 +0xffffa08889751700 4154 2079 +0xffffa08889752e00 4155 2079 +0xffffa08889750000 4156 2079 +0xffffa08889754500 4157 2079 +0xffffa08888afc500 4158 2079 +0xffffa08888afdc00 4159 2079 +0xffffa08888af9700 4160 2079 +0xffffa08889c91700 4163 1 +0xffffa0893196c500 4237 1 +0xffffa088c58aae00 4250 4237 +0xffffa0888cc64500 4275 2132 +0xffffa088d33d4500 4291 1 +0xffffa088f6e58000 4292 1 +0xffffa0889366c500 4293 1 +0xffffa08896518000 4312 1 +0xffffa0889651dc00 4363 1 +0xffffa08896519700 4364 1 +0xffffa0889651ae00 4365 1 +0xffffa0889651c500 4366 1 +0xffffa0888e8a1700 4367 1 +0xffffa0888e8a5c00 4368 1 +0xffffa08889c90000 4369 1 +0xffffa08893669700 4372 1 +0xffffa0888e8a0000 4373 1 +0xffffa08889c94500 4374 1 +0xffffa0888e8a2e00 4375 1 +0xffffa0889fdd0000 4376 1 +0xffffa0889fdd2e00 4379 1 +0xffffa088f7408000 4381 1 +0xffffa0889fdd1700 4469 1 +0xffffa088f740c500 4473 2856 +0xffffa088f740ae00 4474 1 +0xffffa088f740dc00 4475 1 +0xffffa088f7409700 4476 1 +0xffffa08894564500 4477 2856 +0xffffa08894560000 4478 1 +0xffffa08894562e00 4479 1 +0xffffa08894565c00 4480 1 +0xffffa0889445dc00 4481 2856 +0xffffa0889445ae00 4482 1 +0xffffa08894458000 4483 1 +0xffffa0889445c500 4484 1 +0xffffa0893196ae00 4496 1688 +0xffffa088a150ae00 4505 4496 +0xffffa0888548ae00 4506 4505 +0xffffa08931488000 4625 1952 +0xffffa0893c2b2e00 4665 2 +0xffffa0893c2b5c00 4666 2 +0xffffa08894a69700 4722 1 +0xffffa08894a6ae00 4723 1 +0xffffa08894a68000 4724 1 +0xffffa08894a6dc00 4725 1 +0xffffa08893668000 4726 1 +0xffffa0889fdd5c00 4727 1 +0xffffa0889fdd4500 4728 1 +0xffffa08894561700 4729 1 +0xffffa08888c49700 4730 1 +0xffffa08888c48000 4731 1 +0xffffa088ca874500 4732 1 +0xffffa088ca871700 4733 1 +0xffffa088ca875c00 4734 1 +0xffffa088ca872e00 4735 1 +0xffffa0893c08c500 4742 1 +0xffffa08941afae00 4756 4742 +0xffffa089405cdc00 5464 1895 +0xffffa0896510c500 5468 1941 +0xffffa0894b284500 5472 1919 +0xffffa0893c088000 5517 2 +0xffffa0893c08dc00 5518 2 +0xffffa0893c089700 5519 2 +0xffffa089481b8000 5520 2 +0xffffa089481bae00 5521 2 +0xffffa089481bdc00 5522 2 +0xffffa089481bc500 5523 2 +0xffffa089481b9700 5524 2 +0xffffa08940964500 5525 2 +0xffffa088c58adc00 5526 2 +0xffffa088c58a8000 5527 2 +0xffffa088c58a9700 5528 2 +0xffffa088c58ac500 5529 2 +0xffffa0893c2b0000 5530 2 +0xffffa089320e2e00 5531 2 +0xffffa0890590ae00 5532 2 +0xffffa08952ec1700 5533 2 +0xffffa08951028000 5534 2 +0xffffa08951029700 5535 2 +0xffffa0895102dc00 5536 2 +0xffffa0895102c500 5537 2 +0xffffa0895102ae00 5538 2 +0xffffa0888c779700 5539 2 +0xffffa0888c77dc00 5540 2 +0xffffa0888c77c500 5541 2 +0xffffa0888c77ae00 5542 2 +0xffffa0888c778000 5543 2 +0xffffa08941a69700 5544 2 +0xffffa08941a6dc00 5545 2 +0xffffa08941a6c500 5546 2 +0xffffa08941a6ae00 5547 2 +0xffffa08941a68000 5548 2 +0xffffa0889bef1700 5549 2 +0xffffa0889bef5c00 5550 2 +0xffffa0889bef4500 5551 2 +0xffffa0889bef2e00 5552 2 +0xffffa0889bef0000 5553 2 +0xffffa0889c9eae00 5554 2 +0xffffa0889c9e8000 5555 2 +0xffffa0889c9e9700 5556 2 +0xffffa08953ac5c00 5588 2 +0xffffa0889c9edc00 5589 2 +0xffffa08953acae00 5592 2 +0xffffa08953ac8000 5595 2 +0xffffa0895a31c500 5596 2 +0xffffa0895a319700 5597 2 +0xffffa0895a31ae00 5598 2 +0xffffa0895a318000 5599 2 +0xffffa0895a31dc00 5601 2 +0xffffa0888d2cdc00 5602 2 +0xffffa08883df0000 5673 2 +0xffffa08883df5c00 5674 2 +0xffffa08883df1700 5675 2 +0xffffa08937f4dc00 5676 2 +0xffffa08959894500 5891 2 +0xffffa0888c784500 5899 2 +0xffffa088ce681700 5952 2 +0xffffa0894e6a8000 5976 2 +0xffffa08884834500 5981 4506 +0xffffa0888cc62e00 5983 5981 +0xffffa08884832e00 6026 4506 +0xffffa08884830000 6028 6026 +0xffffa08884831700 6029 6028 +0xffffa0888d2cae00 6030 2 +0xffffa088ce682e00 6184 2 +0xffffa08953ac9700 6186 2 +0xffffa08953acdc00 6188 2 +0xffffa0889c9ec500 6189 2 +0xffffa08883df2e00 6190 2 +0xffffa08883df4500 6191 2 +0xffffa0888d2cc500 6192 2 +0xffffa0888d2c8000 6194 2 +0xffffa0888d2fdc00 6196 2 +0xffffa087d20edc00 6279 2 +0xffffa088f1e95c00 6309 2021 diff --git a/tests/integration/data/regression_output/linux/ps -p 4275 b/tests/integration/data/regression_output/linux/ps -p 4275 new file mode 100644 index 00000000..e54fff4a --- /dev/null +++ b/tests/integration/data/regression_output/linux/ps -p 4275 @@ -0,0 +1,3 @@ +pid time cmd +---- ------- ---- +4275 0:00:04 bash diff --git a/tests/integration/data/regression_output/linux/ps -x b/tests/integration/data/regression_output/linux/ps -x new file mode 100644 index 00000000..3674715f --- /dev/null +++ b/tests/integration/data/regression_output/linux/ps -x @@ -0,0 +1,575 @@ +pid time stat cmd +---- -------- ------------- --------------- +1 0:02:44 INTERRUPTIBLE systemd +2 0:00:00 INTERRUPTIBLE kthreadd +3 0:00:00 IDLE rcu_gp +4 0:00:00 IDLE rcu_par_gp +5 0:00:00 IDLE kworker/0:0 +6 0:00:00 IDLE kworker/0:0H +7 0:00:00 IDLE kworker/u4:0 +8 0:00:00 IDLE mm_percpu_wq +9 0:00:00 INTERRUPTIBLE ksoftirqd/0 +10 0:00:00 RUNNING rcu_sched +11 0:00:00 INTERRUPTIBLE migration/0 +12 0:00:00 INTERRUPTIBLE idle_inject/0 +13 0:00:00 IDLE kworker/0:1 +14 0:00:00 INTERRUPTIBLE cpuhp/0 +15 0:00:00 INTERRUPTIBLE cpuhp/1 +16 0:00:00 INTERRUPTIBLE idle_inject/1 +17 0:00:00 INTERRUPTIBLE migration/1 +18 0:00:00 INTERRUPTIBLE ksoftirqd/1 +19 0:00:00 IDLE kworker/1:0 +20 0:00:00 IDLE kworker/1:0H +21 0:00:00 INTERRUPTIBLE kdevtmpfs +22 0:00:00 IDLE netns +23 0:00:00 INTERRUPTIBLE rcu_tasks_kthre +24 0:00:00 INTERRUPTIBLE kauditd +25 0:00:00 INTERRUPTIBLE khungtaskd +26 0:00:00 INTERRUPTIBLE oom_reaper +27 0:00:00 IDLE writeback +28 0:00:00 INTERRUPTIBLE kcompactd0 +29 0:00:00 INTERRUPTIBLE ksmd +30 0:00:00 INTERRUPTIBLE khugepaged +31 0:00:00 IDLE crypto +32 0:00:00 IDLE kintegrityd +33 0:00:00 IDLE kblockd +34 0:00:00 IDLE tpm_dev_wq +35 0:00:00 IDLE ata_sff +36 0:00:00 IDLE md +37 0:00:00 IDLE edac-poller +38 0:00:00 IDLE devfreq_wq +39 0:00:00 INTERRUPTIBLE watchdogd +40 0:00:00 IDLE kworker/1:1 +41 0:00:00 IDLE kworker/u4:1 +44 0:00:00 INTERRUPTIBLE kswapd0 +45 0:00:00 IDLE kworker/u5:0 +46 0:00:00 INTERRUPTIBLE ecryptfs-kthrea +135 0:00:00 IDLE kthrotld +136 0:00:00 INTERRUPTIBLE irq/24-pciehp +137 0:00:00 INTERRUPTIBLE irq/25-pciehp +138 0:00:00 INTERRUPTIBLE irq/26-pciehp +139 0:00:00 INTERRUPTIBLE irq/27-pciehp +140 0:00:00 INTERRUPTIBLE irq/28-pciehp +141 0:00:00 INTERRUPTIBLE irq/29-pciehp +142 0:00:00 INTERRUPTIBLE irq/30-pciehp +143 0:00:00 INTERRUPTIBLE irq/31-pciehp +144 0:00:00 INTERRUPTIBLE irq/32-pciehp +145 0:00:00 INTERRUPTIBLE irq/33-pciehp +146 0:00:00 INTERRUPTIBLE irq/34-pciehp +147 0:00:00 INTERRUPTIBLE irq/35-pciehp +148 0:00:00 INTERRUPTIBLE irq/36-pciehp +149 0:00:00 INTERRUPTIBLE irq/37-pciehp +150 0:00:00 INTERRUPTIBLE irq/38-pciehp +151 0:00:00 INTERRUPTIBLE irq/39-pciehp +152 0:00:00 INTERRUPTIBLE irq/40-pciehp +153 0:00:00 INTERRUPTIBLE irq/41-pciehp +154 0:00:00 INTERRUPTIBLE irq/42-pciehp +155 0:00:00 INTERRUPTIBLE irq/43-pciehp +156 0:00:00 INTERRUPTIBLE irq/44-pciehp +157 0:00:00 INTERRUPTIBLE irq/45-pciehp +158 0:00:00 INTERRUPTIBLE irq/46-pciehp +159 0:00:00 INTERRUPTIBLE irq/47-pciehp +160 0:00:00 INTERRUPTIBLE irq/48-pciehp +161 0:00:00 INTERRUPTIBLE irq/49-pciehp +162 0:00:00 INTERRUPTIBLE irq/50-pciehp +163 0:00:00 INTERRUPTIBLE irq/51-pciehp +164 0:00:00 INTERRUPTIBLE irq/52-pciehp +165 0:00:00 INTERRUPTIBLE irq/53-pciehp +166 0:00:00 INTERRUPTIBLE irq/54-pciehp +167 0:00:00 INTERRUPTIBLE irq/55-pciehp +168 0:00:00 IDLE acpi_thermal_pm +169 0:00:00 INTERRUPTIBLE scsi_eh_0 +170 0:00:00 IDLE scsi_tmf_0 +171 0:00:00 INTERRUPTIBLE scsi_eh_1 +172 0:00:00 IDLE scsi_tmf_1 +173 0:00:00 IDLE kworker/u4:2 +174 0:00:00 IDLE kworker/u4:3 +175 0:00:00 IDLE kstrp +199 0:00:00 IDLE charger_manager +200 0:00:00 IDLE kworker/1:1H +251 0:00:00 IDLE mpt_poll_0 +253 0:00:00 IDLE mpt/0 +264 0:00:00 IDLE kworker/0:1H +265 0:00:00 INTERRUPTIBLE scsi_eh_2 +266 0:00:00 IDLE scsi_tmf_2 +267 0:00:00 IDLE kworker/u4:4 +268 0:00:00 IDLE kworker/u4:5 +318 0:00:00 IDLE raid5wq +346 0:00:00 INTERRUPTIBLE spl_system_task +347 0:00:00 INTERRUPTIBLE spl_delay_taskq +348 0:00:00 INTERRUPTIBLE spl_dynamic_tas +349 0:00:00 INTERRUPTIBLE spl_kmem_cache +357 0:00:00 INTERRUPTIBLE zvol +367 0:00:00 INTERRUPTIBLE arc_prune +371 0:00:00 INTERRUPTIBLE zthr_procedure +372 0:00:00 INTERRUPTIBLE zthr_procedure +373 0:00:00 INTERRUPTIBLE dbu_evict +375 0:00:00 INTERRUPTIBLE dbuf_evict +378 0:00:00 INTERRUPTIBLE z_vdev_file +379 0:00:00 INTERRUPTIBLE l2arc_feed +446 0:00:00 INTERRUPTIBLE z_null_iss +447 0:00:00 INTERRUPTIBLE z_null_int +448 0:00:00 INTERRUPTIBLE z_rd_iss +449 0:00:00 INTERRUPTIBLE z_rd_int +450 0:00:00 INTERRUPTIBLE z_rd_int +451 0:00:00 INTERRUPTIBLE z_rd_int +452 0:00:00 INTERRUPTIBLE z_rd_int +453 0:00:00 INTERRUPTIBLE z_rd_int +454 0:00:00 INTERRUPTIBLE z_rd_int +455 0:00:00 INTERRUPTIBLE z_rd_int +456 0:00:00 INTERRUPTIBLE z_rd_int +457 0:00:00 INTERRUPTIBLE z_wr_iss +458 0:00:00 INTERRUPTIBLE z_wr_iss_h +459 0:00:00 INTERRUPTIBLE z_wr_int +460 0:00:00 INTERRUPTIBLE z_wr_int +461 0:00:00 INTERRUPTIBLE z_wr_int +462 0:00:00 INTERRUPTIBLE z_wr_int +463 0:00:00 INTERRUPTIBLE z_wr_int +464 0:00:00 INTERRUPTIBLE z_wr_int +465 0:00:00 INTERRUPTIBLE z_wr_int +466 0:00:00 INTERRUPTIBLE z_wr_int +467 0:00:00 INTERRUPTIBLE z_wr_int_h +468 0:00:00 INTERRUPTIBLE z_fr_iss +469 0:00:00 INTERRUPTIBLE z_fr_iss +470 0:00:00 INTERRUPTIBLE z_fr_iss +471 0:00:00 INTERRUPTIBLE z_fr_iss +472 0:00:00 INTERRUPTIBLE z_fr_iss +473 0:00:00 INTERRUPTIBLE z_fr_iss +474 0:00:00 INTERRUPTIBLE z_fr_iss +475 0:00:00 INTERRUPTIBLE z_fr_iss +476 0:00:00 INTERRUPTIBLE z_fr_int +477 0:00:00 INTERRUPTIBLE z_cl_iss +478 0:00:00 INTERRUPTIBLE z_cl_int +479 0:00:00 INTERRUPTIBLE z_ioctl_iss +480 0:00:00 INTERRUPTIBLE z_ioctl_int +481 0:00:00 INTERRUPTIBLE z_trim_iss +482 0:00:00 INTERRUPTIBLE z_trim_int +483 0:00:00 INTERRUPTIBLE z_zvol +484 0:00:00 INTERRUPTIBLE z_prefetch +485 0:00:00 INTERRUPTIBLE z_upgrade +487 0:00:00 INTERRUPTIBLE dp_sync_taskq +488 0:00:00 INTERRUPTIBLE dp_zil_clean_ta +489 0:00:00 INTERRUPTIBLE dp_zil_clean_ta +490 0:00:00 INTERRUPTIBLE z_iput +491 0:00:00 INTERRUPTIBLE z_unlinked_drai +493 0:00:00 INTERRUPTIBLE metaslab_group_ +494 0:00:00 INTERRUPTIBLE metaslab_group_ +551 0:00:00 INTERRUPTIBLE txg_quiesce +552 0:00:00 INTERRUPTIBLE txg_sync +553 0:00:00 INTERRUPTIBLE mmp +554 0:00:00 INTERRUPTIBLE zthr_procedure +555 0:00:00 INTERRUPTIBLE zthr_procedure +556 0:00:00 INTERRUPTIBLE zthr_procedure +557 0:00:00 INTERRUPTIBLE zthr_procedure +735 0:00:00 IDLE kworker/0:2 +743 0:03:12 INTERRUPTIBLE systemd-journal +765 0:00:00 IDLE kworker/0:3 +766 0:00:00 IDLE kworker/0:4 +767 0:00:00 IDLE rpciod +774 0:00:00 IDLE xprtiod +779 0:00:00 INTERRUPTIBLE blkmapd +781 0:13:08 INTERRUPTIBLE systemd-udevd +830 0:00:00 INTERRUPTIBLE irq/16-vmwgfx +837 0:00:00 IDLE ttm_swap +935 0:00:00 IDLE kworker/1:2 +1031 0:00:08 INTERRUPTIBLE VGAuthService +1033 0:02:04 INTERRUPTIBLE vmtoolsd +1037 0:00:52 INTERRUPTIBLE auditd +1038 0:00:00 INTERRUPTIBLE auditd +1237 0:00:00 INTERRUPTIBLE z_null_iss +1238 0:00:00 INTERRUPTIBLE z_null_int +1239 0:00:00 INTERRUPTIBLE z_rd_iss +1240 0:00:00 INTERRUPTIBLE z_rd_int +1241 0:00:00 INTERRUPTIBLE z_rd_int +1242 0:00:00 INTERRUPTIBLE z_rd_int +1243 0:00:00 INTERRUPTIBLE z_rd_int +1244 0:00:00 INTERRUPTIBLE z_rd_int +1245 0:00:00 INTERRUPTIBLE z_rd_int +1246 0:00:00 INTERRUPTIBLE z_rd_int +1247 0:00:00 INTERRUPTIBLE z_rd_int +1248 0:00:00 INTERRUPTIBLE z_wr_iss +1249 0:00:00 INTERRUPTIBLE z_wr_iss_h +1250 0:00:00 INTERRUPTIBLE z_wr_int +1251 0:00:00 INTERRUPTIBLE z_wr_int +1252 0:00:00 INTERRUPTIBLE z_wr_int +1253 0:00:00 INTERRUPTIBLE z_wr_int +1254 0:00:00 INTERRUPTIBLE z_wr_int +1255 0:00:00 INTERRUPTIBLE z_wr_int +1256 0:00:00 INTERRUPTIBLE z_wr_int +1257 0:00:00 INTERRUPTIBLE z_wr_int +1258 0:00:00 INTERRUPTIBLE z_wr_int_h +1259 0:00:00 INTERRUPTIBLE z_fr_iss +1260 0:00:00 INTERRUPTIBLE z_fr_iss +1261 0:00:00 INTERRUPTIBLE z_fr_iss +1262 0:00:00 INTERRUPTIBLE z_fr_iss +1263 0:00:00 INTERRUPTIBLE z_fr_iss +1264 0:00:00 INTERRUPTIBLE z_fr_iss +1265 0:00:00 INTERRUPTIBLE z_fr_iss +1266 0:00:00 INTERRUPTIBLE z_fr_iss +1267 0:00:00 INTERRUPTIBLE z_fr_int +1268 0:00:00 INTERRUPTIBLE z_cl_iss +1269 0:00:00 INTERRUPTIBLE z_cl_int +1270 0:00:00 INTERRUPTIBLE z_ioctl_iss +1271 0:00:00 INTERRUPTIBLE z_ioctl_int +1272 0:00:00 INTERRUPTIBLE z_trim_iss +1273 0:00:00 INTERRUPTIBLE z_trim_int +1274 0:00:00 INTERRUPTIBLE z_zvol +1275 0:00:00 INTERRUPTIBLE z_prefetch +1276 0:00:00 INTERRUPTIBLE z_upgrade +1281 0:00:00 INTERRUPTIBLE dp_sync_taskq +1282 0:00:00 INTERRUPTIBLE dp_zil_clean_ta +1283 0:00:00 INTERRUPTIBLE dp_zil_clean_ta +1284 0:00:00 INTERRUPTIBLE z_iput +1285 0:00:00 INTERRUPTIBLE z_unlinked_drai +1290 0:00:00 INTERRUPTIBLE metaslab_group_ +1291 0:00:00 INTERRUPTIBLE metaslab_group_ +1335 0:00:00 INTERRUPTIBLE txg_quiesce +1336 0:00:00 INTERRUPTIBLE txg_sync +1337 0:00:00 INTERRUPTIBLE mmp +1338 0:00:00 INTERRUPTIBLE zthr_procedure +1339 0:00:00 INTERRUPTIBLE zthr_procedure +1340 0:00:00 INTERRUPTIBLE zthr_procedure +1341 0:00:00 INTERRUPTIBLE zthr_procedure +1542 0:00:24 INTERRUPTIBLE systemd-network +1578 0:00:40 INTERRUPTIBLE systemd-resolve +1688 0:00:08 INTERRUPTIBLE sshd +1728 0:00:04 INTERRUPTIBLE rsyslogd +1730 0:00:40 INTERRUPTIBLE dbus-daemon +1756 0:00:04 INTERRUPTIBLE cron +1772 0:00:08 INTERRUPTIBLE nscd +1781 0:01:32 INTERRUPTIBLE networkd-dispat +1782 0:00:04 INTERRUPTIBLE zed +1783 0:00:32 INTERRUPTIBLE systemd-logind +1784 0:00:04 INTERRUPTIBLE nscd +1785 0:00:00 INTERRUPTIBLE nscd +1786 0:00:00 INTERRUPTIBLE nscd +1787 0:00:00 INTERRUPTIBLE nscd +1788 0:00:00 INTERRUPTIBLE nscd +1789 0:00:00 INTERRUPTIBLE nscd +1790 0:00:00 INTERRUPTIBLE nscd +1791 0:00:00 INTERRUPTIBLE nscd +1792 0:00:36 INTERRUPTIBLE snmpd +1793 0:00:28 INTERRUPTIBLE in:imuxsock +1794 0:00:00 INTERRUPTIBLE in:imklog +1795 0:00:12 INTERRUPTIBLE rs:main Q:Reg +1797 0:00:00 INTERRUPTIBLE zed +1798 0:00:00 INTERRUPTIBLE zed +1845 0:00:00 INTERRUPTIBLE rsync +1857 0:00:00 INTERRUPTIBLE delphix-stat-se +1858 0:00:04 INTERRUPTIBLE sed +1860 0:00:00 INTERRUPTIBLE delphix-stat-se +1861 0:00:00 INTERRUPTIBLE sed +1870 0:00:00 INTERRUPTIBLE delphix-stat-se +1871 0:00:00 INTERRUPTIBLE sed +1878 0:00:00 INTERRUPTIBLE rpc.idmapd +1887 0:00:00 INTERRUPTIBLE rpc.mountd +1895 0:00:04 INTERRUPTIBLE delphix-stat-se +1903 0:00:00 INTERRUPTIBLE sed +1906 0:00:00 INTERRUPTIBLE timeout +1910 0:00:00 INTERRUPTIBLE timeout +1911 0:00:12 INTERRUPTIBLE polkitd +1918 0:35:24 INTERRUPTIBLE profile +1919 0:00:04 INTERRUPTIBLE delphix-stat-se +1926 0:00:00 IDLE kworker/u5:1 +1934 0:00:00 INTERRUPTIBLE sed +1936 0:00:00 INTERRUPTIBLE timeout +1940 0:00:00 INTERRUPTIBLE mpstat +1941 0:00:04 INTERRUPTIBLE delphix-stat-se +1942 0:00:04 INTERRUPTIBLE sed +1952 0:00:04 INTERRUPTIBLE nginx +1958 0:00:00 INTERRUPTIBLE iostat +1959 0:00:00 INTERRUPTIBLE delphix-stat-se +1964 0:00:00 INTERRUPTIBLE sed +1968 0:00:00 INTERRUPTIBLE gmain +1972 0:00:00 INTERRUPTIBLE gdbus +1977 0:00:00 INTERRUPTIBLE delphix-stat-se +1979 0:00:00 INTERRUPTIBLE nfsd +1982 0:00:00 INTERRUPTIBLE sed +1984 0:00:00 INTERRUPTIBLE nfsd +1986 0:00:00 INTERRUPTIBLE nfsd +1987 0:00:00 INTERRUPTIBLE nfsd +1990 0:00:00 INTERRUPTIBLE delphix-stat-se +1991 0:00:00 INTERRUPTIBLE nfsd +1992 0:00:00 INTERRUPTIBLE nfsd +1994 0:00:00 INTERRUPTIBLE nfsd +1995 0:00:08 INTERRUPTIBLE sed +1996 0:00:00 INTERRUPTIBLE nfsd +1998 0:00:00 INTERRUPTIBLE nfsd +2002 0:00:00 INTERRUPTIBLE nfsd +2004 0:00:00 INTERRUPTIBLE nfsd +2007 0:00:00 INTERRUPTIBLE nfsd +2011 0:00:00 INTERRUPTIBLE delphix-stat-se +2012 0:00:00 INTERRUPTIBLE sed +2013 0:00:00 INTERRUPTIBLE nfsd +2017 0:00:00 INTERRUPTIBLE nfsd +2019 0:00:00 INTERRUPTIBLE nfsd +2021 0:00:08 INTERRUPTIBLE nfs_delete +2025 0:00:00 INTERRUPTIBLE nfsd +2028 0:00:00 INTERRUPTIBLE nfsd +2035 0:00:00 INTERRUPTIBLE nfsd +2039 0:00:00 INTERRUPTIBLE nfsd +2042 0:00:00 INTERRUPTIBLE nfsd +2044 0:00:00 INTERRUPTIBLE nfsd +2045 0:00:00 INTERRUPTIBLE gmain +2049 0:00:00 INTERRUPTIBLE nfsd +2050 0:00:00 INTERRUPTIBLE nfsd +2054 0:00:00 INTERRUPTIBLE nfsd +2055 0:00:04 INTERRUPTIBLE sudo +2057 0:00:00 INTERRUPTIBLE nfsd +2058 0:00:00 INTERRUPTIBLE nfsd +2059 0:00:00 INTERRUPTIBLE nfsd +2062 0:00:00 INTERRUPTIBLE nfsd +2063 0:00:00 INTERRUPTIBLE nfsd +2064 0:00:00 INTERRUPTIBLE nfsd +2066 0:00:00 INTERRUPTIBLE nfsd +2067 0:00:00 INTERRUPTIBLE nfsd +2068 0:00:00 INTERRUPTIBLE nfsd +2069 0:00:00 INTERRUPTIBLE nfsd +2071 0:00:00 INTERRUPTIBLE nfsd +2072 0:00:00 INTERRUPTIBLE nfsd +2073 0:00:00 INTERRUPTIBLE nfsd +2074 0:00:00 INTERRUPTIBLE nfsd +2075 0:00:00 INTERRUPTIBLE nfsd +2076 0:00:00 INTERRUPTIBLE nfsd +2077 0:00:00 INTERRUPTIBLE nfsd +2078 0:00:00 INTERRUPTIBLE nfsd +2079 0:00:12 INTERRUPTIBLE postgres +2080 0:00:00 INTERRUPTIBLE nfsd +2082 0:00:00 INTERRUPTIBLE nfsd +2083 0:00:00 INTERRUPTIBLE sleep +2084 0:00:00 INTERRUPTIBLE nfsd +2085 0:00:00 INTERRUPTIBLE nfsd +2086 0:00:00 INTERRUPTIBLE nfsd +2087 0:00:00 INTERRUPTIBLE nfsd +2088 0:00:00 INTERRUPTIBLE nfsd +2089 0:00:00 INTERRUPTIBLE nfsd +2091 0:00:00 INTERRUPTIBLE nfsd +2092 0:00:00 INTERRUPTIBLE nfsd +2093 0:00:00 INTERRUPTIBLE nfsd +2095 0:00:00 INTERRUPTIBLE nfsd +2096 0:00:00 INTERRUPTIBLE nfsd +2097 0:00:00 INTERRUPTIBLE nfsd +2098 0:00:00 INTERRUPTIBLE nfsd +2099 0:00:00 INTERRUPTIBLE nfsd +2100 0:00:00 INTERRUPTIBLE nfsd +2101 0:00:00 INTERRUPTIBLE nfsd +2103 0:00:00 INTERRUPTIBLE nfsd +2104 0:00:00 INTERRUPTIBLE nfsd +2105 0:00:00 INTERRUPTIBLE nfsd +2106 0:00:00 INTERRUPTIBLE nfsd +2121 0:00:24 INTERRUPTIBLE rngd +2124 0:00:08 INTERRUPTIBLE automount +2125 0:00:04 INTERRUPTIBLE automount +2126 0:00:00 INTERRUPTIBLE automount +2127 0:00:00 INTERRUPTIBLE agetty +2132 0:00:36 INTERRUPTIBLE login +2150 0:00:00 INTERRUPTIBLE automount +2156 0:00:00 INTERRUPTIBLE automount +2250 0:00:00 INTERRUPTIBLE postgres +2251 0:00:04 INTERRUPTIBLE postgres +2252 0:00:00 INTERRUPTIBLE postgres +2253 0:00:04 INTERRUPTIBLE postgres +2254 0:00:12 INTERRUPTIBLE postgres +2255 0:00:00 INTERRUPTIBLE postgres +2438 0:00:00 IDLE target_completi +2439 0:00:00 IDLE xcopy_wq +2445 0:00:00 INTERRUPTIBLE iscsi_np +2853 0:00:00 INTERRUPTIBLE java +2856 16:50:40 INTERRUPTIBLE java +2857 0:18:44 INTERRUPTIBLE java +2858 0:18:04 INTERRUPTIBLE java +2859 0:42:04 INTERRUPTIBLE java +2861 0:00:56 INTERRUPTIBLE java +2862 0:01:24 INTERRUPTIBLE java +2865 0:00:00 INTERRUPTIBLE java +2866 0:00:00 INTERRUPTIBLE java +2867 0:00:00 INTERRUPTIBLE java +2868 10:56:20 INTERRUPTIBLE java +2869 1:48:48 INTERRUPTIBLE java +2870 0:00:00 INTERRUPTIBLE java +2874 0:00:00 INTERRUPTIBLE sleep +2877 0:00:00 INTERRUPTIBLE java +2878 0:00:04 INTERRUPTIBLE sleep +2879 0:00:00 INTERRUPTIBLE sleep +2880 0:01:44 INTERRUPTIBLE java +2910 0:00:08 INTERRUPTIBLE java +3249 0:00:00 IDLE kworker/1:3 +3853 0:00:00 INTERRUPTIBLE java +3856 0:00:20 INTERRUPTIBLE java +3857 0:00:04 INTERRUPTIBLE java +3858 0:00:08 INTERRUPTIBLE java +3859 0:00:00 INTERRUPTIBLE java +3860 0:00:00 INTERRUPTIBLE java +3861 0:00:08 INTERRUPTIBLE java +3862 0:00:12 INTERRUPTIBLE java +3863 0:00:00 INTERRUPTIBLE java +3864 0:00:04 INTERRUPTIBLE java +3865 0:00:04 INTERRUPTIBLE java +3921 0:00:36 INTERRUPTIBLE java +4003 0:03:00 INTERRUPTIBLE java +4005 0:02:44 INTERRUPTIBLE java +4006 0:00:04 INTERRUPTIBLE java +4007 0:00:00 INTERRUPTIBLE java +4033 0:00:12 INTERRUPTIBLE java +4038 0:02:28 INTERRUPTIBLE java +4070 0:02:32 INTERRUPTIBLE java +4074 0:02:28 INTERRUPTIBLE java +4098 0:02:12 INTERRUPTIBLE java +4099 0:00:00 INTERRUPTIBLE java +4104 0:01:44 INTERRUPTIBLE java +4136 0:02:00 INTERRUPTIBLE java +4141 0:00:44 INTERRUPTIBLE postgres +4142 0:00:44 INTERRUPTIBLE postgres +4143 0:00:24 INTERRUPTIBLE postgres +4144 0:00:32 INTERRUPTIBLE postgres +4145 0:00:32 INTERRUPTIBLE postgres +4146 0:00:40 INTERRUPTIBLE postgres +4147 0:00:20 INTERRUPTIBLE postgres +4148 0:00:44 INTERRUPTIBLE postgres +4149 0:00:24 INTERRUPTIBLE postgres +4150 0:00:44 INTERRUPTIBLE postgres +4151 0:00:56 INTERRUPTIBLE postgres +4152 0:00:32 INTERRUPTIBLE postgres +4153 0:00:44 INTERRUPTIBLE postgres +4154 0:00:28 INTERRUPTIBLE postgres +4155 0:00:36 INTERRUPTIBLE postgres +4156 0:00:40 INTERRUPTIBLE postgres +4157 0:00:36 INTERRUPTIBLE postgres +4158 0:01:00 INTERRUPTIBLE postgres +4159 0:00:20 INTERRUPTIBLE postgres +4160 0:00:40 INTERRUPTIBLE postgres +4163 0:02:28 INTERRUPTIBLE java +4237 0:00:48 INTERRUPTIBLE systemd +4250 0:00:00 INTERRUPTIBLE (sd-pam) +4275 0:00:04 INTERRUPTIBLE bash +4291 0:00:00 INTERRUPTIBLE java +4292 0:02:04 INTERRUPTIBLE java +4293 0:00:00 INTERRUPTIBLE java +4312 0:00:00 INTERRUPTIBLE java +4363 0:00:00 INTERRUPTIBLE java +4364 0:00:00 INTERRUPTIBLE java +4365 0:00:04 INTERRUPTIBLE java +4366 0:00:00 INTERRUPTIBLE java +4367 0:00:04 INTERRUPTIBLE java +4368 0:00:00 INTERRUPTIBLE java +4369 0:00:04 INTERRUPTIBLE java +4372 0:00:00 INTERRUPTIBLE java +4373 0:00:00 INTERRUPTIBLE java +4374 0:00:00 INTERRUPTIBLE java +4375 0:00:00 INTERRUPTIBLE java +4376 0:00:00 INTERRUPTIBLE java +4379 0:00:20 INTERRUPTIBLE java +4381 0:00:12 INTERRUPTIBLE java +4469 0:00:24 INTERRUPTIBLE java +4473 0:37:16 INTERRUPTIBLE python2 +4474 0:00:00 INTERRUPTIBLE java +4475 0:00:00 INTERRUPTIBLE java +4476 0:00:00 INTERRUPTIBLE java +4477 0:47:00 INTERRUPTIBLE python2 +4478 0:00:00 INTERRUPTIBLE java +4479 0:00:00 INTERRUPTIBLE java +4480 0:00:00 INTERRUPTIBLE java +4481 0:01:16 INTERRUPTIBLE python3 +4482 0:00:00 INTERRUPTIBLE java +4483 0:13:40 INTERRUPTIBLE java +4484 0:00:00 INTERRUPTIBLE java +4496 0:00:24 INTERRUPTIBLE sshd +4505 0:00:00 INTERRUPTIBLE sshd +4506 0:00:32 INTERRUPTIBLE bash +4625 0:00:00 INTERRUPTIBLE nginx +4665 0:00:00 IDLE kworker/1:4 +4666 0:00:00 IDLE kworker/1:5 +4722 0:00:28 INTERRUPTIBLE java +4723 0:00:00 INTERRUPTIBLE java +4724 0:00:00 INTERRUPTIBLE java +4725 0:00:00 INTERRUPTIBLE java +4726 0:00:00 INTERRUPTIBLE java +4727 0:00:00 INTERRUPTIBLE java +4728 0:00:00 INTERRUPTIBLE java +4729 0:00:00 INTERRUPTIBLE java +4730 0:00:00 INTERRUPTIBLE java +4731 0:00:00 INTERRUPTIBLE java +4732 0:00:00 INTERRUPTIBLE java +4733 0:00:04 INTERRUPTIBLE java +4734 0:00:04 INTERRUPTIBLE java +4735 0:00:00 INTERRUPTIBLE java +4742 0:00:04 INTERRUPTIBLE native_oom_hand +4756 0:00:00 INTERRUPTIBLE oom_waiter +5464 0:00:00 INTERRUPTIBLE sleep +5468 0:00:00 INTERRUPTIBLE sleep +5472 0:00:00 INTERRUPTIBLE sleep +5517 0:00:00 INTERRUPTIBLE z_null_iss +5518 0:00:00 INTERRUPTIBLE z_null_int +5519 0:00:00 INTERRUPTIBLE z_rd_iss +5520 0:00:00 INTERRUPTIBLE z_rd_int +5521 0:00:00 INTERRUPTIBLE z_rd_int +5522 0:00:00 INTERRUPTIBLE z_rd_int +5523 0:00:00 INTERRUPTIBLE z_rd_int +5524 0:00:00 INTERRUPTIBLE z_rd_int +5525 0:00:00 INTERRUPTIBLE z_rd_int +5526 0:00:00 INTERRUPTIBLE z_rd_int +5527 0:00:00 INTERRUPTIBLE z_rd_int +5528 0:00:00 INTERRUPTIBLE z_wr_iss +5529 0:00:00 INTERRUPTIBLE z_wr_iss_h +5530 0:00:00 INTERRUPTIBLE z_wr_int +5531 0:00:00 INTERRUPTIBLE z_wr_int +5532 0:00:00 INTERRUPTIBLE z_wr_int +5533 0:00:00 INTERRUPTIBLE z_wr_int +5534 0:00:00 INTERRUPTIBLE z_wr_int +5535 0:00:00 INTERRUPTIBLE z_wr_int +5536 0:00:00 INTERRUPTIBLE z_wr_int +5537 0:00:00 INTERRUPTIBLE z_wr_int +5538 0:00:00 INTERRUPTIBLE z_wr_int_h +5539 0:00:00 INTERRUPTIBLE z_fr_iss +5540 0:00:00 INTERRUPTIBLE z_fr_iss +5541 0:00:00 INTERRUPTIBLE z_fr_iss +5542 0:00:00 INTERRUPTIBLE z_fr_iss +5543 0:00:00 INTERRUPTIBLE z_fr_iss +5544 0:00:00 INTERRUPTIBLE z_fr_iss +5545 0:00:00 INTERRUPTIBLE z_fr_iss +5546 0:00:00 INTERRUPTIBLE z_fr_iss +5547 0:00:00 INTERRUPTIBLE z_fr_int +5548 0:00:00 INTERRUPTIBLE z_cl_iss +5549 0:00:00 INTERRUPTIBLE z_cl_int +5550 0:00:00 INTERRUPTIBLE z_ioctl_iss +5551 0:00:00 INTERRUPTIBLE z_ioctl_int +5552 0:00:00 INTERRUPTIBLE z_trim_iss +5553 0:00:00 INTERRUPTIBLE z_trim_int +5554 0:00:00 INTERRUPTIBLE z_zvol +5555 0:00:00 INTERRUPTIBLE z_prefetch +5556 0:00:00 INTERRUPTIBLE z_upgrade +5588 0:00:00 INTERRUPTIBLE metaslab_group_ +5589 0:00:00 INTERRUPTIBLE metaslab_group_ +5592 0:00:00 INTERRUPTIBLE dp_sync_taskq +5595 0:00:00 INTERRUPTIBLE dp_zil_clean_ta +5596 0:00:00 INTERRUPTIBLE dp_zil_clean_ta +5597 0:00:00 INTERRUPTIBLE z_iput +5598 0:00:00 INTERRUPTIBLE z_unlinked_drai +5599 0:00:00 INTERRUPTIBLE txg_quiesce +5601 0:00:00 INTERRUPTIBLE txg_sync +5602 0:00:00 INTERRUPTIBLE mmp +5673 0:00:00 INTERRUPTIBLE zthr_procedure +5674 0:00:00 INTERRUPTIBLE zthr_procedure +5675 0:00:00 INTERRUPTIBLE zthr_procedure +5676 0:00:00 INTERRUPTIBLE zthr_procedure +5891 0:00:00 INTERRUPTIBLE z_vdev_file +5899 0:00:00 INTERRUPTIBLE z_vdev_file +5952 0:00:00 INTERRUPTIBLE z_vdev_file +5976 0:00:00 INTERRUPTIBLE z_vdev_file +5981 0:00:04 INTERRUPTIBLE sudo +5983 0:02:56 RUNNING dd +6026 0:00:04 INTERRUPTIBLE sudo +6028 0:00:00 INTERRUPTIBLE su +6029 0:00:00 RUNNING bash +6030 0:00:00 INTERRUPTIBLE z_vdev_file +6184 0:00:00 INTERRUPTIBLE z_wr_int +6186 0:00:00 INTERRUPTIBLE z_vdev_file +6188 0:00:00 INTERRUPTIBLE z_vdev_file +6189 0:00:00 INTERRUPTIBLE z_wr_int +6190 0:00:00 INTERRUPTIBLE z_wr_int +6191 0:00:00 INTERRUPTIBLE z_vdev_file +6192 0:00:00 INTERRUPTIBLE z_vdev_file +6194 0:00:00 INTERRUPTIBLE z_wr_int +6196 0:00:00 INTERRUPTIBLE z_wr_int +6279 0:00:00 INTERRUPTIBLE z_vdev_file +6309 0:00:00 INTERRUPTIBLE sleep diff --git a/tests/integration/test_linux_generic.py b/tests/integration/test_linux_generic.py index 7504bb13..c500459b 100644 --- a/tests/integration/test_linux_generic.py +++ b/tests/integration/test_linux_generic.py @@ -89,6 +89,15 @@ "stacks -m zfs | count", "echo 0xffffa089669edc00 | stack", + # ps + "ps", + "ps -C bash", + "ps -p 4275", + "ps -e", + "ps -x", + "ps -o pid,ppid", + "ps -A", + # threads "threads", "threads | count", From d103cb6b6b1bb95cc9e17759b99519c7ef8706ba Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Fri, 21 Jan 2022 16:45:41 -0500 Subject: [PATCH 33/39] Fix CI failure, yapf reports formatting error in exit.py --- sdb/commands/exit.py | 1 - 1 file changed, 1 deletion(-) diff --git a/sdb/commands/exit.py b/sdb/commands/exit.py index 4ca7905c..6577681d 100644 --- a/sdb/commands/exit.py +++ b/sdb/commands/exit.py @@ -23,7 +23,6 @@ class Exit(sdb.Command): - "Exit the application" names = ["exit", "quit"] From 07ad3f06bee0a7e51b85521f2baa9d12bf403a9a Mon Sep 17 00:00:00 2001 From: Tony Perkins Date: Wed, 26 Jan 2022 11:20:49 -0500 Subject: [PATCH 34/39] Update sdb/commands/zfs/znode.py --- sdb/commands/zfs/znode.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sdb/commands/zfs/znode.py b/sdb/commands/zfs/znode.py index e3a33ae7..fdd92cc7 100644 --- a/sdb/commands/zfs/znode.py +++ b/sdb/commands/zfs/znode.py @@ -133,7 +133,8 @@ class Znode(sdb.Locator, sdb.PrettyPrinter): def pretty_print(self, objs: Iterable[drgn.Object]) -> None: print("{:18} {:>8} {:8} {:>8} {:>18} {:>18} {:>18} {:<18}".format( - "ADDR", "OBJ", "UNLINKED", "BLKSZ", "SIZE", "INODE", "ZFSVFS", "FILENAME")) + "ADDR", "OBJ", "UNLINKED", "BLKSZ", "SIZE", "INODE", "ZFSVFS", + "FILENAME")) for znode in objs: i = drgn.cast('int', znode.z_id) inode = znode.z_inode From da051d7529b6759fb2d236d808679c6cfe61a71d Mon Sep 17 00:00:00 2001 From: Tony Perkins Date: Wed, 26 Jan 2022 11:23:56 -0500 Subject: [PATCH 35/39] Fix issues with paul during cicd process. --- sdb/commands/zfs/znode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdb/commands/zfs/znode.py b/sdb/commands/zfs/znode.py index fdd92cc7..d3076229 100644 --- a/sdb/commands/zfs/znode.py +++ b/sdb/commands/zfs/znode.py @@ -133,7 +133,7 @@ class Znode(sdb.Locator, sdb.PrettyPrinter): def pretty_print(self, objs: Iterable[drgn.Object]) -> None: print("{:18} {:>8} {:8} {:>8} {:>18} {:>18} {:>18} {:<18}".format( - "ADDR", "OBJ", "UNLINKED", "BLKSZ", "SIZE", "INODE", "ZFSVFS", + "ADDR", "OBJ", "UNLINKED", "BLKSZ", "SIZE", "INODE", "ZFSVFS", "FILENAME")) for znode in objs: i = drgn.cast('int', znode.z_id) From 37627d4775cd81aeff95b8e4c7a110c63e8bb7a2 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Thu, 27 Jan 2022 08:48:55 -0500 Subject: [PATCH 36/39] Fixes to pass tests --- sdb/commands/linux/ps.py | 3 ++- sdb/commands/stacks.py | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/sdb/commands/linux/ps.py b/sdb/commands/linux/ps.py index 1aefb22b..3a56c966 100644 --- a/sdb/commands/linux/ps.py +++ b/sdb/commands/linux/ps.py @@ -63,7 +63,8 @@ class Ps(Threads): "task": lambda obj: hex(obj.value_()), "uid": - lambda obj: int(obj.real_cred.uid.val), + lambda obj: int( + sdb.create_object("struct cred *", obj.real_cred).uid.val), "pid": lambda obj: int(obj.pid), "time": diff --git a/sdb/commands/stacks.py b/sdb/commands/stacks.py index 61900bb3..046d8d6f 100644 --- a/sdb/commands/stacks.py +++ b/sdb/commands/stacks.py @@ -226,8 +226,11 @@ def resolve_state(tstate: str) -> str: def get_frame_pcs(task: drgn.Object) -> List[int]: frame_pcs = [] try: + prev_pc = None for frame in sdb.get_prog().stack_trace(task): - frame_pcs.append(frame.pc) + if frame.pc != prev_pc: + frame_pcs.append(frame.pc) + prev_pc = frame.pc except ValueError: # # Unwinding the stack of a running/runnable task will From a4c644e55c45e1cf78202732f2dc277fccb2e30c Mon Sep 17 00:00:00 2001 From: Tony Perkins Date: Wed, 16 Feb 2022 22:31:53 -0800 Subject: [PATCH 37/39] Enhance the sdb print command to allow a new parameter "-S" to not print the address of the field. Signed-off-by: Tony Perkins --- sdb/commands/print.py | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/sdb/commands/print.py b/sdb/commands/print.py index 91ccb6ae..087cb7a3 100644 --- a/sdb/commands/print.py +++ b/sdb/commands/print.py @@ -76,6 +76,10 @@ def _init_parser(cls, name: str) -> argparse.ArgumentParser: action="store_true", help=("don't symbolize and don't print type names," " member names in structs, nor indices in arrays")) + parser.add_argument("-S", + "--string", + action="store_true", + help="print as string with no address") return parser def _call_one(self, obj: drgn.Object) -> None: @@ -85,13 +89,19 @@ def _call_one(self, obj: drgn.Object) -> None: raw = True nosym = True - print( - obj.format_(dereference=self.args.dereference, - char=self.args.char, - symbolize=not nosym, - members_same_line=self.args.sameline, - type_name=not raw, - member_type_names=not raw, - element_type_names=not raw, - member_names=not self.args.RAW, - element_indices=not self.args.RAW)) + if self.args.string: + try: + outstr = obj.string_().decode("utf-8") + except drgn.FaultError: + outstr = "" + else: + outstr = obj.format_(dereference=self.args.dereference, + char=self.args.char, + symbolize=not nosym, + members_same_line=self.args.sameline, + type_name=not raw, + member_type_names=not raw, + element_type_names=not raw, + member_names=not self.args.RAW, + element_indices=not self.args.RAW) + print(outstr) From 7d0594f21714534f4cdefceb996c7ae8c4497583 Mon Sep 17 00:00:00 2001 From: root Date: Fri, 18 Feb 2022 20:45:05 +0000 Subject: [PATCH 38/39] Handle exception when gathering stacks Signed-off-by: Paul Zuchowski --- sdb/commands/stacks.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sdb/commands/stacks.py b/sdb/commands/stacks.py index 046d8d6f..dacec022 100644 --- a/sdb/commands/stacks.py +++ b/sdb/commands/stacks.py @@ -228,9 +228,13 @@ def get_frame_pcs(task: drgn.Object) -> List[int]: try: prev_pc = None for frame in sdb.get_prog().stack_trace(task): - if frame.pc != prev_pc: + try: + pc = frame.pc + except LookupError: + continue + if pc != prev_pc: frame_pcs.append(frame.pc) - prev_pc = frame.pc + prev_pc = pc except ValueError: # # Unwinding the stack of a running/runnable task will From 6f7dc003efd9d29579150c9611295a0bfc11a733 Mon Sep 17 00:00:00 2001 From: Paul Zuchowski Date: Wed, 16 Mar 2022 13:28:57 -0400 Subject: [PATCH 39/39] sdb should detect vmlinux version from crash dump Signed-off-by: Paul Zuchowski --- sdb/internal/cli.py | 106 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 89 insertions(+), 17 deletions(-) diff --git a/sdb/internal/cli.py b/sdb/internal/cli.py index 034e77a7..c6732ada 100644 --- a/sdb/internal/cli.py +++ b/sdb/internal/cli.py @@ -21,8 +21,9 @@ import argparse import os import sys +import string -from typing import List +from typing import Iterable, List import drgn import sdb @@ -117,22 +118,31 @@ def parse_arguments() -> argparse.Namespace: parser.error( "cannot specify an object file while also specifying --pid") - # - # We currently cannot handle object files without cores. - # - if args.object and not args.core: - parser.error("raw object file target is not supported yet") - return args -def load_debug_info(prog: drgn.Program, dpaths: List[str]) -> None: +def load_debug_info(prog: drgn.Program, + dpaths: List[str], + vml: str = "") -> None: """ Iterates over all the paths provided (`dpaths`) and attempts to load any debug information it finds. If the path provided is a directory, the whole directory is traversed in search of debug info. """ + if vml: + found = False + for target in ['/usr/lib/debug', '/root']: + vmlinux = [] + for root, _dirs, files in os.walk(target): + if vml in files: + found = True + vmlinux.append(os.sep.join([root, vml])) + print(f"sdb using {vmlinux} auto-detected from core file") + prog.load_debug_info(vmlinux) + break + if found: + break for path in dpaths: if os.path.isfile(path): prog.load_debug_info([path]) @@ -147,12 +157,74 @@ def load_debug_info(prog: drgn.Program, dpaths: List[str]) -> None: print("sdb: " + path + " is not a regular file or directory") +def strings(fname: str, minlen: int = 4, maxlen: int = 16384) -> Iterable[str]: + """ + Generate strings of at least minlen from the binary file. + """ + with open(fname, errors="ignore") as f: + result = "" + for c in f.read(maxlen): + if c in string.printable: + result += c + continue + if len(result) >= minlen: + yield result + result = "" + if len(result) >= minlen: # catch result at EOF + yield result + + +def detect_from_core(core: str) -> str: + """ + Parse through the core looking for OSRELEASE= + """ + match = "OSRELEASE" + line = "" + vm = "" + for s in strings(core, len(match), 16384): + if s.startswith(match): + line = s + break + if line: + split_list = line.split("\n") + if len(split_list) > 1: + line = split_list[0] + split_list = line.split("=") + if len(split_list) > 1: + vm = split_list[1] + return vm + + +def is_core(filename: str) -> bool: + """ + Parse beginning of the given file to see if it starts with 'KDUMP' + """ + match = "KDUMP" + for s in strings(filename, len(match), 64): + if s.startswith(match): + return True + return False + + +def fixup_args(args: argparse.Namespace) -> None: + """ + When only one of 'object' or 'core' is supplied, arg 'object' + could either be a vmlinux or core dump, so we have to sort + that out. + """ + if args.object and not args.core and is_core(args.object): + args.core = args.object + args.object = "" + + def setup_target(args: argparse.Namespace) -> drgn.Program: """ Based on the validated input from the command line, setup the drgn.Program for our target and its metadata. """ prog = drgn.Program() + vml = "" + fixup_args(args) if args.core: try: prog.set_core_dump(args.core) @@ -160,13 +232,13 @@ def setup_target(args: argparse.Namespace) -> drgn.Program: print(f"sdb: no such file: '{args.core}'") sys.exit(2) - # - # This is currently a short-coming of drgn. Whenever we - # open a crash/core dump we need to specify the vmlinux - # or userland binary using the non-default debug info - # load API. - # - args.symbol_search = [args.object] + args.symbol_search + # If vmlinux file (args.object) not supplied, try to find its + # name in the core dump + if not args.object: + kernel = detect_from_core(args.core) + vml = "vmlinux-" + kernel + else: + args.symbol_search = [args.object] + args.symbol_search elif args.pid: prog.set_pid(args.pid) else: @@ -186,12 +258,12 @@ def setup_target(args: argparse.Namespace) -> drgn.Program: # we quiet any errors when loading the *default debug info* # if we are looking at a crash/core dump. # - if not args.quiet and not args.object: + if not args.quiet and not args.core: print("sdb: " + str(debug_info_err), file=sys.stderr) if args.symbol_search: try: - load_debug_info(prog, args.symbol_search) + load_debug_info(prog, args.symbol_search, vml) except ( drgn.MissingDebugInfoError, OSError,