Inconsistent SMB performance after moving from CORE to SCALE

What would that achieve? Scanning the unencrypted share seemed to happen at normal speed.
I also have the smb shares of another PC with ~1.5M files (~160TB) indexed by Everything. Scanning that in its entirety takes less than 30min, however that’s a Windows host. I know this because the host was offline when Everything rescanned all folders and shares after my test earlier today. Since that host was offline at the time, the entries were missing from my DB and I manually started a full scan of those shares when the host was online again. The issue isn’t Everything or SMB on my client(s).

This is the total of what I have indexed:
indexed

It’s in my initial post.
tank = 10x 24TB Seagate Z2 (encrypted)
tank1 = 8x 18TB Toshiba Z2 (encrypted)
tank2 = 8x 12TB WD Z2 (unencrypted)

To eliminate as many variables as possible.


That’s not what that would test. The clients are fine. I’m curious if the total number of files that Everything or MusicBee needs to scan might also factor into the slowdown. If scanning the same number of files on an unencrypted or encrypted dataset results with the same slowdown, then it might narrow this issue down to encrypted dataset + directory crawling over SMB.

It might influence just how bad the slowdown is. I repeated the test with a much smaller share (90k files, 740GB mainly jpg + raw image files).

Test 1:

  1. Copy 33GB test movie from m2 ssd to unencrypted smb share on tank2
  2. Let Everything rescan only the encrypted image share on tank1.

The transfer starts out at 740MByte/s. Upon starting the scan, the transfer halts and then resumes at ~60Mbyte/s. So while there is hanging and a >12x slowdown, it’s not as bad as when I scan the music (>50x slowdown).

GIF:
testmovie to unencrypted, scan encrypted pictures

Looking at the load of the 10GBit NIC on my PC during that transfer while the scan is active it seems to only send bursts of data between windows of inactivity.

While the same transfer without anything scanning/traversing looks like this:

To note is that the image share has different permissions than the music share that I used for previous tests.

Only 1 user and 1 group instead of 1 user and 3 groups. This might also contribute to the different level of slowdown if it’s ACL related.

Since it’s now confirmed that the problem already arises with a much smaller dataset and even with the most simple ACL (1 user 1 group), I can perform further tests.

I replicated the images dataset from tank1 (encrypted) to tank2 (unencrypted), using these settings:

Replication speed:
grafik

This resulted in a locked encrypted dataset on tank2. After unlocking it with the passphrase, I set up a new SMB share of that dataset on tank2 with identical settings (default share parameters).

Then I repeated Test 1, but this time instead of scanning the encrypted images share on tank1 in Everything, I scanned the replicated version on tank2.
GIF:
testmovie to unencrypted, scan encrypted pictures on same pool

This continued to copy for a few seconds until it also started to hang and slowed down to next to nothing.

Result:
Replicated encrypted dataset on unencrypted pool tank2 yields similar performance issues as the original on encrypted pool tank1.

Now to the final test.
I created a fresh dataset on tank2, manually set the dataset properties and ACLs like they are on the image dataset on tank1 and copied the entire contents of the images dataset to it via rsync with these parameters:

rsync --stats --progress -A -a -r -v --no-perms

Which took a while.

Number of files: 90,340 (reg: 89,775, dir: 565)
Number of created files: 90,340 (reg: 89,775, dir: 565)
Number of deleted files: 0
Number of regular files transferred: 89,775
Total file size: 773,994,294,047 bytes
Total transferred file size: 773,994,294,047 bytes
Literal data: 773,994,294,047 bytes
Matched data: 0 bytes
File list size: 3,866,449
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 774,189,012,033
Total bytes received: 1,709,961

sent 774,189,012,033 bytes  received 1,709,961 bytes  302,123,208.58 bytes/sec
total size is 773,994,294,047  speedup is 1.00

Then I set up a default smb share for this new unencrypted image dataset. First I used SyncBack Free to verify that both SMB shares hold the same files, which they do.

Final test:

  1. Copy testmovie to unencrypted share on tank2
  2. Let Everything scan unencrypted image share on tank2

GIF:
testmovie to unencrypted, scan unencrypted pictures on same pool

At 10% progress I kicked off the Everything scan. While it slowed down the transfer marginally (800MByte/s to 740MByte/s), Everything actually finished scanning the share within the minute this test covers (around the 60% mark) and there was no hanging.

