History log of /dragonfly/sbin/hammer2/cmd_info.c (Results 1 – 22 of 22)
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
Revision tags: v6.2.1, v6.2.0, v6.3.0, v6.0.1
# bc092eef 09-Aug-2021 Tomohiro Kusumi <tkusumi@netbsd.org>

sbin/hammer2: Silence -Waddress-of-packed-member warnings

Not a problem on x86_64, but silence warnings caused by callers
passing address of packed (possibly unaligned) struct fields.


Revision tags: v6.0.0, v6.0.0rc1, v6.1.0
# 0b738157 25-Dec-2020 Tomohiro Kusumi <tkusumi@netbsd.org>

sys/vfs/hammer2: Add initial multi-volumes support for HAMMER2

This commit adds initial multi-volumes support for HAMMER2. Maximum
supported volumes is 64. The feature and implementation is similar

sys/vfs/hammer2: Add initial multi-volumes support for HAMMER2

This commit adds initial multi-volumes support for HAMMER2. Maximum
supported volumes is 64. The feature and implementation is similar to
multi-volumes support in HAMMER1.

1. ondisk changes
=================
This commit bumps volume header version from 1 to 2, and adds four new
volume header fields using reserved fields in version 1. Other ondisk
structures are unchanged.
* "volu_id" - volume id from 0 to 63, where 0 represents root volume.
* "nvolumes" - number of volumes. All volumes have same the same value.
* "total_size" - sum of "volu_size" in volumes. All volumes have the
same value.
* "volu_loff[HAMMER2_MAX_VOLUMES]" - A 512 bytes table which contains
start offset of max 64 volumes within "total_size". All volumes have
the same value.

Version 1 volume header has 0 for above fields, so HAMMER2 internally
treats "nvolumes" as 1, and "total_size" as "volu_size" to be able to
handle version 1 and 2 transparently.

All volumes have 4 headers, but only root volume ones are relevant.
Non-root volume headers have their own unique "volu_id" and "volu_size",
but other fields are unimportant and never used. Non-root volume headers
have sroot blockset[i] whose type is HAMMER2_BREF_TYPE_INVALID. Non-root
volume headers don't have boot/aux area, so freemap area start from
offset 0. Non-root volume headers are readonly and never updated after
creation. This means non-root volumes are just extra storage to extend
fs size and internally make up a single virtual volume whose size is
"total_size".

It currently doesn't automatically upgrade an existing version 1 fs to
version 2. Only newly created fs becomes version 2 for now.

2. volumes layout
=================
Basically similar to HAMMER1. A first block device argument provided for
newfs_hammer2(8) becomes the root volume, and if specified remaining
devices extend "total_size" as non-root volumes. All volumes except for
the last one have 1GiB (freemap level1) aligned "volu_size".

This means each volume's start offset within "total_size" is also 1GiB
(freemap level1) aligned. The start offsets of volumes are stored in
volu_loff[HAMMER2_MAX_VOLUMES]. Each volu_loff[n] (0 <= n < nvolumes)
represents start offset of volume n within "total_size". Unused volumes
have -1 for volu_loff[n].
e.g. If a fs consists of 1 volume, volu_loff[0] has 0 and rests have -1.
e.g. If a fs consists of 3 volumes, x GiB root volume, y GiB volume,
and z GiB volume, volu_loff[0] has 0, volu_loff[1] has x, volu_loff[2]
has x+y, and rests have -1.

Low level I/O function in HAMMER2 uses this linear offsets table to
determine a device vnode to use and relative offset within the device
vnode, for a given blockref's "data_off". This is different from HAMMER1
where logical offset had embedded volume id bits (i.e. there were holes
in logical address space). HAMMER2 needs this table to support multi-
volumes without changing current logical offset mechanism.

Unless all volumes are specified and mountable, mount_hammer2(8) fails
like it failed in HAMMER1. This also applies to other userspace commands
which require volumes specification, except for fstyp(8).

3. userspace commands
=====================
Basically same as or similar to HAMMER1.
* newfs_hammer2(8) takes a list of block device paths as argv[].
* mount_hammer2(8) takes block device paths or names in "a:b:c:..."
format.
* hammer2(8) takes block device paths or names in "a:b:c:..." format for
directives which require volumes specification. This commit also adds
"volume-list" directive and an ioctl command HAMMER2IOC_VOLUME_LIST,
which are similar to the one in HAMMER1.
* fsck_hammer2(8) takes device paths or names in "a:b:c:..." format.
* fstyp(8) takes device paths in "path1:path2:path3:..." format.

4. limitations
==============
* hammer2(8) "info" directive ignores multi-volumes block devices.
* hammer2(8) "growfs" directive doesn't support multi-volumes fs.
* fstyp(8) is unable to find PFS label via -l option if the PFS inode or
its parent indirect blocks are located beyond root volume.
* hammer2(8) doesn't support "volume-add" and "volume-del" directives
which existed in HAMMER1, and there is currently no plan to support.

