Project

General

Profile

Actions

Bug #13908

closed

disable kernel FPU by default until it is stable

Added by Joshua M. Clulow 5 months ago. Updated 5 months ago.

Status:
Closed
Priority:
High
Category:
kernel
Start date:
Due date:
% Done:

100%

Estimated time:
Difficulty:
Medium
Tags:
Gerrit CR:

Description

We have had a series of issues with the kernel FPU mechanism, the most recent of which is described in #13902. To allow more time for diagnostics, we should surgically disable the use of mechanism within ZFS. We'll leave a tunable that users may set in /etc/system if they wish to enable the mechanism at their own risk; e.g., for debugging purposes.


Related issues

Related to illumos gate - Bug #13717: kernel fpu use can still lead to panicClosed

Actions
Related to illumos gate - Feature #12478: installctx needs kpreempt_disable protectionClosedPatrick Mooney

Actions
Related to illumos gate - Bug #13902: Fix for 13717 may break 8-disk raidz2ClosedDan McDonald

Actions
Actions #1

Updated by Joshua M. Clulow 5 months ago

  • Subject changed from disable kernel by default FPU until it is stable to disable kernel FPU by default until it is stable
Actions #2

Updated by Joshua M. Clulow 5 months ago

  • Related to Bug #13717: kernel fpu use can still lead to panic added
Actions #3

Updated by Joshua M. Clulow 5 months ago

  • Related to Feature #12478: installctx needs kpreempt_disable protection added
Actions #4

Updated by Joshua M. Clulow 5 months ago

  • Related to Bug #13902: Fix for 13717 may break 8-disk raidz2 added
Actions #5

Updated by Electric Monk 5 months ago

  • Gerrit CR set to 1573
Actions #6

Updated by Joshua M. Clulow 5 months ago

Testing Notes

I built the patch and installed with onu and confirmed that we were using the non-FPU versions of the raidz routines.

Before Change

$ pfexec mdb -ke 'zfs_vdev_raidz_impl/X; vdev_raidz_fastest_impl::print'
zfs_vdev_raidz_impl:
zfs_vdev_raidz_impl:            ffffffff
{
    init = 0
    fini = 0
    gen = [ avx2_gen_p, avx2_gen_pq, avx2_gen_pqr ]
    rec = [ avx2_rec_p, avx2_rec_q, avx2_rec_r, avx2_rec_pq, avx2_rec_pr, avx2_rec_qr, avx2_rec_pqr ]
    is_supported = 0
    name = [ "fastest" ]
}

After Change

$ pfexec mdb -ke 'zfs_vdev_raidz_impl/X; vdev_raidz_fastest_impl::print'
zfs_vdev_raidz_impl:
zfs_vdev_raidz_impl:            ffffffff
{
    init = 0
    fini = 0
    gen = [ scalar_gen_p, scalar_gen_pq, scalar_gen_pqr ]
    rec = [ scalar_rec_p, scalar_rec_q, scalar_rec_r, scalar_rec_pq, scalar_rec_pr, scalar_rec_qr, scalar_rec_pqr ]
    is_supported = 0
    name = [ "fastest" ]
}

Tunable

I confirmed that ...

# echo 'set zfs:zfs_fpu_enabled = 1' > /etc/system.d/enable_fpu
# reboot

... is enough to re-enable the AVX routines on this system.

Actions #7

Updated by Electric Monk 5 months ago

  • Status changed from New to Closed
  • % Done changed from 0 to 100

git commit fd440315ab0e76440256b0b1ca08098f64bc7832

commit  fd440315ab0e76440256b0b1ca08098f64bc7832
Author: Joshua M. Clulow <josh@sysmgr.org>
Date:   2021-06-26T04:45:53.000Z

    13908 disable kernel FPU by default until it is stable
    Reviewed by: Jason King <jason.brian.king@gmail.com>
    Reviewed by: Patrick Mooney <pmooney@pfmooney.com>
    Approved by: Dan McDonald <danmcd@joyent.com>

Actions

Also available in: Atom PDF