The ACLs are identical, the SMB settings are identical. The dataset properties are identical. The files are identical.
The ONLY difference is that the dataset on tank1 is encrypted while the dataset on tank2 is not.

Conclusion:
This proves that the performance (at least for traversing/scanning) of encrypted SMB shares is fudged (at least on my system).

This cost me another day of my time but at least now I have the culprit. What to do next tho?

2 Likes

As an update for anyone else who might experience the broken SMB performance on encrypted datasets in SCALE 25.04.2.4:

I mounted the most problematic SMB share via NFS instead:
MusicBee scan time via SMB: 5 hours, massive hanging
MusicBee scan time via NFS: 4 minutes, negligible impact

Everything indexing via SMB: 4+ hours, massive hanging
Everything indexing via NFS: 1min, negligible impact

While it’s quite annoying to do, I guess I’ll have to redo all my SMB shares as NFS shares and reconfigure the clients until this issue is fixed on the TrueNAS side.

If you’re in the same boat as me and want to (or are forced to) mount NFS shares on Windows, here are the resources I used:
Mount NFS shares on Windows, activate Unicode support (Beta), auto-mount on startup

2 Likes

That’s a shame you had to resort to that. :frowning_face:

Hello All

I plan to upgrade from core to scale and as I read this thread I wonder if it’s a good idea.
I already got issues with core and smb share with mac clients (SMBD process goes 100% and copy speed collapse, ARC request demand metadata issue ? | TrueNAS Community)
All my shares were unencrypted but still, navigating through large item counts folder can crawl the server (smbd process goes 100% as ARC request demand metadata surge to very high level) files are mainly wav, bwf, aaf, and protools session files.
We’ve worked already by this time with @awalkerix to find workarounds that were fine enough for our setup.

Any idea ? have this issues been corrected with last versions of scale ?

thanks for your time :slight_smile:

Might not be the (sole) culprit after all. The system has been online long enough to start the monthly scrub now.


tank2 = 8x 12TB WD, Z2, unencrypted, created on CORE
tank1 = 8x 18TB Toshiba, Z2, encrypted, created on CORE
tank = 10x 24TB Seagate, Z2, encrypted, created on SCALE

All 3 scrubs started at the same time at midnight on the 15th.
Here’s the load on one drive from pool tank (24TB Seagate) and one from pool tank1 (18TB Toshiba).


And this one is from today. The scrubs of tank and tank2 are already finished while tank1 is only at 26%.

The scrub on tank1 crawls along at 16-20MB/s read per drive, interrupted by 15 minute bursts of 190MB/s read per drive. Is there anything that could explain this weird scrubbing behavior? This pool was created on CORE 13.0 below U5.1 (don’t recall which version exactly) as ZFS encrypted. At first it held 2 unencrypted datasets (result of replicating from geli encrypted pool without turning on encryption) and was the reason I did not update the NAS (got an UI warning about unencrypted datasets in an encrypted root).
However before upgrading to SCALE I replicated those problematic datasets to tank and destroyed them on tank1.

Then I re-filled tank1 by replicating different datasets from a geli encrypted pool to it with encryption enabled in the replication task as well as replicating some datasets from another unencrypted pool onto it.

Correct me if this assumption is stupid, but could having used encryption in the replication task on already encrypted data (from a geli pool) made it hard for the NAS to access this data itself? That might explain why access on the majority of data is so insanely slow. And the bursts of normal speed would be from reading the datasets that were replicated onto it from an unencrypted source (or unused space). It’s 78,6% filled.
36TB came from unencrypted datasets on unencrypted pools, 35,5TB from a geli encrypted pool.


When this scrub eventually finishes I could try copying the content of the datasets that originated on the geli pool to another pool via rsync instead of using replication tasks (one dataset at a time I should have enough free space to do this), re-create the source dataset on tank1 and then copy it back to see if this resolves the issues. Thoughts?

This may be a fragmentation issue rather than an encryption issue.


At 1% highly unlikely I’d say.

The weird scrub finished without errors but took way too long (more than twice as long as on CORE).

I’ve run this test. Since I had already copied the image dataset contents to tank2 via rsync, I created a new dataset on tank1 with the same settings as the original, problematic dataset (also on tank1). Then I used rsync to copy the images back from tank2 to the new dataset on tank1.

