Profiling
nanos world intègre des outils pour profiler en temps réel le serveur comme le client du jeu. Les outils de profilage sont indispensables pour optimiser de gros serveurs, repérer les goulots d'étranglement Lua, analyser les pics de frame, déboguer les problèmes réseau ou améliorer les performances globales.
Tracy Profiler

nanos world includes built-in integration with the Tracy Profiler, allowing you to profile both the server and the game client in real-time.
Tracy est un profileur temps réel à la nanoseconde près, très utilisé dans le développement de jeux et les applications hautes performances. Il propose une frise chronologique interactive pour voir exactement ce que fait votre application à chaque frame.
Contrairement aux profileurs classiques, Tracy permet d'analyser les performances en direct, pendant que le jeu ou le serveur tourne. Il affiche une chronologie détaillée de l'exécution de votre application, notamment :
- Les appels Lua
- Les callbacks d'événements
- Les callbacks de Timer
- Les systèmes internes
- Le traitement réseau
- Les temps de frame
- L'activité des threads
- La contention des verrous
- Les temps de chargement

Télécharger Tracy
First, download the Tracy Profiler application from the official releases page. It must be version 0.14, the same version built into nanos world, otherwise it refuses to connect:
Télécharger Tracy Profilerhttps://github.com/wolfpld/tracy/releasesUne fois téléchargée, lancez l'application Tracy.
Connecting with Tracy
Tracy is built into every server and game client. It stays idle and records nothing until a profiler connects, and it only accepts connections from the same machine.
- Start the server or the game normally
- Open the Tracy Profiler application on the same machine
- Enter
127.0.0.1as the address - Cliquez sur Connect
Tracy begins capturing from the moment it connects, so anything that happened before (like the startup) is not in the capture.
If the server and the game run on the same machine, the first one to start uses port 8086 and the second one 8087. Connect to 127.0.0.1:8087 to reach the second one.
Profiling a Remote Server
As Tracy only accepts local connections, forward its port through SSH and connect to 127.0.0.1 on your own machine:
ssh -L 8086:127.0.0.1:8086 user@your-server
Profiling Your Scripts
Every Lua callback already shows up in Tracy with the file and line it comes from. To see what happens inside a callback, use the profiling functions of the Debug class, which work on both server and client:
Server.Subscribe("Tick", function(delta_time)
-- Measures the function as a zone named "[my-package] NPC AI", also in the native profiling
Debug.ProfileZone("NPC AI", function()
UpdateNPCs(delta_time)
end)
-- Records a value in a graph
Debug.ProfilePlot("NPCs Alive", #npcs)
end)
-- Marks an event in the timeline
Debug.ProfileMessage("Round Started")
The zone always closes when the function returns, even when it errors. Its function takes no parameters and returns nothing, so use a closure to reach your values. They cost almost nothing while Tracy is not connected and the native profiling is off, so they can stay in your code. Use Debug.IsProfilerConnected() to skip computing values that only feed a graph.
Use fixed names for zones and graphs. Each different name stays stored until the game or server closes, so a name built per entity (like "NPC " .. id) fills the list quickly, and new names are ignored after 256.
Profilage natif
Nous avons aussi intégré une commande de profilage native qui permet de capturer des données de profilage sans Tracy. Elle affiche le temps d'exécution de certaines parties prédéfinies du code dans la console du serveur ou du client (ou dans l'interface de profilage du client).

Profilage du serveur
Pour activer le profilage du serveur, lancez simplement le serveur avec la commande --profiling ou définissez profiling = true dans le fichier Config.toml du serveur.
Des logs PROFIL s'afficheront dans la console du serveur, avec le temps d'exécution de différents systèmes et callbacks Lua.
Profilage du client
Pour activer le profilage du client, activez-le dans les paramètres du jeu, onglet Debug :

display frame times
Une fois activée, cette option affiche une interface de débogage avec :
fps(images par seconde, avec entre parenthèses les fps affichés par la génération d'images DLSS)frametime(temps de rendu de chaque frame, en millisecondes)fps 1% low(fps moyens des 1 % de frames les plus lentes)game(temps passé par le thread de jeu)render(temps passé par le thread de rendu)rhi(temps passé par le thread RHI)gpu(temps passé par le GPU)
display profiling to screen
Une fois activée, cette option affiche l'interface de profilage avec toutes les opérations et leurs temps d'exécution directement à l'écran, pour suivre les performances en temps réel sans passer par la console :

output profiling to console
Une fois activée, cette option affiche les informations de profilage dans la console du jeu, exactement comme côté serveur.
profiling entities & events network
Une fois activée, cette option affiche à l'écran l'utilisation réseau de chaque entité, ainsi que celle des événements de script et des autres synchronisations :