show more ...


# 856d0d8f 25-Oct-2020 Tomohiro Kusumi <tkusumi@netbsd.org>

sbin/hammer2: Fix hammer2_pfssubtype_to_str() retval for NONE

cac06d4ec621562239475e76988ab16c661f3430 initially added this
based on cmd_pfs_list() implementation, but change it to return
"NONE" for

sbin/hammer2: Fix hammer2_pfssubtype_to_str() retval for NONE

cac06d4ec621562239475e76988ab16c661f3430 initially added this
based on cmd_pfs_list() implementation, but change it to return
"NONE" for HAMMER2_PFSSUBTYPE_NONE so that this function makes
sense in other contexts.

show more ...


# 197ecc9f 22-Oct-2020 Tomohiro Kusumi <tkusumi@netbsd.org>

sbin/hammer2: Don't use 1 byte size for 0 radix bits

Same as 893aa36e0111c1418f260bd8d1092b7f22ea010e for userspace code.


# 929eef7a 07-Oct-2020 Tomohiro Kusumi <tkusumi@netbsd.org>

sbin/hammer2: "Labels" -> "Label"


# bb056a04 06-Oct-2020 Tomohiro Kusumi <tkusumi@netbsd.org>

sbin/hammer2: Sync "info" output with "pfs-list"

These two retrieve the same info in different ways,
so show the same info instead of "info" just printing PFS label.


# 6306b8a7 06-Oct-2020 Tomohiro Kusumi <tkusumi@netbsd.org>

sbin/hammer2: Change "info" callback to take const void*


# 844bb840 06-Oct-2020 Tomohiro Kusumi <tkusumi@netbsd.org>

sbin/hammer2: Cleanup "info" with cmd_callback typedef


Revision tags: v5.8.3, v5.8.2
# 5dade8cf 27-Aug-2020 Tomohiro Kusumi <tkusumi@netbsd.org>

sys/vfs/hammer2: Remove HAMMER2_MINIO* macros

HAMMER2_MINIO* were added in 1a7cfe5ae3c897f704a358fd3e556a55e430dcb1
in 2013 to switch HAMMER2_MINIO* values with ifdefs when ondisk format
wasn't stab

sys/vfs/hammer2: Remove HAMMER2_MINIO* macros

HAMMER2_MINIO* were added in 1a7cfe5ae3c897f704a358fd3e556a55e430dcb1
in 2013 to switch HAMMER2_MINIO* values with ifdefs when ondisk format
wasn't stable.

This is no longer needed, and using both HAMMER2_MINIO* and HAMMER2_LBUF*
should be avoided. Users of HAMMER2_MINIO* exist in several userspace
programs which walk through blockrefs from top to bottom.

show more ...


# 57c591a1 11-Aug-2020 Tomohiro Kusumi <tkusumi@netbsd.org>

sbin/hammer2: Cleanup "info"

Only volume, inode, indirect blockref (out of 9 types) needed for this.


# 9317c2d0 23-Jul-2020 Sascha Wildner <saw@online.de>

Fix some cases where %zd was used wrongly across the tree.


Revision tags: v5.8.1, v5.8.0, v5.9.0, v5.8.0rc1, v5.6.3
# 1bb6d1be 03-Nov-2019 Tomohiro Kusumi <kusumi.tomohiro@gmail.com>

sbin/hammer2: Add /dev/ad* and /dev/vn* to "info"/"mountall" targets


# 54d6baca 01-Nov-2019 Tomohiro Kusumi <kusumi.tomohiro@gmail.com>

sbin/hammer2: Test /dev/mampper for "info"/"mountall" targets

Try dirents under /dev/mapper in addition to /dev/serno.
Also ignore ".", ".." for both serno/dm, and "control" for dm.


# 047d51c8 19-Sep-2019 Tomohiro Kusumi <kusumi.tomohiro@gmail.com>

sbin/hammer2: Use SEEK_SET


# c127c292 19-Aug-2019 Tomohiro Kusumi <kusumi.tomohiro@gmail.com>

sbin/hammer2: Fix remaining type warnings on Linux distros

Bring in local changes existed in https://github.com/kusumi/lh1.
These ondisk fields are not of char*.


# 75ebdeb9 11-Aug-2019 Tomohiro Kusumi <kusumi.tomohiro@gmail.com>

sbin/hammer2: Don't test uuid on "info"/"mountall" if uuid is 0

Don't terminate if HAMMER2 device/partition has 0 uuid.


# 35f1c4bf 11-Aug-2019 Tomohiro Kusumi <kusumi.tomohiro@gmail.com>

sbin/hammer2: Remove unnecessary { ... } scope