Number of files: 90,340 (reg: 89,775, dir: 565)
Number of created files: 90,340 (reg: 89,775, dir: 565)
Number of deleted files: 0
Number of regular files transferred: 89,775
Total file size: 773,994,294,047 bytes
Total transferred file size: 773,994,294,047 bytes
Literal data: 773,994,294,047 bytes
Matched data: 0 bytes
File list size: 3,866,459
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 774,189,010,648
Total bytes received: 1,709,973

sent 774,189,010,648 bytes  received 1,709,973 bytes  206,919,877.22 bytes/sec
total size is 773,994,294,047  speedup is 1.00

Afterwards, I once again created a default smb share for this new dataset.

The performance is great. I can freely traverse the share and even big folders with 5000+ images load close to instantly.
Comparing it directly to the performance of the original dataset via smb is a night and day difference.

Do you want me to perform any tests to narrow down what the issue is and if it can be resolved by other means than copying the data away and then back?
If not I’ll go ahead and move the problematic datasets to another pool and back one by one to be (hopefully) rid of this issue. After which I’ll run a scrub of tank1 to see if the weird scrub performance can also be fixed by doing this.

1 Like

Posting the output of zfs get all tank1 (and related datasets) probably wouldn’t hurt.

There you go.
tank1:

NAME   PROPERTY                VALUE                   SOURCE
tank1  type                    filesystem              -
tank1  creation                Mon Feb 20  6:24 2023   -
tank1  used                    73.7T                   -
tank1  available               19.2T                   -
tank1  referenced              751K                    -
tank1  compressratio           1.00x                   -
tank1  mounted                 yes                     -
tank1  quota                   none                    default
tank1  reservation             none                    default
tank1  recordsize              128K                    default
tank1  mountpoint              /mnt/tank1              default
tank1  sharenfs                off                     default
tank1  checksum                on                      default
tank1  compression             lz4                     local
tank1  atime                   off                     local
tank1  devices                 on                      default
tank1  exec                    on                      default
tank1  setuid                  on                      default
tank1  readonly                off                     default
tank1  zoned                   off                     default
tank1  snapdir                 hidden                  default
tank1  aclmode                 passthrough             local
tank1  aclinherit              passthrough             local
tank1  createtxg               1                       -
tank1  canmount                on                      default
tank1  xattr                   on                      default
tank1  copies                  1                       default
tank1  version                 5                       -
tank1  utf8only                off                     -
tank1  normalization           none                    -
tank1  casesensitivity         sensitive               -
tank1  vscan                   off                     default
tank1  nbmand                  off                     default
tank1  sharesmb                off                     default
tank1  refquota                none                    default
tank1  refreservation          none                    default
tank1  guid                    10374267002903932705    -
tank1  primarycache            all                     default
tank1  secondarycache          all                     default
tank1  usedbysnapshots         0B                      -
tank1  usedbydataset           751K                    -
tank1  usedbychildren          73.7T                   -
tank1  usedbyrefreservation    0B                      -
tank1  logbias                 latency                 default
tank1  objsetid                54                      -
tank1  dedup                   off                     default
tank1  mlslabel                none                    default
tank1  sync                    standard                default
tank1  dnodesize               legacy                  default
tank1  refcompressratio        1.00x                   -
tank1  written                 751K                    -
tank1  logicalused             73.9T                   -
tank1  logicalreferenced       172K                    -
tank1  volmode                 default                 default
tank1  filesystem_limit        none                    default
tank1  snapshot_limit          none                    default
tank1  filesystem_count        none                    default
tank1  snapshot_count          none                    default
tank1  snapdev                 hidden                  default
tank1  acltype                 nfsv4                   default
tank1  context                 none                    default
tank1  fscontext               none                    default
tank1  defcontext              none                    default
tank1  rootcontext             none                    default
tank1  relatime                on                      default
tank1  redundant_metadata      all                     default
tank1  overlay                 on                      default
tank1  encryption              aes-256-gcm             -
tank1  keylocation             prompt                  local
tank1  keyformat               passphrase              -
tank1  pbkdf2iters             350000                  -
tank1  encryptionroot          tank1                   -
tank1  keystatus               available               -
tank1  special_small_blocks    0                       default
tank1  prefetch                all                     default
tank1  direct                  standard                default
tank1  longname                off                     default
tank1  org.freebsd.ioc:active  no                      local

