Skip to content
This repository has been archived by the owner on Feb 28, 2024. It is now read-only.

[BUG-225584] Animesh: Massive performance loss since animesh update. #4348

Open
sl-service-account opened this issue Oct 3, 2018 · 5 comments

Comments

@sl-service-account
Copy link

What just happened?

Ever since Animesh i had the suspicion that something is happening that shouldn't be happening, my framerate was generally lower everywhere even without any Avatars or animesh around. Places were i hit 20-30 FPS went down to unusable 5 FPS and less. Places i've hit 90+ FPS went down to 50 FPS.

The culprit of all of this seems to be the "Avatar Update Extent", specifically
void LLVOAvatar::calculateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax)
and further this very bit:
updateRiggingInfo();
Not only does it constantly refresh rigging info by iterating through all bones of all avatars it also does so constantly without any regards as to whether something or someone is jellydolled, an animesh or an Avatar. jellydolling EVERYONE does not improve this nor does disabling "Avatar" Render Types, the sheer existence of other Avatars causes the Viewer to run this update loop relentlessly until the end of time impacting the framerate massively for your own Avatar only already way more than it should, every additional Avatar around increases this impact even further.

This absolutely needs to be throttled down, cached or otherwise optimized or called only when absolutely necessary (such as when you attach an animesh or when an animesh is re-linked with more animesh). It's impact is unacceptable and whatever it's needed for (i'm still investigating) it was not needed before animesh thus shouldn't be needed now unless an animesh is the target or an avatar having one attached.

What were you doing when it happened?

I was going anywhere.

What were you expecting to happen instead?

Not to cause 2 avatars to drop me into a framerate that is akin to a power point presentation.

Other information

Check the Fast Timers Console, go into places with several avatars, toggle off Avatar Render Types to confirm that they still have a tremendous impact because of this.

As mentioned check these tho code parts in llvoavatar.cpp. It seems like they were meant to be updated only when necessary (there is commented out code for it)

This should fix it: https://bitbucket.org/NiranV/black-dragon-viewer/commits/f4825132d2e807e421130b518552937fe6a04335

https://bitbucket.org/NiranV/black-dragon-viewer/commits/30252aa714c9a0a6b1bc535b57f78a61321019c2

No known side-effects yet.

Original Jira Fields
Field Value
Issue BUG-225584
Summary Animesh: Massive performance loss since animesh update.
Type Bug
Priority Unset
Status Accepted
Resolution Accepted
Reporter NiranV Dean (niranv.dean)
Created at 2018-10-03T04:15:05Z
Updated at 2018-10-07T11:28:58Z
{
  'Build Id': 'unset',
  'Business Unit': ['Platform'],
  'Date of First Response': '2018-10-04T17:55:57.122-0500',
  "Is there anything you'd like to add?": 'Check the Fast Timers Console, go into places with several avatars, toggle off Avatar Render Types to confirm that they still have a tremendous impact because of this.\r\n\r\nAs mentioned check these tho code parts in llvoavatar.cpp. It seems like they were meant to be updated only when necessary (there is commented out code for it)',
  'Original Reporter': 'NiranV Dean (niranv.dean)',
  'ReOpened Count': 0.0,
  'Severity': 'Unset',
  'System': 'SL Viewer',
  'Target Viewer Version': 'viewer-development',
  'What just happened?': 'Ever since Animesh i had the suspicion that something is happening that shouldn\'t be happening, my framerate was generally lower everywhere even without any Avatars or animesh around. Places were i hit 20-30 FPS went down to unusable 5 FPS and less. Places i\'ve hit 90+ FPS went down to 50 FPS.\r\n\r\nThe culprit of all of this seems to be the "Avatar Update Extent", specifically \r\nvoid LLVOAvatar::calculateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax)\r\nand further this very bit:\r\nupdateRiggingInfo();\r\nNot only does it constantly refresh rigging info by iterating through all bones of all avatars it also does so constantly without any regards as to whether something or someone is jellydolled, an animesh or an Avatar. jellydolling EVERYONE does not improve this nor does disabling "Avatar" Render Types, the sheer existence of other Avatars causes the Viewer to run this update loop relentlessly until the end of time impacting the framerate massively for your own Avatar only already way more than it should, every additional Avatar around increases this impact even further.\r\n\r\nThis absolutely needs to be throttled down, cached or otherwise optimized or called only when absolutely necessary (such as when you attach an animesh or when an animesh is re-linked with more animesh). It\'s impact is unacceptable and whatever it\'s needed for (i\'m still investigating) it was not needed before animesh thus shouldn\'t be needed now unless an animesh is the target or an avatar having one attached.',
  'What were you doing when it happened?': 'I was going anywhere.',
  'What were you expecting to happen instead?': 'Not to cause 2 avatars to drop me into a framerate that is akin to a power point presentation.',
}
@sl-service-account
Copy link
Author

Vir Linden commented at 2018-10-04T22:55:57Z

We would be curious to hear about the experience of other users here. The Black Dragon viewer is not implemented or supported by Linden Lab, but if there are similar issues with the Second Life viewers we'd appreciate any feedback about what you're seeing.

We've had to restrict commenting in JIRAs, so the best way to give us feedback would be via the forum thread at: https://community.secondlife.com/forums/topic/428428-slowdowns-in-graphics-performance/

(Regarding the proposed fix, I can't fully recommend using it currently. The detection of changes in linkset composition or LOD is not robust enough at present to make it reliable. If performance does turn out to be a general issue, making such detection more robust would be one thing to look into.)

@sl-service-account
Copy link
Author

Beq Janus commented at 2018-10-05T10:47:27Z, updated at 2018-10-05T10:51:17Z

I cannot reproduce such drastic frame rate loss.

In an animesh test region with my avatar, holding the test bear, and with another bear walking around alongside two raptors I see 45-50 fps average on AnimeshFS versus 50-55 on non-Animesh (current release)

As someoen who was significantly pessimistic on the performance impact of Animesh at the outset, I have overall been surprised at how little it affects the frame rate given the extra workload, but I cannot seem to replicate the issue that Niran sees in Black Dragon. I will do further tests, it would be useful to establish a benchmark scene somewhere so that we can measure these things more reliably, I had to keep dragging my raptors back into view :)

This is the Firestorm build merged to the latest Axon from about 5 days ago.

https://gyazo.com/557a0c22d175f45efff27434629d1d38.png

With Firestorm current release, I get 50 with 55+ a lot of the time the screen shot shows 58 (which was a bit of a fluke )

This would suggest a 10-15% degradation, which is certainly not great but given the jitter in framerates and the dynamic scene it is hard to draw a solid conclusion that this is not within normal "noise" fluctuations.

 

EDIT: 

Adding my hardware details as I do have a different hardware spec to Niran which could well influence these results a lot. Again if we can agree upon a benmchmark scene and then have it tested with different cards and viewers then we can start to derive a real basis for any impact.

 

CPU: Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz (3999.99 MHz)
Memory: 32695 MB
OS Version: Microsoft Windows 10 64-bit (Build 17134)
Graphics Card Vendor: NVIDIA Corporation
Graphics Card: GeForce GTX 980/PCIe/SSE2

Windows Graphics Driver Version: 24.21.13.9836
OpenGL Version: 4.6.0 NVIDIA 398.36

@sl-service-account
Copy link
Author

Whirly Fizzle commented at 2018-10-06T21:53:11Z, updated at 2018-10-06T21:57:35Z

|Viewer|Location|~FPS|Notes|
|
|-|-|-|-|-|
|LL Animesh RC - Second Life Release 6.0.0.518949 (64bit)|http://maps.secondlife.com/secondlife/Testylvania%20Sandbox/90/115/22|35|2 avatars wearing rigged mesh, 7 Animesh+PF characters|
|
|LL default release - Second Life Release 5.1.9.519298 (64bit)|""|43|""|
|
|-|-|-|-|
|
|LL Animesh RC - Second Life Release 6.0.0.518949 (64bit)|http://maps.secondlife.com/secondlife/Firestorm%20Social%20Island/141/144/33|4|21 avatars within draw distance, no animesh|
|
|LL default release - Second Life Release 5.1.9.519298 (64bit)|""|11|""|
|
|-|-|-|-|
|
|LL Animesh RC - Second Life Release 6.0.0.518949 (64bit)|http://maps.secondlife.com/secondlife/London%20City/81/179/23|5|Crazy number of avatars, no animesh - https://prnt.sc/l30y8y|
|
|LL default release - Second Life Release 5.1.9.519298 (64bit)|""|8|""|
|
|-|-|-|-|



Testing system

Java<br> <br>Second Life Release 6.0.0.518949 (64bit) <br>Release Notes <br> <br>You are at 90.0, 115.0, 21.9 in Testylvania Sandbox located at sim10698.agni.lindenlab.com (216.82.53.60:13004) <br>SLURL: http://maps.secondlife.com/secondlife/Testylvania%20Sandbox/90/115/22 <br>(global coordinates 332,634.0, 306,291.0, 21.9) <br>Second Life RC Magnum 18.09.20.519894 <br>Release Notes <br> <br>CPU: Intel(R) Core(TM) i7-4770K CPU @ 3.50GHz (3491.96 MHz) <br>Memory: 16268 MB <br>OS Version: Microsoft Windows 7 SP1 64-bit (Build 7601) <br>Graphics Card Vendor: NVIDIA Corporation <br>Graphics Card: GeForce GTX 750/PCIe/SSE2 <br> <br>Windows Graphics Driver Version: 23.21.13.9135 <br>OpenGL Version: 4.6.0 NVIDIA 391.35 <br> <br>Window size: 1920x1021 <br>Font Size Adjustment: 96pt <br>UI Scaling: 1 <br>Draw distance: 256m <br>Bandwidth: 3000kbit/s <br>LOD factor: 2 <br>Render quality: 6 / 7 <br>Advanced Lighting Model: Enabled <br>Texture memory: 512MB <br>VFS (cache) creation time: October 01 2018 05:13:25 <br> <br>J2C Decoder Version: KDU v7.10.4 <br>Audio Driver Version: FMOD Ex 4.44.64 <br>Dullahan: 1.1.1080 / CEF: 3.3325.1750.gaabe4c4 / Chromium: 65.0.3325.146 <br>LibVLC Version: 2.2.8 <br>Voice Server Version: Vivox 4.9.0002.30313 <br> <br>Packets Lost: 0/11,408 (0%) <br>October 06 2018 14:12:48 <br>



- Running both viewers at the same time.
- Made sure to leave enough time for FPS to settle after bringing viewer into focus.
- Both viewer running at default settings for my system, which is high-ultra. No changes made to default settings apart from raising draw distance to 256m.
- Both viewers using default camera position & both my agents were standing right next to each other.
- Running 2 viewers with full shadows & ambient occlusion is a bit much for this system...

So I guess I can reproduce the problem with lower FPS on the Animesh viewer., but not as severely as Niran.





|

@sl-service-account
Copy link
Author

Whirly Fizzle commented at 2018-10-06T22:07:27Z, updated at 2018-10-06T22:10:57Z

Can we get a couple of benchmarking regions set up?
One with lots of animesh content & one with a lot of avatar bots wearing rigged mesh?
And a proper test plan :)
Kinda hard to test this...

@sl-service-account
Copy link
Author

NiranV Dean commented at 2018-10-07T11:28:59Z

Everything is hard to test in SL without proper performance debugging tools and the completely randomness that is SL most of the time.

Fast Timers is sadly not helpful at all, taking the biggest chunk of performance hit by itself.

Even then it should be clear by now that something is going on there.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

1 participant