Revision tags: v5.6.2
# 95d182da 22-Jul-2019 Tomohiro Kusumi <kusumi.tomohiro@gmail.com>

sbin/hammer2: Minor fix


Revision tags: v5.6.1, v5.6.0, v5.6.0rc1, v5.7.0, v5.4.3, v5.4.2, v5.4.1
# 35b31ee4 18-Dec-2018 Matthew Dillon <dillon@apollo.backplane.com>

hammer2 - Cleanup 'info' command

* hammer2 info validates the partition info, but assumed that
the filesystem would be a disklabel. Add code to validate
against GPT slices too by checking the f

hammer2 - Cleanup 'info' command

* hammer2 info validates the partition info, but assumed that
the filesystem would be a disklabel. Add code to validate
against GPT slices too by checking the filesystem uuid.

Reported-by: ftigeot

show more ...


Revision tags: v5.4.0, v5.5.0, v5.4.0rc1, v5.2.2, v5.2.1, v5.2.0, v5.3.0, v5.2.0rc, v5.0.2, v5.0.1, v5.0.0, v5.0.0rc2, v5.1.0, v5.0.0rc1, v4.8.1, v4.8.0, v4.6.2, v4.9.0, v4.8.0rc, v4.6.1, v4.6.0, v4.6.0rc2, v4.6.0rc, v4.7.0
# 66056193 10-Jun-2016 Tomohiro Kusumi <kusumi.tomohiro@gmail.com>

sbin/hammer2: Use volatile sig_atomic_t


# 7d565a4f 08-Jun-2016 Matthew Dillon <dillon@apollo.backplane.com>

hammer2 - Add xxhash to H2 and throw in debug stuff for performance testing.

* Add the xxhash. This is a high-speed non-cryptographic hash code
algorithm. Sam pointed me at the site, the code is

hammer2 - Add xxhash to H2 and throw in debug stuff for performance testing.

* Add the xxhash. This is a high-speed non-cryptographic hash code
algorithm. Sam pointed me at the site, the code is available on
github and is BSD licensed:

git://github.com/Cyan4973/xxHash.git

This hash has good distribution and is very fast.

* Change HAMMER2 to default to using xxhash64 instead of iscsi_crc32().
xxhash can process data at several GBytes/sec where as even the
multi-table iscsi_crc32() can only do around 500 MBytes/sec, which
is too slow for today's modern storage subsystems (NVME can nominally
do 1.5-2.5 GBytes/sec, and high-end cards can do 5GBytes/sec).

* There are four major paths that eat tons of CPU in H2:

- The XIO path does a ton of allocation/deallocation and synchronous
messaging. This has not yet been fixed.

- The check code (when it was iscsi_crc32()) slowed everything down.
This is fixed, the default check code is now xxhash64.

- The check code was being called over and over again for the same cached
buffer due to the hammer2_chain_t structure being thrown away.

Currently a hack involving a mask stored in the underlying DIO is being
used to indicate that the check code was previously valid. This is
strictly temporary. The actual mask will have to be stored in the
device buffer cache buffer and a second one in the chain structure.

The chain structure must be made persistent as well (not yet done).

- The DEDUP code was also calling iscsi_crc32() redundantly (at least for
reads).

The read path has been fixed. The write path is doable but requires more
coding (not yet fixed).

- The logical file cluster_read() in the kernel was not doing any read-ahead
due to H2 not implementing BMAP, creating long synchronous latencies.

The kernel code for cluster_read() and cluster_readcb() has been fixed
to do read-ahead whether a logical BMAP is implemented or not. H2 will
now pipeline reads.

Suggested-by: Samuel J. Greear <sjg@thesjg.com> (xxhash)

show more ...


Revision tags: v4.4.3, v4.4.2, v4.4.1, v4.4.0, v4.5.0, v4.4.0rc
# b92bfd39 18-Nov-2015 Matthew Dillon <dillon@apollo.backplane.com>

hammer2 - Add 'info' and 'mountall' directives

* hammer2 info - scans all block devices with hammer2 partitions and
displays available super-root entries.

* hammer2 mountall - scans all block dev

hammer2 - Add 'info' and 'mountall' directives

* hammer2 info - scans all block devices with hammer2 partitions and
displays available super-root entries.

* hammer2 mountall - scans all block devices with hammer2 partitions
and mounts their @LOCAL PFS in /var/hammer2/LOCAL.serno.s%d%c
in the background, waiting until the mounts complete or 15 seconds
without a status change.

The idea here is to bring all local block devices online, allowing
all PFS's related to the H2 block devices to become active (mounting
one makes them all available), but still giving the system operator
the ability to idle a block device for maintenance by dismounting
all of its actively-mounted PFSs.

A bit confusing, the feature will be ironed out later.

show more ...