Problematic dataset:

NAME               PROPERTY                 VALUE                     SOURCE
tank1/REDACTED/Fotos  type                     filesystem                -
tank1/REDACTED/Fotos  creation                 Fri Sep  5 14:39 2025     -
tank1/REDACTED/Fotos  used                     711G                      -
tank1/REDACTED/Fotos  available                19.2T                     -
tank1/REDACTED/Fotos  referenced               711G                      -
tank1/REDACTED/Fotos  compressratio            1.02x                     -
tank1/REDACTED/Fotos  mounted                  yes                       -
tank1/REDACTED/Fotos  quota                    none                      default
tank1/REDACTED/Fotos  reservation              none                      default
tank1/REDACTED/Fotos  recordsize               128K                      default
tank1/REDACTED/Fotos  mountpoint               /mnt/tank1/REDACTED/Fotos    default
tank1/REDACTED/Fotos  sharenfs                 off                       default
tank1/REDACTED/Fotos  checksum                 on                        default
tank1/REDACTED/Fotos  compression              lz4                       inherited from tank1
tank1/REDACTED/Fotos  atime                    off                       inherited from tank1
tank1/REDACTED/Fotos  devices                  on                        default
tank1/REDACTED/Fotos  exec                     on                        default
tank1/REDACTED/Fotos  setuid                   on                        default
tank1/REDACTED/Fotos  readonly                 off                       default
tank1/REDACTED/Fotos  zoned                    off                       default
tank1/REDACTED/Fotos  snapdir                  hidden                    inherited from tank1/REDACTED
tank1/REDACTED/Fotos  aclmode                  restricted                received
tank1/REDACTED/Fotos  aclinherit               passthrough               inherited from tank1
tank1/REDACTED/Fotos  createtxg                15893973                  -
tank1/REDACTED/Fotos  canmount                 on                        default
tank1/REDACTED/Fotos  xattr                    on                        inherited from tank1/REDACTED
tank1/REDACTED/Fotos  copies                   1                         inherited from tank1/REDACTED
tank1/REDACTED/Fotos  version                  5                         -
tank1/REDACTED/Fotos  utf8only                 off                       -
tank1/REDACTED/Fotos  normalization            none                      -
tank1/REDACTED/Fotos  casesensitivity          sensitive                 -
tank1/REDACTED/Fotos  vscan                    off                       default
tank1/REDACTED/Fotos  nbmand                   off                       default
tank1/REDACTED/Fotos  sharesmb                 off                       default
tank1/REDACTED/Fotos  refquota                 none                      default
tank1/REDACTED/Fotos  refreservation           none                      default
tank1/REDACTED/Fotos  guid                     1185688572228081118       -
tank1/REDACTED/Fotos  primarycache             all                       default
tank1/REDACTED/Fotos  secondarycache           all                       default
tank1/REDACTED/Fotos  usedbysnapshots          0B                        -
tank1/REDACTED/Fotos  usedbydataset            711G                      -
tank1/REDACTED/Fotos  usedbychildren           0B                        -
tank1/REDACTED/Fotos  usedbyrefreservation     0B                        -
tank1/REDACTED/Fotos  logbias                  latency                   default
tank1/REDACTED/Fotos  objsetid                 49005                     -
tank1/REDACTED/Fotos  dedup                    off                       default
tank1/REDACTED/Fotos  mlslabel                 none                      default
tank1/REDACTED/Fotos  sync                     standard                  default
tank1/REDACTED/Fotos  dnodesize                legacy                    default
tank1/REDACTED/Fotos  refcompressratio         1.02x                     -
tank1/REDACTED/Fotos  written                  0                         -
tank1/REDACTED/Fotos  logicalused              726G                      -
tank1/REDACTED/Fotos  logicalreferenced        726G                      -
tank1/REDACTED/Fotos  volmode                  default                   default
tank1/REDACTED/Fotos  filesystem_limit         none                      default
tank1/REDACTED/Fotos  snapshot_limit           none                      default
tank1/REDACTED/Fotos  filesystem_count         none                      default
tank1/REDACTED/Fotos  snapshot_count           none                      default
tank1/REDACTED/Fotos  snapdev                  hidden                    default
tank1/REDACTED/Fotos  acltype                  nfsv4                     default
tank1/REDACTED/Fotos  context                  none                      default
tank1/REDACTED/Fotos  fscontext                none                      default
tank1/REDACTED/Fotos  defcontext               none                      default
tank1/REDACTED/Fotos  rootcontext              none                      default
tank1/REDACTED/Fotos  relatime                 on                        default
tank1/REDACTED/Fotos  redundant_metadata       all                       default
tank1/REDACTED/Fotos  overlay                  on                        default
tank1/REDACTED/Fotos  encryption               aes-256-gcm               -
tank1/REDACTED/Fotos  keylocation              none                      default
tank1/REDACTED/Fotos  keyformat                passphrase                -
tank1/REDACTED/Fotos  pbkdf2iters              350000                    -
tank1/REDACTED/Fotos  encryptionroot           tank1                     -
tank1/REDACTED/Fotos  keystatus                available                 -
tank1/REDACTED/Fotos  special_small_blocks     0                         default
tank1/REDACTED/Fotos  snapshots_changed        Fri Oct 17 16:00:02 2025  -
tank1/REDACTED/Fotos  prefetch                 all                       default
tank1/REDACTED/Fotos  direct                   standard                  default
tank1/REDACTED/Fotos  longname                 off                       default
tank1/REDACTED/Fotos  org.freenas:description                            received
tank1/REDACTED/Fotos  org.truenas:managedby    192.168.1.5               inherited from tank1/REDACTED
tank1/REDACTED/Fotos  org.freebsd.ioc:active   no                        inherited from tank1

New dataset without issues:

NAME                    PROPERTY                 VALUE                        SOURCE
tank1/REDACTED/Fotos_test  type                     filesystem                   -
tank1/REDACTED/Fotos_test  creation                 Fri Oct 17 15:59 2025        -
tank1/REDACTED/Fotos_test  used                     708G                         -
tank1/REDACTED/Fotos_test  available                19.2T                        -
tank1/REDACTED/Fotos_test  referenced               708G                         -
tank1/REDACTED/Fotos_test  compressratio            1.02x                        -
tank1/REDACTED/Fotos_test  mounted                  yes                          -
tank1/REDACTED/Fotos_test  quota                    none                         default
tank1/REDACTED/Fotos_test  reservation              none                         default
tank1/REDACTED/Fotos_test  recordsize               128K                         default
tank1/REDACTED/Fotos_test  mountpoint               /mnt/tank1/REDACTED/Fotos_test  default
tank1/REDACTED/Fotos_test  sharenfs                 off                          default
tank1/REDACTED/Fotos_test  checksum                 on                           default
tank1/REDACTED/Fotos_test  compression              lz4                          inherited from tank1
tank1/REDACTED/Fotos_test  atime                    off                          local
tank1/REDACTED/Fotos_test  devices                  on                           default
tank1/REDACTED/Fotos_test  exec                     on                           default
tank1/REDACTED/Fotos_test  setuid                   on                           default
tank1/REDACTED/Fotos_test  readonly                 off                          default
tank1/REDACTED/Fotos_test  zoned                    off                          default
tank1/REDACTED/Fotos_test  snapdir                  hidden                       inherited from tank1/REDACTED
tank1/REDACTED/Fotos_test  aclmode                  passthrough                  local
tank1/REDACTED/Fotos_test  aclinherit               passthrough                  local
tank1/REDACTED/Fotos_test  createtxg                16604776                     -
tank1/REDACTED/Fotos_test  canmount                 on                           default
tank1/REDACTED/Fotos_test  xattr                    on                           local
tank1/REDACTED/Fotos_test  copies                   1                            local
tank1/REDACTED/Fotos_test  version                  5                            -
tank1/REDACTED/Fotos_test  utf8only                 off                          -
tank1/REDACTED/Fotos_test  normalization            none                         -
tank1/REDACTED/Fotos_test  casesensitivity          sensitive                    -
tank1/REDACTED/Fotos_test  vscan                    off                          default
tank1/REDACTED/Fotos_test  nbmand                   off                          default
tank1/REDACTED/Fotos_test  sharesmb                 off                          default
tank1/REDACTED/Fotos_test  refquota                 none                         default
tank1/REDACTED/Fotos_test  refreservation           none                         default
tank1/REDACTED/Fotos_test  guid                     15138990885486094453         -
tank1/REDACTED/Fotos_test  primarycache             all                          default
tank1/REDACTED/Fotos_test  secondarycache           all                          default
tank1/REDACTED/Fotos_test  usedbysnapshots          0B                           -
tank1/REDACTED/Fotos_test  usedbydataset            708G                         -
tank1/REDACTED/Fotos_test  usedbychildren           0B                           -
tank1/REDACTED/Fotos_test  usedbyrefreservation     0B                           -
tank1/REDACTED/Fotos_test  logbias                  latency                      default
tank1/REDACTED/Fotos_test  objsetid                 80894                        -
tank1/REDACTED/Fotos_test  dedup                    off                          default
tank1/REDACTED/Fotos_test  mlslabel                 none                         default
tank1/REDACTED/Fotos_test  sync                     standard                     default
tank1/REDACTED/Fotos_test  dnodesize                legacy                       default
tank1/REDACTED/Fotos_test  refcompressratio         1.02x                        -
tank1/REDACTED/Fotos_test  written                  708G                         -
tank1/REDACTED/Fotos_test  logicalused              726G                         -
tank1/REDACTED/Fotos_test  logicalreferenced        726G                         -
tank1/REDACTED/Fotos_test  volmode                  default                      default
tank1/REDACTED/Fotos_test  filesystem_limit         none                         default
tank1/REDACTED/Fotos_test  snapshot_limit           none                         default
tank1/REDACTED/Fotos_test  filesystem_count         none                         default
tank1/REDACTED/Fotos_test  snapshot_count           none                         default
tank1/REDACTED/Fotos_test  snapdev                  hidden                       default
tank1/REDACTED/Fotos_test  acltype                  nfsv4                        local
tank1/REDACTED/Fotos_test  context                  none                         default
tank1/REDACTED/Fotos_test  fscontext                none                         default
tank1/REDACTED/Fotos_test  defcontext               none                         default
tank1/REDACTED/Fotos_test  rootcontext              none                         default
tank1/REDACTED/Fotos_test  relatime                 on                           default
tank1/REDACTED/Fotos_test  redundant_metadata       all                          default
tank1/REDACTED/Fotos_test  overlay                  on                           default
tank1/REDACTED/Fotos_test  encryption               aes-256-gcm                  -
tank1/REDACTED/Fotos_test  keylocation              none                         default
tank1/REDACTED/Fotos_test  keyformat                passphrase                   -
tank1/REDACTED/Fotos_test  pbkdf2iters              350000                       -
tank1/REDACTED/Fotos_test  encryptionroot           tank1                        -
tank1/REDACTED/Fotos_test  keystatus                available                    -
tank1/REDACTED/Fotos_test  special_small_blocks     0                            default
tank1/REDACTED/Fotos_test  prefetch                 all                          default
tank1/REDACTED/Fotos_test  direct                   standard                     default
tank1/REDACTED/Fotos_test  longname                 off                          default
tank1/REDACTED/Fotos_test  org.freenas:description                               local
tank1/REDACTED/Fotos_test  org.truenas:managedby    192.168.1.5                  inherited from tank1/REDACTED
tank1/REDACTED/Fotos_test  org.freebsd.ioc:active   no                           inherited from tank1

aclmode?

Noticed that too so I changed it to “restricted” on the new dataset as well. The performance is still great so that’s not the issue.
Meanwhile I’ve used this workaround on 5 other datasets (and created them with “restricted” specifically.
So far the performance of the new datasets is perfect via SMB.

Copying the contents of every dataset off tank1 to another pool like this via rsync and then copying them back the same way to recreated source datasets has resolved the issues. The SMB performance is back to normal and the next scrub no longer showed the weird performance degradation:

My advice to anyone using legacy encrypted pools on TrueNAS Core, wanting to move to SCALE:
USE RSYNC AND AVOID ZFS REPLICATION!

After performing zfs rewrite on the entire pool twice, the performance recovered, so the root cause was most likely with ZFS.

The first zfs rewrite on the entire pool took nearly 80 hours, but the second zfs rewrite completed in less than 48 hours, which is consistent with the characteristic of performance halving.