├── .gitignore ├── LICENSE ├── amdgputop.json ├── classes.module.js ├── functions.module.js ├── generate_markdown_readme.js ├── generate_template.js ├── gpu_monitor.png ├── gpu_monitor2.png ├── kill_nohup_deno_run_websersocket_0628a90e-0163-400d-bee6-e31e990e9197.sh ├── localhost ├── classes.module.js ├── client.html ├── client.module.js ├── echart.html ├── example.html ├── functions.module.js ├── graph.png ├── graph_gauge_chart.png ├── graph_text.png ├── graph_xychart.png ├── gui.webm ├── plotly.html ├── runtimedata.module.js ├── test_client.html ├── test_client.module.js └── time.html ├── nohup_deno_run_websersocket_0628a90e-0163-400d-bee6-e31e990e9197.sh ├── nvidia-settings--q-all.txt ├── nvidiasmiqx0.xml ├── nvidiasmiqx1.xml ├── nvidiasmiqx2.xml ├── nvidiasmiqx3.xml ├── o_amd.js ├── o_config.gitignored.examplenotignored.json ├── o_xml.json ├── o_xml_nvidia.json ├── out.json ├── process_monitor_websersocket_0628a90e-0163-400d-bee6-e31e990e9197.sh ├── readme.md ├── restart_nohup_run_websersocket_0628a90e-0163-400d-bee6-e31e990e9197.sh ├── runtimedata.module.js ├── test.js └── websersocket_0628a90e-0163-400d-bee6-e31e990e9197.js /.gitignore: -------------------------------------------------------------------------------- 1 | /gitignored/ 2 | *.gitignored.* 3 | .gitignored.*/ 4 | *gitignored* 5 | !*gitignored.examplenotignored* 6 | self_signed_cert*.crt 7 | self_signed_key*.key -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright 2024 JONAS IMMANUEL FREY 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /amdgputop.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "ASIC Name": "Polaris10", 4 | "CU per Shader Array": { "max": 9, "min": 9 }, 5 | "Chip Class": "GFX8", 6 | "DeviceID": 26591, 7 | "DeviceName": "AMD Radeon RX 590 Series", 8 | "GL1 Cache per Shader Array": 0, 9 | "GPU Clock": { "max": 1545, "min": 300 }, 10 | "GPU Family": "Volcanic Islands/Polaris (VI)", 11 | "GPU Type": "dGPU", 12 | "GTT Size": 16789442560, 13 | "L1 Cache per CU": 16384, 14 | "L2 Cache": 2097152, 15 | "L3 Cache": 0, 16 | "Memory Clock": { "max": 2000, "min": 400 }, 17 | "PCI": "0000:0a:00.0", 18 | "PCIe Link": { 19 | "max_dpm_link": { "gen": 3, "width": 16 }, 20 | "max_gpu_link": { "gen": 3, "width": 16 }, 21 | "max_system_link": { "gen": 4, "width": 16 }, 22 | "min_dpm_link": { "gen": 1, "width": 8 } 23 | }, 24 | "Power Cap": { "current": 175, "max": 175, "min": 0 }, 25 | "Power Profiles": [ 26 | "BOOTUP_DEFAULT", 27 | "3D_FULL_SCREEN", 28 | "POWER_SAVING", 29 | "VIDEO", 30 | "VR", 31 | "COMPUTE", 32 | "CUSTOM" 33 | ], 34 | "RenderBackend": 8, 35 | "RenderBackend Type": "RB", 36 | "ResizableBAR": false, 37 | "RevisionID": 225, 38 | "Sensors": { 39 | "Average Power": null, 40 | "Edge Temperature": { "unit": "C", "value": 49 }, 41 | "Fan": { "unit": "RPM", "value": 1221 }, 42 | "Fan Max": { "unit": "RPM", "value": 3800 }, 43 | "GFX Power": { "unit": "W", "value": 57 }, 44 | "GFX_MCLK": { "unit": "MHz", "value": 2000 }, 45 | "GFX_SCLK": { "unit": "MHz", "value": 1322 }, 46 | "Input Power": { "unit": "W", "value": 57 }, 47 | "Junction Temperature": null, 48 | "Memory Temperature": null, 49 | "PCI Power State": "D0", 50 | "PCIe Link Speed": { "gen": 3, "width": 16 }, 51 | "Power Profile": "3D_FULL_SCREEN", 52 | "VDDGFX": { "unit": "mV", "value": 1000 }, 53 | "VDDNB": null 54 | }, 55 | "Shader Array per Shader Engine": 1, 56 | "Shader Engine": 4, 57 | "Total Compute Unit": 36, 58 | "Total ROP": 32, 59 | "VBIOS": { 60 | "date": "2019/01/17 21:57", 61 | "name": "C94441 POLARIS 30 XT A1 GDDR5 P10FF K0115OAX.MLC 2019", 62 | "pn": "113-C94441_100", 63 | "ver_str": "015.050.003.000.000000" 64 | }, 65 | "VRAM": { 66 | "Total GTT": { "unit": "MiB", "value": 16011 }, 67 | "Total GTT Usage": { "unit": "MiB", "value": 165 }, 68 | "Total VRAM": { "unit": "MiB", "value": 8192 }, 69 | "Total VRAM Usage": { "unit": "MiB", "value": 2507 } 70 | }, 71 | "VRAM Bit width": 256, 72 | "VRAM Size": 8589934592, 73 | "VRAM Type": "GDDR5", 74 | "Video Caps": { 75 | "AV1": { "Decode": null, "Encode": null }, 76 | "HEVC": { 77 | "Decode": { "height": 4096, "width": 4096 }, 78 | "Encode": { "height": 2304, "width": 4096 } 79 | }, 80 | "JPEG": { "Decode": { "height": 4096, "width": 4096 }, "Encode": null }, 81 | "MPEG2": { "Decode": { "height": 4096, "width": 4096 }, "Encode": null }, 82 | "MPEG4": { "Decode": { "height": 4096, "width": 4096 }, "Encode": null }, 83 | "MPEG4_AVC": { 84 | "Decode": { "height": 4096, "width": 4096 }, 85 | "Encode": { "height": 2304, "width": 4096 } 86 | }, 87 | "VC1": { "Decode": { "height": 4096, "width": 4096 }, "Encode": null }, 88 | "VP9": { "Decode": null, "Encode": null } 89 | }, 90 | "amdgpu_top_version": { "major": 0, "minor": 9, "patch": 1 }, 91 | "drm_version": { "major": 3, "minor": 57, "patchlevel": 0 }, 92 | "gfx_target_version": "gfx803", 93 | "gpu_activity": { 94 | "GFX": { "unit": "%", "value": 1 }, 95 | "MediaEngine": { "unit": "%", "value": null }, 96 | "Memory": { "unit": "%", "value": 1 } 97 | }, 98 | "gpu_metrics": null 99 | } 100 | ] 101 | -------------------------------------------------------------------------------- /classes.module.js: -------------------------------------------------------------------------------- 1 | class O_ws_client{ 2 | constructor( 3 | s_uuidv4, 4 | o_socket 5 | ){ 6 | this.s_uuidv4 = s_uuidv4 7 | this.o_socket = o_socket 8 | } 9 | } 10 | export { 11 | O_ws_client 12 | } -------------------------------------------------------------------------------- /functions.module.js: -------------------------------------------------------------------------------- 1 | 2 | let s_path_abs_file_current = new URL(import.meta.url).pathname; 3 | let s_path_abs_folder_current = s_path_abs_file_current.split('/').slice(0, -1).join('/'); 4 | 5 | let f_o_config = async function(){ 6 | let s_json__o_config = await Deno.readTextFile( 7 | `${s_path_abs_folder_current}/o_config.gitignored.json` 8 | ); 9 | return JSON.parse(s_json__o_config); 10 | } 11 | 12 | export { 13 | f_o_config 14 | } -------------------------------------------------------------------------------- /generate_markdown_readme.js: -------------------------------------------------------------------------------- 1 | import { 2 | f_generate_markdown 3 | } from "https://deno.land/x/f_generate_markdown@1.2/mod.js" 4 | await f_generate_markdown('./localhost/test_client.module.js') -------------------------------------------------------------------------------- /generate_template.js: -------------------------------------------------------------------------------- 1 | import { 2 | f_generate_template 3 | } from "https://deno.land/x/websersocket@1.0.4/mod.js" 4 | 5 | let s_path_abs_file_current = new URL(import.meta.url).pathname; 6 | let s_path_abs_folder_current = s_path_abs_file_current.split('/').slice(0, -1).join('/'); 7 | await f_generate_template(`${s_path_abs_folder_current}/.`); -------------------------------------------------------------------------------- /gpu_monitor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonasfrey/gpu-monitor-browser-gui/4ac97f94be90926a25218e455a8fdb1c424fb210/gpu_monitor.png -------------------------------------------------------------------------------- /gpu_monitor2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonasfrey/gpu-monitor-browser-gui/4ac97f94be90926a25218e455a8fdb1c424fb210/gpu_monitor2.png -------------------------------------------------------------------------------- /kill_nohup_deno_run_websersocket_0628a90e-0163-400d-bee6-e31e990e9197.sh: -------------------------------------------------------------------------------- 1 | pkill -f websersocket_0628a90e-0163-400d-bee6-e31e990e9197.js -------------------------------------------------------------------------------- /localhost/classes.module.js: -------------------------------------------------------------------------------- 1 | // here only struct/object/class/model definitions should be mentioned 2 | 3 | // for example 4 | 5 | class O_gpu_readout_object { 6 | constructor(s_binary_name, o_gpu_readout) { 7 | this.s_binary_name = s_binary_name; 8 | this.o_gpu_readout = o_gpu_readout; 9 | } 10 | } 11 | class O_gpu_readout_info { 12 | constructor(n_ts_ms, s_ymd_hms, a_o_gpu_info) { 13 | this.n_ts_ms = n_ts_ms; 14 | this.s_ymd_hms = s_ymd_hms; 15 | this.a_o_gpu_info = a_o_gpu_info; 16 | } 17 | } 18 | class O_gpu_info { 19 | constructor(s_pci, s_name_brand_model_gpu, a_o_gpu_property_value) { 20 | this.s_pci = s_pci; 21 | this.s_name_brand_model_gpu = s_name_brand_model_gpu; 22 | this.a_o_gpu_property_value = a_o_gpu_property_value; 23 | } 24 | } 25 | class O_gpu_property { 26 | constructor(s_name, s_description) { 27 | this.s_name = s_name; 28 | this.s_description = s_description; 29 | } 30 | } 31 | class O_gpu_property_value { 32 | constructor( 33 | o_gpu_property, 34 | s_val, 35 | s_unit, 36 | o_number_value_max, 37 | o_number_value, 38 | n_nor, 39 | o_meta, 40 | ) { 41 | this.o_gpu_property = o_gpu_property; 42 | this.s_val = s_val; 43 | this.s_unit = s_unit; 44 | this.o_number_value_max = o_number_value_max; 45 | this.o_number_value = o_number_value; 46 | this.n_nor = n_nor; 47 | this.o_meta = o_meta; 48 | } 49 | } 50 | 51 | class O_gpu_property_value_visualization { 52 | constructor( 53 | o_gpu_property, 54 | s_rgba_color_interpolation, 55 | s_interpolation_style, 56 | ) { 57 | this.o_gpu_property = o_gpu_property; 58 | this.s_rgba_color_interpolation = s_rgba_color_interpolation; 59 | this.s_interpolation_style = s_interpolation_style; 60 | } 61 | } 62 | class O_graph { 63 | constructor( 64 | s_name_brand_model_gpu, 65 | a_o_gpu_property_value_visualization, 66 | n_tickinterval, 67 | ) { 68 | this.s_name_brand_model_gpu = s_name_brand_model_gpu; 69 | this.a_o_gpu_property_value_visualization = 70 | a_o_gpu_property_value_visualization; 71 | this.n_tickinterval = n_tickinterval; 72 | this.o_echart = null; 73 | } 74 | } 75 | class O_graph_type { 76 | constructor(s_name, s_name_img) { 77 | this.s_name = s_name; 78 | this.s_name_img = s_name_img; 79 | } 80 | } 81 | 82 | class O_threshhold { 83 | constructor(n, s_col) { 84 | this.n = n; 85 | this.s_col = s_col; 86 | } 87 | } 88 | class O_configuration { 89 | constructor( 90 | s_name, 91 | a_o_window, 92 | b_auto_update_title, 93 | n_min_backview, 94 | n_sec_interval, 95 | n_tickinterval, 96 | ) { 97 | this.s_name = s_name; 98 | this.a_o_window = a_o_window; 99 | this.b_auto_update_title = b_auto_update_title; 100 | this.n_min_backview = n_min_backview; 101 | this.n_sec_interval = n_sec_interval; 102 | this.n_tickinterval = n_tickinterval; 103 | } 104 | } 105 | class O_window { 106 | constructor( 107 | n_trn_x_nor, 108 | n_trn_y_nor, 109 | n_trn_z_nor, 110 | n_scl_x_nor, 111 | n_scl_y_nor, 112 | s_title, 113 | o_graph_type, 114 | o_gpu_property, 115 | a_o_threshhold, 116 | s_pci, 117 | s_name_brand_model_gpu, 118 | b_use_normalized_value_percentage, 119 | b_render_settings, 120 | ) { 121 | (this.n_trn_x_nor = n_trn_x_nor), 122 | (this.n_trn_y_nor = n_trn_y_nor), 123 | (this.n_trn_z_nor = n_trn_z_nor); 124 | (this.n_scl_x_nor = n_scl_x_nor), (this.n_scl_y_nor = n_scl_y_nor); 125 | this.o_gpu_property = o_gpu_property; 126 | this.s_title = s_title; 127 | this.o_graph_type = o_graph_type; 128 | this.a_o_threshhold = a_o_threshhold; 129 | this.o_echart = null; 130 | this.s_pci = s_pci; 131 | this.s_name_brand_model_gpu = s_name_brand_model_gpu; 132 | this.b_use_normalized_value_percentage = b_use_normalized_value_percentage; 133 | this.b_render_settings = b_render_settings; 134 | } 135 | } 136 | class O_gpu_fan{ 137 | constructor( 138 | n_id, 139 | o_gpu_info, 140 | b_manual_control, 141 | n_nor_speed 142 | ){ 143 | this.n_id = n_id 144 | this.o_gpu_info = o_gpu_info 145 | this.b_manual_control = b_manual_control 146 | this.n_nor_speed = n_nor_speed 147 | } 148 | } 149 | export { 150 | O_gpu_info, 151 | O_gpu_readout_info, 152 | O_graph, 153 | O_gpu_property, 154 | O_gpu_property_value, 155 | O_gpu_property_value_visualization, 156 | O_window, 157 | O_graph_type, 158 | O_threshhold, 159 | O_configuration, 160 | O_gpu_readout_object, 161 | O_gpu_fan 162 | }; 163 | -------------------------------------------------------------------------------- /localhost/client.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | NVIDIA SMI BROWSER GUI 11 | 12 | 13 | 15 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 30 | 31 | -------------------------------------------------------------------------------- /localhost/echart.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ECharts Example 7 | 8 | 9 | 16 | 17 | 18 | 19 |
20 | 21 | 150 | 151 | 152 | -------------------------------------------------------------------------------- /localhost/example.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Chart.js Example 7 | 10 | 11 | 12 | 13 | 14 | 15 | 23 | 24 | 25 |
26 | 27 |
28 | 29 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /localhost/functions.module.js: -------------------------------------------------------------------------------- 1 | // here should be functions that really are only functions 2 | // they take arguments do something and return something 3 | // they should not depend on runtime data from the runtime scope 4 | // for example 5 | // do 6 | // let f_n_sum = function(n_1, n_2){ 7 | // return n_1 + n_2 8 | // } 9 | // // don't 10 | // let n_base = 10 11 | // let f_n_sum_dont = function(n_1){ 12 | // return n_base + n_1 13 | // } 14 | // export { 15 | // f_n_sum 16 | // } -------------------------------------------------------------------------------- /localhost/graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonasfrey/gpu-monitor-browser-gui/4ac97f94be90926a25218e455a8fdb1c424fb210/localhost/graph.png -------------------------------------------------------------------------------- /localhost/graph_gauge_chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonasfrey/gpu-monitor-browser-gui/4ac97f94be90926a25218e455a8fdb1c424fb210/localhost/graph_gauge_chart.png -------------------------------------------------------------------------------- /localhost/graph_text.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonasfrey/gpu-monitor-browser-gui/4ac97f94be90926a25218e455a8fdb1c424fb210/localhost/graph_text.png -------------------------------------------------------------------------------- /localhost/graph_xychart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonasfrey/gpu-monitor-browser-gui/4ac97f94be90926a25218e455a8fdb1c424fb210/localhost/graph_xychart.png -------------------------------------------------------------------------------- /localhost/gui.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jonasfrey/gpu-monitor-browser-gui/4ac97f94be90926a25218e455a8fdb1c424fb210/localhost/gui.webm -------------------------------------------------------------------------------- /localhost/plotly.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Plotly.js Example 7 | 8 | 9 | 10 |
11 | 12 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /localhost/runtimedata.module.js: -------------------------------------------------------------------------------- 1 | import { 2 | O_gpu_property, 3 | O_gpu_property_value, 4 | O_graph_type 5 | } from "./classes.module.js" 6 | 7 | 8 | 9 | 10 | let o_gpu_property__gpu_name = new O_gpu_property( 11 | 'GPU Name', 12 | 'The official name of the GPU, identifying its model and variant.' 13 | ); 14 | 15 | let o_gpu_property__gpu_utilization = new O_gpu_property( 16 | 'GPU Utilization', 17 | 'The percentage of GPU utilization, showing how much of the GPU’s processing power is currently in use.' 18 | ); 19 | 20 | let o_gpu_property__temperature = new O_gpu_property( 21 | 'Temperature', 22 | 'The current temperature of the GPU in degrees Celsius.' 23 | ); 24 | 25 | let o_gpu_property__power_draw = new O_gpu_property( 26 | 'Power Draw', 27 | 'The current power consumption of the GPU in watts.' 28 | ); 29 | 30 | let o_gpu_property__memory_info = new O_gpu_property( 31 | 'Memory Info', 32 | [ 33 | 'Information about the total memory, used memory, and free memory of the GPU.', 34 | ' FB memory usage on NVIDIA and VRAM usage on AMD.' 35 | ].join('') 36 | ); 37 | 38 | let o_gpu_property__memory_info_graphics_translation_table_amd_specific = new O_gpu_property( 39 | 'Memory Info GTT (AMD only)', 40 | 'Information about Graphics Translation Table (GTT) memory usage, which is system memory that the AMD GPU can access.' 41 | ); 42 | 43 | let o_gpu_property__memory_info_bar1_nvidia_specific = new O_gpu_property( 44 | 'Memory Info BAR1 (NVIDIA)', 45 | 'Information about BAR1 memory usage, which is used by the NVIDIA GPU to communicate with the CPU by mapping part of its memory for CPU access.' 46 | ); 47 | 48 | let o_gpu_property__pci_address = new O_gpu_property( 49 | 'PCI Address', 50 | 'The PCI address uniquely identifying the location of the GPU on the system’s PCI bus.' 51 | ); 52 | 53 | let o_gpu_property__memory_info_per_process_nvidia_specific = new O_gpu_property( 54 | 'Processes memory info', 55 | 'How much memory each process uses' 56 | ); 57 | 58 | 59 | 60 | let o_gpu_property__graphics_clock = new O_gpu_property( 61 | 'Graphics Clock', 62 | 'The current clock speed of the GPU’s graphics core, measured in MHz. This controls the core processing power of the GPU.' 63 | ); 64 | 65 | let o_gpu_property__sm_clock = new O_gpu_property( 66 | 'SM Clock', 67 | 'The clock speed of the Streaming Multiprocessors (SM) on the GPU, which handle parallel workloads. Measured in MHz.' 68 | ); 69 | 70 | let o_gpu_property__mem_clock = new O_gpu_property( 71 | 'Memory Clock', 72 | 'The current clock speed of the GPU’s memory, measured in MHz. This influences the speed at which the GPU accesses its VRAM.' 73 | ); 74 | 75 | let o_gpu_property__video_clock = new O_gpu_property( 76 | 'Video Clock', 77 | 'The clock speed of the GPU’s video processing engine, measured in MHz. This is used for video encoding and decoding tasks.' 78 | ); 79 | 80 | 81 | let o_gpu_property__graphics_volt = new O_gpu_property( 82 | 'Graphics Voltage', 83 | 'The voltage supplied to the GPU’s graphics core, measured in millivolts (mV). This indicates the power being used by the core for processing tasks.', 84 | ); 85 | 86 | 87 | let o_gpu_property__fan_speed = new O_gpu_property( 88 | 'Fan Speed', 89 | 'fan speed' 90 | ); 91 | 92 | 93 | let o_graph_type__text = new O_graph_type( 94 | 'Text information', 95 | './graph_text.png' 96 | ); 97 | let o_graph_type__gauge = new O_graph_type( 98 | 'Gauge', 99 | './graph_gauge_chart.png' 100 | ); 101 | let o_graph_type__xy = new O_graph_type( 102 | 'XY', 103 | './graph_xychart.png' 104 | ); 105 | let a_o_graph_type = [ 106 | o_graph_type__text, 107 | o_graph_type__gauge, 108 | o_graph_type__xy, 109 | ] 110 | 111 | let a_o_gpu_property = [ 112 | o_gpu_property__gpu_name, 113 | o_gpu_property__gpu_utilization, 114 | o_gpu_property__temperature, 115 | o_gpu_property__power_draw, 116 | o_gpu_property__memory_info, 117 | o_gpu_property__memory_info_graphics_translation_table_amd_specific, 118 | o_gpu_property__memory_info_bar1_nvidia_specific, 119 | o_gpu_property__pci_address, 120 | o_gpu_property__memory_info_per_process_nvidia_specific, 121 | o_gpu_property__graphics_clock, 122 | o_gpu_property__sm_clock, 123 | o_gpu_property__mem_clock, 124 | o_gpu_property__video_clock, 125 | o_gpu_property__graphics_volt, 126 | o_gpu_property__fan_speed 127 | ] 128 | 129 | export { 130 | a_o_gpu_property, 131 | o_gpu_property__gpu_name, 132 | o_gpu_property__gpu_utilization, 133 | o_gpu_property__temperature, 134 | o_gpu_property__power_draw, 135 | o_gpu_property__memory_info, 136 | o_gpu_property__memory_info_graphics_translation_table_amd_specific, 137 | o_gpu_property__memory_info_bar1_nvidia_specific, 138 | o_gpu_property__pci_address, 139 | o_gpu_property__memory_info_per_process_nvidia_specific, 140 | o_gpu_property__graphics_clock, 141 | o_gpu_property__sm_clock, 142 | o_gpu_property__mem_clock, 143 | o_gpu_property__video_clock, 144 | o_gpu_property__graphics_volt, 145 | o_gpu_property__fan_speed, 146 | 147 | 148 | a_o_graph_type, 149 | o_graph_type__text, 150 | o_graph_type__gauge, 151 | o_graph_type__xy 152 | } -------------------------------------------------------------------------------- /localhost/test_client.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Test 0628a90e-0163-400d-bee6-e31e990e9197 11 | 12 | 13 | 14 | 25 | 26 | 27 | 28 | 30 | 31 | -------------------------------------------------------------------------------- /localhost/test_client.module.js: -------------------------------------------------------------------------------- 1 | import { 2 | f_display_test_selection_or_run_selected_test_and_print_summary, 3 | f_o_test, 4 | f_assert_equals 5 | } from "https://deno.land/x/deno_test_server_and_client_side@1.3/mod.js" 6 | 7 | //readme.md:start 8 | //md: #template structure 9 | //md: ## ./ 10 | //md: all but ./localhost inside this directory is considered server side 11 | //md: ./localhost this is client side code 12 | //readme.md:end 13 | 14 | //./readme.md:start 15 | //md: ![./logo.png](./logo.png) 16 | //./readme.md:end 17 | 18 | //./readme.md:start 19 | //md: # Title of the project 0628a90e-0163-400d-bee6-e31e990e9197 20 | //./readme.md:end 21 | 22 | // import { stuff} from './client.module.js' 23 | 24 | let a_o_test = [ 25 | f_o_test( 26 | 'assert_equals_1_eq_1', 27 | async ()=>{ 28 | //./readme.md:start 29 | //md: ## most simple example 30 | //md: description 31 | f_assert_equals(1,1); 32 | //./readme.md:end 33 | } 34 | ), 35 | ] 36 | 37 | 38 | f_display_test_selection_or_run_selected_test_and_print_summary( 39 | a_o_test 40 | ) 41 | // //readme.md:end -------------------------------------------------------------------------------- /localhost/time.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | TimeChart Example 7 | 8 | 9 | 16 | 17 | 18 | 19 |
20 | 21 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /nohup_deno_run_websersocket_0628a90e-0163-400d-bee6-e31e990e9197.sh: -------------------------------------------------------------------------------- 1 | nohup deno run -A websersocket_0628a90e-0163-400d-bee6-e31e990e9197.js &> nohup_deno_run_dash_A_websersocket_0628a90e-0163-400d-bee6-e31e990e9197_dot_js.out.txt & -------------------------------------------------------------------------------- /o_amd.js: -------------------------------------------------------------------------------- 1 | let o = { 2 | "ASIC Name": "Polaris10", 3 | "CU per Shader Array": { max: 9, min: 9 }, 4 | "Chip Class": "GFX8", 5 | DeviceID: 26591, 6 | DeviceName: "AMD Radeon RX 590 Series", 7 | "GL1 Cache per Shader Array": 0, 8 | "GPU Clock": { max: 1545, min: 300 }, 9 | "GPU Family": "Volcanic Islands/Polaris (VI)", 10 | "GPU Type": "dGPU", 11 | "GTT Size": 16789442560, 12 | "L1 Cache per CU": 16384, 13 | "L2 Cache": 2097152, 14 | "L3 Cache": 0, 15 | "Memory Clock": { max: 2000, min: 400 }, 16 | PCI: "0000:0a:00.0", 17 | "PCIe Link": { 18 | max_dpm_link: { gen: 3, width: 16 }, 19 | max_gpu_link: { gen: 3, width: 16 }, 20 | max_system_link: { gen: 4, width: 16 }, 21 | min_dpm_link: { gen: 1, width: 8 } 22 | }, 23 | "Power Cap": { current: 175, max: 175, min: 0 }, 24 | "Power Profiles": [ 25 | "BOOTUP_DEFAULT", 26 | "3D_FULL_SCREEN", 27 | "POWER_SAVING", 28 | "VIDEO", 29 | "VR", 30 | "COMPUTE", 31 | "CUSTOM" 32 | ], 33 | RenderBackend: 8, 34 | "RenderBackend Type": "RB", 35 | ResizableBAR: false, 36 | RevisionID: 225, 37 | Sensors: { 38 | "Average Power": null, 39 | "Edge Temperature": { unit: "C", value: 46 }, 40 | Fan: { unit: "RPM", value: 1218 }, 41 | "Fan Max": { unit: "RPM", value: 3800 }, 42 | "GFX Power": { unit: "W", value: 50 }, 43 | GFX_MCLK: { unit: "MHz", value: 2000 }, 44 | GFX_SCLK: { unit: "MHz", value: 1259 }, 45 | "Input Power": { unit: "W", value: 50 }, 46 | "Junction Temperature": null, 47 | "Memory Temperature": null, 48 | "PCI Power State": "D0", 49 | "PCIe Link Speed": { gen: 3, width: 16 }, 50 | "Power Profile": "3D_FULL_SCREEN", 51 | VDDGFX: { unit: "mV", value: 950 }, 52 | VDDNB: null 53 | }, 54 | "Shader Array per Shader Engine": 1, 55 | "Shader Engine": 4, 56 | "Total Compute Unit": 36, 57 | "Total ROP": 32, 58 | VBIOS: { 59 | date: "2019/01/17 21:57", 60 | name: "C94441 POLARIS 30 XT A1 GDDR5 P10FF K0115OAX.MLC 2019", 61 | pn: "113-C94441_100", 62 | ver_str: "015.050.003.000.000000" 63 | }, 64 | VRAM: { 65 | "Total GTT": { unit: "MiB", value: 16011 }, 66 | "Total GTT Usage": { unit: "MiB", value: 162 }, 67 | "Total VRAM": { unit: "MiB", value: 8192 }, 68 | "Total VRAM Usage": { unit: "MiB", value: 1434 } 69 | }, 70 | "VRAM Bit width": 256, 71 | "VRAM Size": 8589934592, 72 | "VRAM Type": "GDDR5", 73 | "Video Caps": { 74 | AV1: { Decode: null, Encode: null }, 75 | HEVC: { 76 | Decode: { height: 4096, width: 4096 }, 77 | Encode: { height: 2304, width: 4096 } 78 | }, 79 | JPEG: { Decode: { height: 4096, width: 4096 }, Encode: null }, 80 | MPEG2: { Decode: { height: 4096, width: 4096 }, Encode: null }, 81 | MPEG4: { Decode: { height: 4096, width: 4096 }, Encode: null }, 82 | MPEG4_AVC: { 83 | Decode: { height: 4096, width: 4096 }, 84 | Encode: { height: 2304, width: 4096 } 85 | }, 86 | VC1: { Decode: { height: 4096, width: 4096 }, Encode: null }, 87 | VP9: { Decode: null, Encode: null } 88 | }, 89 | amdgpu_top_version: { major: 0, minor: 9, patch: 1 }, 90 | drm_version: { major: 3, minor: 57, patchlevel: 0 }, 91 | gfx_target_version: "gfx803", 92 | gpu_activity: { 93 | GFX: { unit: "%", value: 9 }, 94 | MediaEngine: { unit: "%", value: null }, 95 | Memory: { unit: "%", value: 1 } 96 | }, 97 | gpu_metrics: null 98 | } -------------------------------------------------------------------------------- /o_config.gitignored.examplenotignored.json: -------------------------------------------------------------------------------- 1 | { 2 | "s_secret_key": "lol_this_is_secret", 3 | "s_uuidv4": "0628a90e-0163-400d-bee6-e31e990e9197" 4 | } -------------------------------------------------------------------------------- /o_xml.json: -------------------------------------------------------------------------------- 1 | { 2 | "@version": "1.0", 3 | "#doctype": { 4 | "@nvsmi_device_v12.dtd": "", 5 | "@nvidia_smi_log": "", 6 | "@SYSTEM": "" 7 | }, 8 | "nvidia_smi_log": { 9 | "timestamp": "Tue Sep 17 15:21:36 2024", 10 | "driver_version": "535.161.07", 11 | "cuda_version": "12.2", 12 | "attached_gpus": "1", 13 | "gpu": { 14 | "@id": "00000000:29:00.0", 15 | "product_name": "NVIDIA GeForce RTX 4060 Ti", 16 | "product_brand": "GeForce", 17 | "product_architecture": "Ada Lovelace", 18 | "display_mode": "Enabled", 19 | "display_active": "Enabled", 20 | "persistence_mode": "Disabled", 21 | "addressing_mode": "None", 22 | "mig_mode": { 23 | "current_mig": "N/A", 24 | "pending_mig": "N/A" 25 | }, 26 | "mig_devices": "None", 27 | "accounting_mode": "Disabled", 28 | "accounting_mode_buffer_size": "4000", 29 | "driver_model": { 30 | "current_dm": "N/A", 31 | "pending_dm": "N/A" 32 | }, 33 | "serial": "N/A", 34 | "uuid": "GPU-7f38b234-1f86-09b0-2d9c-a3ae33730a0f", 35 | "minor_number": "0", 36 | "vbios_version": "95.06.30.00.54", 37 | "multigpu_board": "No", 38 | "board_id": "0x2900", 39 | "board_part_number": "N/A", 40 | "gpu_part_number": "2805-351-A1", 41 | "gpu_fru_part_number": "N/A", 42 | "gpu_module_id": "1", 43 | "inforom_version": { 44 | "img_version": "G002.0000.00.03", 45 | "oem_object": "2.0", 46 | "ecc_object": "N/A", 47 | "pwr_object": "N/A" 48 | }, 49 | "inforom_bbx_flush": { 50 | "latest_timestamp": "N/A", 51 | "latest_duration": "N/A" 52 | }, 53 | "gpu_operation_mode": { 54 | "current_gom": "N/A", 55 | "pending_gom": "N/A" 56 | }, 57 | "gsp_firmware_version": "N/A", 58 | "gpu_virtualization_mode": { 59 | "virtualization_mode": "None", 60 | "host_vgpu_mode": "N/A" 61 | }, 62 | "gpu_reset_status": { 63 | "reset_required": "No", 64 | "drain_and_reset_recommended": "N/A" 65 | }, 66 | "ibmnpu": { 67 | "relaxed_ordering_mode": "N/A" 68 | }, 69 | "pci": { 70 | "pci_bus": "29", 71 | "pci_device": "00", 72 | "pci_domain": "0000", 73 | "pci_device_id": "280510DE", 74 | "pci_bus_id": "00000000:29:00.0", 75 | "pci_sub_system_id": "51741462", 76 | "pci_gpu_link_info": { 77 | "pcie_gen": { 78 | "max_link_gen": "3", 79 | "current_link_gen": "3", 80 | "device_current_link_gen": "3", 81 | "max_device_link_gen": "4", 82 | "max_host_link_gen": "3" 83 | }, 84 | "link_widths": { 85 | "max_link_width": "8x", 86 | "current_link_width": "8x" 87 | } 88 | }, 89 | "pci_bridge_chip": { 90 | "bridge_chip_type": "N/A", 91 | "bridge_chip_fw": "N/A" 92 | }, 93 | "replay_counter": "0", 94 | "replay_rollover_counter": "0", 95 | "tx_util": "0 KB/s", 96 | "rx_util": "1000 KB/s", 97 | "atomic_caps_inbound": "N/A", 98 | "atomic_caps_outbound": "N/A" 99 | }, 100 | "fan_speed": "0 %", 101 | "performance_state": "P0", 102 | "clocks_event_reasons": { 103 | "clocks_event_reason_gpu_idle": "Active", 104 | "clocks_event_reason_applications_clocks_setting": "Not Active", 105 | "clocks_event_reason_sw_power_cap": "Not Active", 106 | "clocks_event_reason_hw_slowdown": "Not Active", 107 | "clocks_event_reason_hw_thermal_slowdown": "Not Active", 108 | "clocks_event_reason_hw_power_brake_slowdown": "Not Active", 109 | "clocks_event_reason_sync_boost": "Not Active", 110 | "clocks_event_reason_sw_thermal_slowdown": "Not Active", 111 | "clocks_event_reason_display_clocks_setting": "Not Active" 112 | }, 113 | "sparse_operation_mode": "N/A", 114 | "fb_memory_usage": { 115 | "total": "16380 MiB", 116 | "reserved": "299 MiB", 117 | "used": "1328 MiB", 118 | "free": "14751 MiB" 119 | }, 120 | "bar1_memory_usage": { 121 | "total": "256 MiB", 122 | "used": "9 MiB", 123 | "free": "247 MiB" 124 | }, 125 | "cc_protected_memory_usage": { 126 | "total": "0 MiB", 127 | "used": "0 MiB", 128 | "free": "0 MiB" 129 | }, 130 | "compute_mode": "Default", 131 | "utilization": { 132 | "gpu_util": "14 %", 133 | "memory_util": "11 %", 134 | "encoder_util": "0 %", 135 | "decoder_util": "0 %", 136 | "jpeg_util": "0 %", 137 | "ofa_util": "0 %" 138 | }, 139 | "encoder_stats": { 140 | "session_count": "0", 141 | "average_fps": "0", 142 | "average_latency": "0" 143 | }, 144 | "fbc_stats": { 145 | "session_count": "0", 146 | "average_fps": "0", 147 | "average_latency": "0" 148 | }, 149 | "ecc_mode": { 150 | "current_ecc": "N/A", 151 | "pending_ecc": "N/A" 152 | }, 153 | "ecc_errors": { 154 | "volatile": { 155 | "sram_correctable": "N/A", 156 | "sram_uncorrectable_parity": "N/A", 157 | "sram_uncorrectable_secded": "N/A", 158 | "dram_correctable": "N/A", 159 | "dram_uncorrectable": "N/A" 160 | }, 161 | "aggregate": { 162 | "sram_correctable": "N/A", 163 | "sram_uncorrectable_parity": "N/A", 164 | "sram_uncorrectable_secded": "N/A", 165 | "dram_correctable": "N/A", 166 | "dram_uncorrectable": "N/A", 167 | "sram_threshold_exceeded": "N/A" 168 | }, 169 | "aggregate_uncorrectable_sram_sources": { 170 | "sram_l2": "N/A", 171 | "sram_sm": "N/A", 172 | "sram_microcontroller": "N/A", 173 | "sram_pcie": "N/A", 174 | "sram_other": "N/A" 175 | } 176 | }, 177 | "retired_pages": { 178 | "multiple_single_bit_retirement": { 179 | "retired_count": "N/A", 180 | "retired_pagelist": "N/A" 181 | }, 182 | "double_bit_retirement": { 183 | "retired_count": "N/A", 184 | "retired_pagelist": "N/A" 185 | }, 186 | "pending_blacklist": "N/A", 187 | "pending_retirement": "N/A" 188 | }, 189 | "remapped_rows": { 190 | "remapped_row_corr": "0", 191 | "remapped_row_unc": "0", 192 | "remapped_row_pending": "No", 193 | "remapped_row_failure": "No", 194 | "row_remapper_histogram": { 195 | "row_remapper_histogram_max": "64 bank(s)", 196 | "row_remapper_histogram_high": "0 bank(s)", 197 | "row_remapper_histogram_partial": "0 bank(s)", 198 | "row_remapper_histogram_low": "0 bank(s)", 199 | "row_remapper_histogram_none": "0 bank(s)" 200 | } 201 | }, 202 | "temperature": { 203 | "gpu_temp": "59 C", 204 | "gpu_temp_tlimit": "23 C", 205 | "gpu_temp_max_tlimit_threshold": "-7 C", 206 | "gpu_temp_slow_tlimit_threshold": "-2 C", 207 | "gpu_temp_max_gpu_tlimit_threshold": "0 C", 208 | "gpu_target_temperature": "83 C", 209 | "memory_temp": "N/A", 210 | "gpu_temp_max_mem_tlimit_threshold": "N/A" 211 | }, 212 | "supported_gpu_target_temp": { 213 | "gpu_target_temp_min": "65 C", 214 | "gpu_target_temp_max": "88 C" 215 | }, 216 | "gpu_power_readings": { 217 | "power_state": "P0", 218 | "power_draw": "36.26 W", 219 | "current_power_limit": "165.00 W", 220 | "requested_power_limit": "165.00 W", 221 | "default_power_limit": "165.00 W", 222 | "min_power_limit": "100.00 W", 223 | "max_power_limit": "165.00 W" 224 | }, 225 | "module_power_readings": { 226 | "power_state": "P0", 227 | "power_draw": "N/A", 228 | "current_power_limit": "N/A", 229 | "requested_power_limit": "N/A", 230 | "default_power_limit": "N/A", 231 | "min_power_limit": "N/A", 232 | "max_power_limit": "N/A" 233 | }, 234 | "clocks": { 235 | "graphics_clock": "2190 MHz", 236 | "sm_clock": "2190 MHz", 237 | "mem_clock": "9000 MHz", 238 | "video_clock": "1845 MHz" 239 | }, 240 | "applications_clocks": { 241 | "graphics_clock": "N/A", 242 | "mem_clock": "N/A" 243 | }, 244 | "default_applications_clocks": { 245 | "graphics_clock": "N/A", 246 | "mem_clock": "N/A" 247 | }, 248 | "deferred_clocks": { 249 | "mem_clock": "N/A" 250 | }, 251 | "max_clocks": { 252 | "graphics_clock": "3105 MHz", 253 | "sm_clock": "3105 MHz", 254 | "mem_clock": "9001 MHz", 255 | "video_clock": "2415 MHz" 256 | }, 257 | "max_customer_boost_clocks": { 258 | "graphics_clock": "N/A" 259 | }, 260 | "clock_policy": { 261 | "auto_boost": "N/A", 262 | "auto_boost_default": "N/A" 263 | }, 264 | "voltage": { 265 | "graphics_volt": "875.000 mV" 266 | }, 267 | "fabric": { 268 | "state": "N/A", 269 | "status": "N/A" 270 | }, 271 | "supported_clocks": { 272 | "supported_mem_clock": [ 273 | { 274 | "value": "9001 MHz", 275 | "supported_graphics_clock": [ 276 | "3105 MHz", 277 | "3090 MHz", 278 | "3075 MHz", 279 | "3060 MHz", 280 | "3045 MHz", 281 | "3030 MHz", 282 | "3015 MHz", 283 | "3000 MHz", 284 | "2985 MHz", 285 | "2970 MHz", 286 | "2955 MHz", 287 | "2940 MHz", 288 | "2925 MHz", 289 | "2910 MHz", 290 | "2895 MHz", 291 | "2880 MHz", 292 | "2865 MHz", 293 | "2850 MHz", 294 | "2835 MHz", 295 | "2820 MHz", 296 | "2805 MHz", 297 | "2790 MHz", 298 | "2775 MHz", 299 | "2760 MHz", 300 | "2745 MHz", 301 | "2730 MHz", 302 | "2715 MHz", 303 | "2700 MHz", 304 | "2685 MHz", 305 | "2670 MHz", 306 | "2655 MHz", 307 | "2640 MHz", 308 | "2625 MHz", 309 | "2610 MHz", 310 | "2595 MHz", 311 | "2580 MHz", 312 | "2565 MHz", 313 | "2550 MHz", 314 | "2535 MHz", 315 | "2520 MHz", 316 | "2505 MHz", 317 | "2490 MHz", 318 | "2475 MHz", 319 | "2460 MHz", 320 | "2445 MHz", 321 | "2430 MHz", 322 | "2415 MHz", 323 | "2400 MHz", 324 | "2385 MHz", 325 | "2370 MHz", 326 | "2355 MHz", 327 | "2340 MHz", 328 | "2325 MHz", 329 | "2310 MHz", 330 | "2295 MHz", 331 | "2280 MHz", 332 | "2265 MHz", 333 | "2250 MHz", 334 | "2235 MHz", 335 | "2220 MHz", 336 | "2205 MHz", 337 | "2190 MHz", 338 | "2175 MHz", 339 | "2160 MHz", 340 | "2145 MHz", 341 | "2130 MHz", 342 | "2115 MHz", 343 | "2100 MHz", 344 | "2085 MHz", 345 | "2070 MHz", 346 | "2055 MHz", 347 | "2040 MHz", 348 | "2025 MHz", 349 | "2010 MHz", 350 | "1995 MHz", 351 | "1980 MHz", 352 | "1965 MHz", 353 | "1950 MHz", 354 | "1935 MHz", 355 | "1920 MHz", 356 | "1905 MHz", 357 | "1890 MHz", 358 | "1875 MHz", 359 | "1860 MHz", 360 | "1845 MHz", 361 | "1830 MHz", 362 | "1815 MHz", 363 | "1800 MHz", 364 | "1785 MHz", 365 | "1770 MHz", 366 | "1755 MHz", 367 | "1740 MHz", 368 | "1725 MHz", 369 | "1710 MHz", 370 | "1695 MHz", 371 | "1680 MHz", 372 | "1665 MHz", 373 | "1650 MHz", 374 | "1635 MHz", 375 | "1620 MHz", 376 | "1605 MHz", 377 | "1590 MHz", 378 | "1575 MHz", 379 | "1560 MHz", 380 | "1545 MHz", 381 | "1530 MHz", 382 | "1515 MHz", 383 | "1500 MHz", 384 | "1485 MHz", 385 | "1470 MHz", 386 | "1455 MHz", 387 | "1440 MHz", 388 | "1425 MHz", 389 | "1410 MHz", 390 | "1395 MHz", 391 | "1380 MHz", 392 | "1365 MHz", 393 | "1350 MHz", 394 | "1335 MHz", 395 | "1320 MHz", 396 | "1305 MHz", 397 | "1290 MHz", 398 | "1275 MHz", 399 | "1260 MHz", 400 | "1245 MHz", 401 | "1230 MHz", 402 | "1215 MHz", 403 | "1200 MHz", 404 | "1185 MHz", 405 | "1170 MHz", 406 | "1155 MHz", 407 | "1140 MHz", 408 | "1125 MHz", 409 | "1110 MHz", 410 | "1095 MHz", 411 | "1080 MHz", 412 | "1065 MHz", 413 | "1050 MHz", 414 | "1035 MHz", 415 | "1020 MHz", 416 | "1005 MHz", 417 | "990 MHz", 418 | "975 MHz", 419 | "960 MHz", 420 | "945 MHz", 421 | "930 MHz", 422 | "915 MHz", 423 | "900 MHz", 424 | "885 MHz", 425 | "870 MHz", 426 | "855 MHz", 427 | "840 MHz", 428 | "825 MHz", 429 | "810 MHz", 430 | "795 MHz", 431 | "780 MHz", 432 | "765 MHz", 433 | "750 MHz", 434 | "735 MHz", 435 | "720 MHz", 436 | "705 MHz", 437 | "690 MHz", 438 | "675 MHz", 439 | "660 MHz", 440 | "645 MHz", 441 | "630 MHz", 442 | "615 MHz", 443 | "600 MHz", 444 | "585 MHz", 445 | "570 MHz", 446 | "555 MHz", 447 | "540 MHz", 448 | "525 MHz", 449 | "510 MHz", 450 | "495 MHz", 451 | "480 MHz", 452 | "465 MHz", 453 | "450 MHz", 454 | "435 MHz", 455 | "420 MHz", 456 | "405 MHz", 457 | "390 MHz", 458 | "375 MHz", 459 | "360 MHz", 460 | "345 MHz", 461 | "330 MHz", 462 | "315 MHz", 463 | "300 MHz", 464 | "285 MHz", 465 | "270 MHz", 466 | "255 MHz", 467 | "240 MHz", 468 | "225 MHz", 469 | "210 MHz" 470 | ] 471 | }, 472 | { 473 | "value": "8751 MHz", 474 | "supported_graphics_clock": [ 475 | "3105 MHz", 476 | "3090 MHz", 477 | "3075 MHz", 478 | "3060 MHz", 479 | "3045 MHz", 480 | "3030 MHz", 481 | "3015 MHz", 482 | "3000 MHz", 483 | "2985 MHz", 484 | "2970 MHz", 485 | "2955 MHz", 486 | "2940 MHz", 487 | "2925 MHz", 488 | "2910 MHz", 489 | "2895 MHz", 490 | "2880 MHz", 491 | "2865 MHz", 492 | "2850 MHz", 493 | "2835 MHz", 494 | "2820 MHz", 495 | "2805 MHz", 496 | "2790 MHz", 497 | "2775 MHz", 498 | "2760 MHz", 499 | "2745 MHz", 500 | "2730 MHz", 501 | "2715 MHz", 502 | "2700 MHz", 503 | "2685 MHz", 504 | "2670 MHz", 505 | "2655 MHz", 506 | "2640 MHz", 507 | "2625 MHz", 508 | "2610 MHz", 509 | "2595 MHz", 510 | "2580 MHz", 511 | "2565 MHz", 512 | "2550 MHz", 513 | "2535 MHz", 514 | "2520 MHz", 515 | "2505 MHz", 516 | "2490 MHz", 517 | "2475 MHz", 518 | "2460 MHz", 519 | "2445 MHz", 520 | "2430 MHz", 521 | "2415 MHz", 522 | "2400 MHz", 523 | "2385 MHz", 524 | "2370 MHz", 525 | "2355 MHz", 526 | "2340 MHz", 527 | "2325 MHz", 528 | "2310 MHz", 529 | "2295 MHz", 530 | "2280 MHz", 531 | "2265 MHz", 532 | "2250 MHz", 533 | "2235 MHz", 534 | "2220 MHz", 535 | "2205 MHz", 536 | "2190 MHz", 537 | "2175 MHz", 538 | "2160 MHz", 539 | "2145 MHz", 540 | "2130 MHz", 541 | "2115 MHz", 542 | "2100 MHz", 543 | "2085 MHz", 544 | "2070 MHz", 545 | "2055 MHz", 546 | "2040 MHz", 547 | "2025 MHz", 548 | "2010 MHz", 549 | "1995 MHz", 550 | "1980 MHz", 551 | "1965 MHz", 552 | "1950 MHz", 553 | "1935 MHz", 554 | "1920 MHz", 555 | "1905 MHz", 556 | "1890 MHz", 557 | "1875 MHz", 558 | "1860 MHz", 559 | "1845 MHz", 560 | "1830 MHz", 561 | "1815 MHz", 562 | "1800 MHz", 563 | "1785 MHz", 564 | "1770 MHz", 565 | "1755 MHz", 566 | "1740 MHz", 567 | "1725 MHz", 568 | "1710 MHz", 569 | "1695 MHz", 570 | "1680 MHz", 571 | "1665 MHz", 572 | "1650 MHz", 573 | "1635 MHz", 574 | "1620 MHz", 575 | "1605 MHz", 576 | "1590 MHz", 577 | "1575 MHz", 578 | "1560 MHz", 579 | "1545 MHz", 580 | "1530 MHz", 581 | "1515 MHz", 582 | "1500 MHz", 583 | "1485 MHz", 584 | "1470 MHz", 585 | "1455 MHz", 586 | "1440 MHz", 587 | "1425 MHz", 588 | "1410 MHz", 589 | "1395 MHz", 590 | "1380 MHz", 591 | "1365 MHz", 592 | "1350 MHz", 593 | "1335 MHz", 594 | "1320 MHz", 595 | "1305 MHz", 596 | "1290 MHz", 597 | "1275 MHz", 598 | "1260 MHz", 599 | "1245 MHz", 600 | "1230 MHz", 601 | "1215 MHz", 602 | "1200 MHz", 603 | "1185 MHz", 604 | "1170 MHz", 605 | "1155 MHz", 606 | "1140 MHz", 607 | "1125 MHz", 608 | "1110 MHz", 609 | "1095 MHz", 610 | "1080 MHz", 611 | "1065 MHz", 612 | "1050 MHz", 613 | "1035 MHz", 614 | "1020 MHz", 615 | "1005 MHz", 616 | "990 MHz", 617 | "975 MHz", 618 | "960 MHz", 619 | "945 MHz", 620 | "930 MHz", 621 | "915 MHz", 622 | "900 MHz", 623 | "885 MHz", 624 | "870 MHz", 625 | "855 MHz", 626 | "840 MHz", 627 | "825 MHz", 628 | "810 MHz", 629 | "795 MHz", 630 | "780 MHz", 631 | "765 MHz", 632 | "750 MHz", 633 | "735 MHz", 634 | "720 MHz", 635 | "705 MHz", 636 | "690 MHz", 637 | "675 MHz", 638 | "660 MHz", 639 | "645 MHz", 640 | "630 MHz", 641 | "615 MHz", 642 | "600 MHz", 643 | "585 MHz", 644 | "570 MHz", 645 | "555 MHz", 646 | "540 MHz", 647 | "525 MHz", 648 | "510 MHz", 649 | "495 MHz", 650 | "480 MHz", 651 | "465 MHz", 652 | "450 MHz", 653 | "435 MHz", 654 | "420 MHz", 655 | "405 MHz", 656 | "390 MHz", 657 | "375 MHz", 658 | "360 MHz", 659 | "345 MHz", 660 | "330 MHz", 661 | "315 MHz", 662 | "300 MHz", 663 | "285 MHz", 664 | "270 MHz", 665 | "255 MHz", 666 | "240 MHz", 667 | "225 MHz", 668 | "210 MHz" 669 | ] 670 | }, 671 | { 672 | "value": "5001 MHz", 673 | "supported_graphics_clock": [ 674 | "3105 MHz", 675 | "3090 MHz", 676 | "3075 MHz", 677 | "3060 MHz", 678 | "3045 MHz", 679 | "3030 MHz", 680 | "3015 MHz", 681 | "3000 MHz", 682 | "2985 MHz", 683 | "2970 MHz", 684 | "2955 MHz", 685 | "2940 MHz", 686 | "2925 MHz", 687 | "2910 MHz", 688 | "2895 MHz", 689 | "2880 MHz", 690 | "2865 MHz", 691 | "2850 MHz", 692 | "2835 MHz", 693 | "2820 MHz", 694 | "2805 MHz", 695 | "2790 MHz", 696 | "2775 MHz", 697 | "2760 MHz", 698 | "2745 MHz", 699 | "2730 MHz", 700 | "2715 MHz", 701 | "2700 MHz", 702 | "2685 MHz", 703 | "2670 MHz", 704 | "2655 MHz", 705 | "2640 MHz", 706 | "2625 MHz", 707 | "2610 MHz", 708 | "2595 MHz", 709 | "2580 MHz", 710 | "2565 MHz", 711 | "2550 MHz", 712 | "2535 MHz", 713 | "2520 MHz", 714 | "2505 MHz", 715 | "2490 MHz", 716 | "2475 MHz", 717 | "2460 MHz", 718 | "2445 MHz", 719 | "2430 MHz", 720 | "2415 MHz", 721 | "2400 MHz", 722 | "2385 MHz", 723 | "2370 MHz", 724 | "2355 MHz", 725 | "2340 MHz", 726 | "2325 MHz", 727 | "2310 MHz", 728 | "2295 MHz", 729 | "2280 MHz", 730 | "2265 MHz", 731 | "2250 MHz", 732 | "2235 MHz", 733 | "2220 MHz", 734 | "2205 MHz", 735 | "2190 MHz", 736 | "2175 MHz", 737 | "2160 MHz", 738 | "2145 MHz", 739 | "2130 MHz", 740 | "2115 MHz", 741 | "2100 MHz", 742 | "2085 MHz", 743 | "2070 MHz", 744 | "2055 MHz", 745 | "2040 MHz", 746 | "2025 MHz", 747 | "2010 MHz", 748 | "1995 MHz", 749 | "1980 MHz", 750 | "1965 MHz", 751 | "1950 MHz", 752 | "1935 MHz", 753 | "1920 MHz", 754 | "1905 MHz", 755 | "1890 MHz", 756 | "1875 MHz", 757 | "1860 MHz", 758 | "1845 MHz", 759 | "1830 MHz", 760 | "1815 MHz", 761 | "1800 MHz", 762 | "1785 MHz", 763 | "1770 MHz", 764 | "1755 MHz", 765 | "1740 MHz", 766 | "1725 MHz", 767 | "1710 MHz", 768 | "1695 MHz", 769 | "1680 MHz", 770 | "1665 MHz", 771 | "1650 MHz", 772 | "1635 MHz", 773 | "1620 MHz", 774 | "1605 MHz", 775 | "1590 MHz", 776 | "1575 MHz", 777 | "1560 MHz", 778 | "1545 MHz", 779 | "1530 MHz", 780 | "1515 MHz", 781 | "1500 MHz", 782 | "1485 MHz", 783 | "1470 MHz", 784 | "1455 MHz", 785 | "1440 MHz", 786 | "1425 MHz", 787 | "1410 MHz", 788 | "1395 MHz", 789 | "1380 MHz", 790 | "1365 MHz", 791 | "1350 MHz", 792 | "1335 MHz", 793 | "1320 MHz", 794 | "1305 MHz", 795 | "1290 MHz", 796 | "1275 MHz", 797 | "1260 MHz", 798 | "1245 MHz", 799 | "1230 MHz", 800 | "1215 MHz", 801 | "1200 MHz", 802 | "1185 MHz", 803 | "1170 MHz", 804 | "1155 MHz", 805 | "1140 MHz", 806 | "1125 MHz", 807 | "1110 MHz", 808 | "1095 MHz", 809 | "1080 MHz", 810 | "1065 MHz", 811 | "1050 MHz", 812 | "1035 MHz", 813 | "1020 MHz", 814 | "1005 MHz", 815 | "990 MHz", 816 | "975 MHz", 817 | "960 MHz", 818 | "945 MHz", 819 | "930 MHz", 820 | "915 MHz", 821 | "900 MHz", 822 | "885 MHz", 823 | "870 MHz", 824 | "855 MHz", 825 | "840 MHz", 826 | "825 MHz", 827 | "810 MHz", 828 | "795 MHz", 829 | "780 MHz", 830 | "765 MHz", 831 | "750 MHz", 832 | "735 MHz", 833 | "720 MHz", 834 | "705 MHz", 835 | "690 MHz", 836 | "675 MHz", 837 | "660 MHz", 838 | "645 MHz", 839 | "630 MHz", 840 | "615 MHz", 841 | "600 MHz", 842 | "585 MHz", 843 | "570 MHz", 844 | "555 MHz", 845 | "540 MHz", 846 | "525 MHz", 847 | "510 MHz", 848 | "495 MHz", 849 | "480 MHz", 850 | "465 MHz", 851 | "450 MHz", 852 | "435 MHz", 853 | "420 MHz", 854 | "405 MHz", 855 | "390 MHz", 856 | "375 MHz", 857 | "360 MHz", 858 | "345 MHz", 859 | "330 MHz", 860 | "315 MHz", 861 | "300 MHz", 862 | "285 MHz", 863 | "270 MHz", 864 | "255 MHz", 865 | "240 MHz", 866 | "225 MHz", 867 | "210 MHz" 868 | ] 869 | }, 870 | { 871 | "value": "810 MHz", 872 | "supported_graphics_clock": [ 873 | "3105 MHz", 874 | "3090 MHz", 875 | "3075 MHz", 876 | "3060 MHz", 877 | "3045 MHz", 878 | "3030 MHz", 879 | "3015 MHz", 880 | "3000 MHz", 881 | "2985 MHz", 882 | "2970 MHz", 883 | "2955 MHz", 884 | "2940 MHz", 885 | "2925 MHz", 886 | "2910 MHz", 887 | "2895 MHz", 888 | "2880 MHz", 889 | "2865 MHz", 890 | "2850 MHz", 891 | "2835 MHz", 892 | "2820 MHz", 893 | "2805 MHz", 894 | "2790 MHz", 895 | "2775 MHz", 896 | "2760 MHz", 897 | "2745 MHz", 898 | "2730 MHz", 899 | "2715 MHz", 900 | "2700 MHz", 901 | "2685 MHz", 902 | "2670 MHz", 903 | "2655 MHz", 904 | "2640 MHz", 905 | "2625 MHz", 906 | "2610 MHz", 907 | "2595 MHz", 908 | "2580 MHz", 909 | "2565 MHz", 910 | "2550 MHz", 911 | "2535 MHz", 912 | "2520 MHz", 913 | "2505 MHz", 914 | "2490 MHz", 915 | "2475 MHz", 916 | "2460 MHz", 917 | "2445 MHz", 918 | "2430 MHz", 919 | "2415 MHz", 920 | "2400 MHz", 921 | "2385 MHz", 922 | "2370 MHz", 923 | "2355 MHz", 924 | "2340 MHz", 925 | "2325 MHz", 926 | "2310 MHz", 927 | "2295 MHz", 928 | "2280 MHz", 929 | "2265 MHz", 930 | "2250 MHz", 931 | "2235 MHz", 932 | "2220 MHz", 933 | "2205 MHz", 934 | "2190 MHz", 935 | "2175 MHz", 936 | "2160 MHz", 937 | "2145 MHz", 938 | "2130 MHz", 939 | "2115 MHz", 940 | "2100 MHz", 941 | "2085 MHz", 942 | "2070 MHz", 943 | "2055 MHz", 944 | "2040 MHz", 945 | "2025 MHz", 946 | "2010 MHz", 947 | "1995 MHz", 948 | "1980 MHz", 949 | "1965 MHz", 950 | "1950 MHz", 951 | "1935 MHz", 952 | "1920 MHz", 953 | "1905 MHz", 954 | "1890 MHz", 955 | "1875 MHz", 956 | "1860 MHz", 957 | "1845 MHz", 958 | "1830 MHz", 959 | "1815 MHz", 960 | "1800 MHz", 961 | "1785 MHz", 962 | "1770 MHz", 963 | "1755 MHz", 964 | "1740 MHz", 965 | "1725 MHz", 966 | "1710 MHz", 967 | "1695 MHz", 968 | "1680 MHz", 969 | "1665 MHz", 970 | "1650 MHz", 971 | "1635 MHz", 972 | "1620 MHz", 973 | "1605 MHz", 974 | "1590 MHz", 975 | "1575 MHz", 976 | "1560 MHz", 977 | "1545 MHz", 978 | "1530 MHz", 979 | "1515 MHz", 980 | "1500 MHz", 981 | "1485 MHz", 982 | "1470 MHz", 983 | "1455 MHz", 984 | "1440 MHz", 985 | "1425 MHz", 986 | "1410 MHz", 987 | "1395 MHz", 988 | "1380 MHz", 989 | "1365 MHz", 990 | "1350 MHz", 991 | "1335 MHz", 992 | "1320 MHz", 993 | "1305 MHz", 994 | "1290 MHz", 995 | "1275 MHz", 996 | "1260 MHz", 997 | "1245 MHz", 998 | "1230 MHz", 999 | "1215 MHz", 1000 | "1200 MHz", 1001 | "1185 MHz", 1002 | "1170 MHz", 1003 | "1155 MHz", 1004 | "1140 MHz", 1005 | "1125 MHz", 1006 | "1110 MHz", 1007 | "1095 MHz", 1008 | "1080 MHz", 1009 | "1065 MHz", 1010 | "1050 MHz", 1011 | "1035 MHz", 1012 | "1020 MHz", 1013 | "1005 MHz", 1014 | "990 MHz", 1015 | "975 MHz", 1016 | "960 MHz", 1017 | "945 MHz", 1018 | "930 MHz", 1019 | "915 MHz", 1020 | "900 MHz", 1021 | "885 MHz", 1022 | "870 MHz", 1023 | "855 MHz", 1024 | "840 MHz", 1025 | "825 MHz", 1026 | "810 MHz", 1027 | "795 MHz", 1028 | "780 MHz", 1029 | "765 MHz", 1030 | "750 MHz", 1031 | "735 MHz", 1032 | "720 MHz", 1033 | "705 MHz", 1034 | "690 MHz", 1035 | "675 MHz", 1036 | "660 MHz", 1037 | "645 MHz", 1038 | "630 MHz", 1039 | "615 MHz", 1040 | "600 MHz", 1041 | "585 MHz", 1042 | "570 MHz", 1043 | "555 MHz", 1044 | "540 MHz", 1045 | "525 MHz", 1046 | "510 MHz", 1047 | "495 MHz", 1048 | "480 MHz", 1049 | "465 MHz", 1050 | "450 MHz", 1051 | "435 MHz", 1052 | "420 MHz", 1053 | "405 MHz", 1054 | "390 MHz", 1055 | "375 MHz", 1056 | "360 MHz", 1057 | "345 MHz", 1058 | "330 MHz", 1059 | "315 MHz", 1060 | "300 MHz", 1061 | "285 MHz", 1062 | "270 MHz", 1063 | "255 MHz", 1064 | "240 MHz", 1065 | "225 MHz", 1066 | "210 MHz" 1067 | ] 1068 | }, 1069 | { 1070 | "value": "405 MHz", 1071 | "supported_graphics_clock": [ 1072 | "405 MHz", 1073 | "390 MHz", 1074 | "375 MHz", 1075 | "360 MHz", 1076 | "345 MHz", 1077 | "330 MHz", 1078 | "315 MHz", 1079 | "300 MHz", 1080 | "285 MHz", 1081 | "270 MHz", 1082 | "255 MHz", 1083 | "240 MHz", 1084 | "225 MHz", 1085 | "210 MHz" 1086 | ] 1087 | } 1088 | ] 1089 | }, 1090 | "processes": { 1091 | "process_info": [ 1092 | { 1093 | "gpu_instance_id": "N/A", 1094 | "compute_instance_id": "N/A", 1095 | "pid": "1832", 1096 | "type": "G", 1097 | "process_name": "/usr/lib/xorg/Xorg", 1098 | "used_memory": "798 MiB" 1099 | }, 1100 | { 1101 | "gpu_instance_id": "N/A", 1102 | "compute_instance_id": "N/A", 1103 | "pid": "2472", 1104 | "type": "G", 1105 | "process_name": "cinnamon", 1106 | "used_memory": "73 MiB" 1107 | }, 1108 | { 1109 | "gpu_instance_id": "N/A", 1110 | "compute_instance_id": "N/A", 1111 | "pid": "2804", 1112 | "type": "G", 1113 | "process_name": "/usr/lib/firefox/firefox", 1114 | "used_memory": "9 MiB" 1115 | }, 1116 | { 1117 | "gpu_instance_id": "N/A", 1118 | "compute_instance_id": "N/A", 1119 | "pid": "3479", 1120 | "type": "G", 1121 | "process_name": "/usr/share/code/code --type=gpu-process --crashpad-handler-pid=3465 --enable-crash-reporter=976be4d2-a52d-4ac6-943e-5870eb257327,no_channel --user-data-dir=/home/mintuser/.config/Code --gpu-preferences=WAAAAAAAAAAgAAAEAAAAAAAAAAAAAAAAAABgAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAGAAAAAAAAAAYAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAA== --shared-files --field-trial-handle=0,i,12388518887929057115,15918694608603350231,262144 --disable-features=CalculateNativeWinOcclusion,SpareRendererForSitePerProcess", 1122 | "used_memory": "167 MiB" 1123 | }, 1124 | { 1125 | "gpu_instance_id": "N/A", 1126 | "compute_instance_id": "N/A", 1127 | "pid": "3906", 1128 | "type": "G", 1129 | "process_name": "/usr/lib/chromium/chromium --type=gpu-process --enable-gpu-rasterization --ozone-platform=x11 --use-angle=gl --crashpad-handler-pid=3876 --enable-crash-reporter=,for Linux Mint --change-stack-guard-on-fork=enable --gpu-preferences=WAAAAAAAAAAgAAAEAAAAAAAAAAAAAAAAAABgAAAAAAA4AAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAGAAAAAAAAAAYAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAA== --use-gl=angle --shared-files --field-trial-handle=0,i,15435256641150591609,9034592842293978136,262144 --enable-features=UseChromeOSDirectVideoDecoder,VaapiVideoDecodeLinuxGL,VaapiVideoDecoder,VaapiVideoEncoder --disable-features=GlobalVaapiLock,TFLiteLanguageDetectionEnabled --variations-seed-version", 1130 | "used_memory": "94 MiB" 1131 | }, 1132 | { 1133 | "gpu_instance_id": "N/A", 1134 | "compute_instance_id": "N/A", 1135 | "pid": "34868", 1136 | "type": "G", 1137 | "process_name": "/usr/bin/nvidia-settings", 1138 | "used_memory": "36 MiB" 1139 | }, 1140 | { 1141 | "gpu_instance_id": "N/A", 1142 | "compute_instance_id": "N/A", 1143 | "pid": "183805", 1144 | "type": "G", 1145 | "process_name": "/tmp/.mount_Bambu_dZWlbM/bin/bambu-studio", 1146 | "used_memory": "98 MiB" 1147 | } 1148 | ] 1149 | }, 1150 | "accounted_processes": null 1151 | } 1152 | } 1153 | } -------------------------------------------------------------------------------- /o_xml_nvidia.json: -------------------------------------------------------------------------------- 1 | { 2 | "@version": "1.0", 3 | "#doctype": { 4 | "@nvsmi_device_v12.dtd": "", 5 | "@nvidia_smi_log": "", 6 | "@SYSTEM": "" 7 | }, 8 | "nvidia_smi_log": { 9 | "timestamp": "Thu Sep 12 21:48:04 2024", 10 | "driver_version": "535.171.04", 11 | "cuda_version": "12.2", 12 | "attached_gpus": "1", 13 | "gpu": { 14 | "@id": "00000000:01:00.0", 15 | "product_name": "NVIDIA GeForce RTX 3070 Laptop GPU", 16 | "product_brand": "GeForce", 17 | "product_architecture": "Ampere", 18 | "display_mode": "Enabled", 19 | "display_active": "Enabled", 20 | "persistence_mode": "Disabled", 21 | "addressing_mode": "None", 22 | "mig_mode": { 23 | "current_mig": "N/A", 24 | "pending_mig": "N/A" 25 | }, 26 | "mig_devices": "None", 27 | "accounting_mode": "Disabled", 28 | "accounting_mode_buffer_size": "4000", 29 | "driver_model": { 30 | "current_dm": "N/A", 31 | "pending_dm": "N/A" 32 | }, 33 | "serial": "N/A", 34 | "uuid": "GPU-a892906d-a823-1169-a3c7-74ecddc4f6d5", 35 | "minor_number": "0", 36 | "vbios_version": "94.04.83.00.13", 37 | "multigpu_board": "No", 38 | "board_id": "0x100", 39 | "board_part_number": "N/A", 40 | "gpu_part_number": "24DD-750-A1", 41 | "gpu_fru_part_number": "N/A", 42 | "gpu_module_id": "1", 43 | "inforom_version": { 44 | "img_version": "G001.0000.94.01", 45 | "oem_object": "2.0", 46 | "ecc_object": "N/A", 47 | "pwr_object": "N/A" 48 | }, 49 | "inforom_bbx_flush": { 50 | "latest_timestamp": "N/A", 51 | "latest_duration": "N/A" 52 | }, 53 | "gpu_operation_mode": { 54 | "current_gom": "N/A", 55 | "pending_gom": "N/A" 56 | }, 57 | "gsp_firmware_version": "N/A", 58 | "gpu_virtualization_mode": { 59 | "virtualization_mode": "None", 60 | "host_vgpu_mode": "N/A" 61 | }, 62 | "gpu_reset_status": { 63 | "reset_required": "No", 64 | "drain_and_reset_recommended": "N/A" 65 | }, 66 | "ibmnpu": { 67 | "relaxed_ordering_mode": "N/A" 68 | }, 69 | "pci": { 70 | "pci_bus": "01", 71 | "pci_device": "00", 72 | "pci_domain": "0000", 73 | "pci_device_id": "24DD10DE", 74 | "pci_bus_id": "00000000:01:00.0", 75 | "pci_sub_system_id": "3B2617AA", 76 | "pci_gpu_link_info": { 77 | "pcie_gen": { 78 | "max_link_gen": "4", 79 | "current_link_gen": "4", 80 | "device_current_link_gen": "4", 81 | "max_device_link_gen": "4", 82 | "max_host_link_gen": "4" 83 | }, 84 | "link_widths": { 85 | "max_link_width": "16x", 86 | "current_link_width": "8x" 87 | } 88 | }, 89 | "pci_bridge_chip": { 90 | "bridge_chip_type": "N/A", 91 | "bridge_chip_fw": "N/A" 92 | }, 93 | "replay_counter": "0", 94 | "replay_rollover_counter": "0", 95 | "tx_util": "1000 KB/s", 96 | "rx_util": "0 KB/s", 97 | "atomic_caps_inbound": "N/A", 98 | "atomic_caps_outbound": "N/A" 99 | }, 100 | "fan_speed": "N/A", 101 | "performance_state": "P0", 102 | "clocks_event_reasons": { 103 | "clocks_event_reason_gpu_idle": "Active", 104 | "clocks_event_reason_applications_clocks_setting": "Not Active", 105 | "clocks_event_reason_sw_power_cap": "Not Active", 106 | "clocks_event_reason_hw_slowdown": "Not Active", 107 | "clocks_event_reason_hw_thermal_slowdown": "Not Active", 108 | "clocks_event_reason_hw_power_brake_slowdown": "Not Active", 109 | "clocks_event_reason_sync_boost": "Not Active", 110 | "clocks_event_reason_sw_thermal_slowdown": "Not Active", 111 | "clocks_event_reason_display_clocks_setting": "Not Active" 112 | }, 113 | "sparse_operation_mode": "N/A", 114 | "fb_memory_usage": { 115 | "total": "8192 MiB", 116 | "reserved": "243 MiB", 117 | "used": "1141 MiB", 118 | "free": "6807 MiB" 119 | }, 120 | "bar1_memory_usage": { 121 | "total": "8192 MiB", 122 | "used": "30 MiB", 123 | "free": "8162 MiB" 124 | }, 125 | "cc_protected_memory_usage": { 126 | "total": "0 MiB", 127 | "used": "0 MiB", 128 | "free": "0 MiB" 129 | }, 130 | "compute_mode": "Default", 131 | "utilization": { 132 | "gpu_util": "0 %", 133 | "memory_util": "1 %", 134 | "encoder_util": "0 %", 135 | "decoder_util": "0 %", 136 | "jpeg_util": "0 %", 137 | "ofa_util": "0 %" 138 | }, 139 | "encoder_stats": { 140 | "session_count": "0", 141 | "average_fps": "0", 142 | "average_latency": "0" 143 | }, 144 | "fbc_stats": { 145 | "session_count": "0", 146 | "average_fps": "0", 147 | "average_latency": "0" 148 | }, 149 | "ecc_mode": { 150 | "current_ecc": "N/A", 151 | "pending_ecc": "N/A" 152 | }, 153 | "ecc_errors": { 154 | "volatile": { 155 | "sram_correctable": "N/A", 156 | "sram_uncorrectable_parity": "N/A", 157 | "sram_uncorrectable_secded": "N/A", 158 | "dram_correctable": "N/A", 159 | "dram_uncorrectable": "N/A" 160 | }, 161 | "aggregate": { 162 | "sram_correctable": "N/A", 163 | "sram_uncorrectable_parity": "N/A", 164 | "sram_uncorrectable_secded": "N/A", 165 | "dram_correctable": "N/A", 166 | "dram_uncorrectable": "N/A", 167 | "sram_threshold_exceeded": "N/A" 168 | }, 169 | "aggregate_uncorrectable_sram_sources": { 170 | "sram_l2": "N/A", 171 | "sram_sm": "N/A", 172 | "sram_microcontroller": "N/A", 173 | "sram_pcie": "N/A", 174 | "sram_other": "N/A" 175 | } 176 | }, 177 | "retired_pages": { 178 | "multiple_single_bit_retirement": { 179 | "retired_count": "N/A", 180 | "retired_pagelist": "N/A" 181 | }, 182 | "double_bit_retirement": { 183 | "retired_count": "N/A", 184 | "retired_pagelist": "N/A" 185 | }, 186 | "pending_blacklist": "N/A", 187 | "pending_retirement": "N/A" 188 | }, 189 | "remapped_rows": "N/A", 190 | "temperature": { 191 | "gpu_temp": "50 C", 192 | "gpu_temp_tlimit": "N/A", 193 | "gpu_temp_max_threshold": "101 C", 194 | "gpu_temp_slow_threshold": "98 C", 195 | "gpu_temp_max_gpu_threshold": "87 C", 196 | "gpu_target_temperature": "N/A", 197 | "memory_temp": "N/A", 198 | "gpu_temp_max_mem_threshold": "N/A" 199 | }, 200 | "supported_gpu_target_temp": { 201 | "gpu_target_temp_min": "N/A", 202 | "gpu_target_temp_max": "N/A" 203 | }, 204 | "gpu_power_readings": { 205 | "power_state": "P0", 206 | "power_draw": "38.00 W", 207 | "current_power_limit": "115.00 W", 208 | "requested_power_limit": "115.00 W", 209 | "default_power_limit": "115.00 W", 210 | "min_power_limit": "1.00 W", 211 | "max_power_limit": "150.00 W" 212 | }, 213 | "module_power_readings": { 214 | "power_state": "P0", 215 | "power_draw": "N/A", 216 | "current_power_limit": "N/A", 217 | "requested_power_limit": "N/A", 218 | "default_power_limit": "N/A", 219 | "min_power_limit": "N/A", 220 | "max_power_limit": "N/A" 221 | }, 222 | "clocks": { 223 | "graphics_clock": "1560 MHz", 224 | "sm_clock": "1560 MHz", 225 | "mem_clock": "7000 MHz", 226 | "video_clock": "1380 MHz" 227 | }, 228 | "applications_clocks": { 229 | "graphics_clock": "N/A", 230 | "mem_clock": "N/A" 231 | }, 232 | "default_applications_clocks": { 233 | "graphics_clock": "N/A", 234 | "mem_clock": "N/A" 235 | }, 236 | "deferred_clocks": { 237 | "mem_clock": "N/A" 238 | }, 239 | "max_clocks": { 240 | "graphics_clock": "2100 MHz", 241 | "sm_clock": "2100 MHz", 242 | "mem_clock": "7001 MHz", 243 | "video_clock": "1950 MHz" 244 | }, 245 | "max_customer_boost_clocks": { 246 | "graphics_clock": "N/A" 247 | }, 248 | "clock_policy": { 249 | "auto_boost": "N/A", 250 | "auto_boost_default": "N/A" 251 | }, 252 | "voltage": { 253 | "graphics_volt": "850.000 mV" 254 | }, 255 | "fabric": { 256 | "state": "N/A", 257 | "status": "N/A" 258 | }, 259 | "supported_clocks": { 260 | "supported_mem_clock": [ 261 | { 262 | "value": "7001 MHz", 263 | "supported_graphics_clock": [ 264 | "2100 MHz", 265 | "2085 MHz", 266 | "2070 MHz", 267 | "2055 MHz", 268 | "2040 MHz", 269 | "2025 MHz", 270 | "2010 MHz", 271 | "1995 MHz", 272 | "1980 MHz", 273 | "1965 MHz", 274 | "1950 MHz", 275 | "1935 MHz", 276 | "1920 MHz", 277 | "1905 MHz", 278 | "1890 MHz", 279 | "1875 MHz", 280 | "1860 MHz", 281 | "1845 MHz", 282 | "1830 MHz", 283 | "1815 MHz", 284 | "1800 MHz", 285 | "1785 MHz", 286 | "1770 MHz", 287 | "1755 MHz", 288 | "1740 MHz", 289 | "1725 MHz", 290 | "1710 MHz", 291 | "1695 MHz", 292 | "1680 MHz", 293 | "1665 MHz", 294 | "1650 MHz", 295 | "1635 MHz", 296 | "1620 MHz", 297 | "1605 MHz", 298 | "1590 MHz", 299 | "1575 MHz", 300 | "1560 MHz", 301 | "1545 MHz", 302 | "1530 MHz", 303 | "1515 MHz", 304 | "1500 MHz", 305 | "1485 MHz", 306 | "1470 MHz", 307 | "1455 MHz", 308 | "1440 MHz", 309 | "1425 MHz", 310 | "1410 MHz", 311 | "1395 MHz", 312 | "1380 MHz", 313 | "1365 MHz", 314 | "1350 MHz", 315 | "1335 MHz", 316 | "1320 MHz", 317 | "1305 MHz", 318 | "1290 MHz", 319 | "1275 MHz", 320 | "1260 MHz", 321 | "1245 MHz", 322 | "1230 MHz", 323 | "1215 MHz", 324 | "1200 MHz", 325 | "1185 MHz", 326 | "1170 MHz", 327 | "1155 MHz", 328 | "1140 MHz", 329 | "1125 MHz", 330 | "1110 MHz", 331 | "1095 MHz", 332 | "1080 MHz", 333 | "1065 MHz", 334 | "1050 MHz", 335 | "1035 MHz", 336 | "1020 MHz", 337 | "1005 MHz", 338 | "990 MHz", 339 | "975 MHz", 340 | "960 MHz", 341 | "945 MHz", 342 | "930 MHz", 343 | "915 MHz", 344 | "900 MHz", 345 | "885 MHz", 346 | "870 MHz", 347 | "855 MHz", 348 | "840 MHz", 349 | "825 MHz", 350 | "810 MHz", 351 | "795 MHz", 352 | "780 MHz", 353 | "765 MHz", 354 | "750 MHz", 355 | "735 MHz", 356 | "720 MHz", 357 | "705 MHz", 358 | "690 MHz", 359 | "675 MHz", 360 | "660 MHz", 361 | "645 MHz", 362 | "630 MHz", 363 | "615 MHz", 364 | "600 MHz", 365 | "585 MHz", 366 | "570 MHz", 367 | "555 MHz", 368 | "540 MHz", 369 | "525 MHz", 370 | "510 MHz", 371 | "495 MHz", 372 | "480 MHz", 373 | "465 MHz", 374 | "450 MHz", 375 | "435 MHz", 376 | "420 MHz", 377 | "405 MHz" 378 | ] 379 | }, 380 | { 381 | "value": "6001 MHz", 382 | "supported_graphics_clock": [ 383 | "2100 MHz", 384 | "2085 MHz", 385 | "2070 MHz", 386 | "2055 MHz", 387 | "2040 MHz", 388 | "2025 MHz", 389 | "2010 MHz", 390 | "1995 MHz", 391 | "1980 MHz", 392 | "1965 MHz", 393 | "1950 MHz", 394 | "1935 MHz", 395 | "1920 MHz", 396 | "1905 MHz", 397 | "1890 MHz", 398 | "1875 MHz", 399 | "1860 MHz", 400 | "1845 MHz", 401 | "1830 MHz", 402 | "1815 MHz", 403 | "1800 MHz", 404 | "1785 MHz", 405 | "1770 MHz", 406 | "1755 MHz", 407 | "1740 MHz", 408 | "1725 MHz", 409 | "1710 MHz", 410 | "1695 MHz", 411 | "1680 MHz", 412 | "1665 MHz", 413 | "1650 MHz", 414 | "1635 MHz", 415 | "1620 MHz", 416 | "1605 MHz", 417 | "1590 MHz", 418 | "1575 MHz", 419 | "1560 MHz", 420 | "1545 MHz", 421 | "1530 MHz", 422 | "1515 MHz", 423 | "1500 MHz", 424 | "1485 MHz", 425 | "1470 MHz", 426 | "1455 MHz", 427 | "1440 MHz", 428 | "1425 MHz", 429 | "1410 MHz", 430 | "1395 MHz", 431 | "1380 MHz", 432 | "1365 MHz", 433 | "1350 MHz", 434 | "1335 MHz", 435 | "1320 MHz", 436 | "1305 MHz", 437 | "1290 MHz", 438 | "1275 MHz", 439 | "1260 MHz", 440 | "1245 MHz", 441 | "1230 MHz", 442 | "1215 MHz", 443 | "1200 MHz", 444 | "1185 MHz", 445 | "1170 MHz", 446 | "1155 MHz", 447 | "1140 MHz", 448 | "1125 MHz", 449 | "1110 MHz", 450 | "1095 MHz", 451 | "1080 MHz", 452 | "1065 MHz", 453 | "1050 MHz", 454 | "1035 MHz", 455 | "1020 MHz", 456 | "1005 MHz", 457 | "990 MHz", 458 | "975 MHz", 459 | "960 MHz", 460 | "945 MHz", 461 | "930 MHz", 462 | "915 MHz", 463 | "900 MHz", 464 | "885 MHz", 465 | "870 MHz", 466 | "855 MHz", 467 | "840 MHz", 468 | "825 MHz", 469 | "810 MHz", 470 | "795 MHz", 471 | "780 MHz", 472 | "765 MHz", 473 | "750 MHz", 474 | "735 MHz", 475 | "720 MHz", 476 | "705 MHz", 477 | "690 MHz", 478 | "675 MHz", 479 | "660 MHz", 480 | "645 MHz", 481 | "630 MHz", 482 | "615 MHz", 483 | "600 MHz", 484 | "585 MHz", 485 | "570 MHz", 486 | "555 MHz", 487 | "540 MHz", 488 | "525 MHz", 489 | "510 MHz", 490 | "495 MHz", 491 | "480 MHz", 492 | "465 MHz", 493 | "450 MHz", 494 | "435 MHz", 495 | "420 MHz", 496 | "405 MHz" 497 | ] 498 | }, 499 | { 500 | "value": "810 MHz", 501 | "supported_graphics_clock": [ 502 | "2100 MHz", 503 | "2085 MHz", 504 | "2070 MHz", 505 | "2055 MHz", 506 | "2040 MHz", 507 | "2025 MHz", 508 | "2010 MHz", 509 | "1995 MHz", 510 | "1980 MHz", 511 | "1965 MHz", 512 | "1950 MHz", 513 | "1935 MHz", 514 | "1920 MHz", 515 | "1905 MHz", 516 | "1890 MHz", 517 | "1875 MHz", 518 | "1860 MHz", 519 | "1845 MHz", 520 | "1830 MHz", 521 | "1815 MHz", 522 | "1800 MHz", 523 | "1785 MHz", 524 | "1770 MHz", 525 | "1755 MHz", 526 | "1740 MHz", 527 | "1725 MHz", 528 | "1710 MHz", 529 | "1695 MHz", 530 | "1680 MHz", 531 | "1665 MHz", 532 | "1650 MHz", 533 | "1635 MHz", 534 | "1620 MHz", 535 | "1605 MHz", 536 | "1590 MHz", 537 | "1575 MHz", 538 | "1560 MHz", 539 | "1545 MHz", 540 | "1530 MHz", 541 | "1515 MHz", 542 | "1500 MHz", 543 | "1485 MHz", 544 | "1470 MHz", 545 | "1455 MHz", 546 | "1440 MHz", 547 | "1425 MHz", 548 | "1410 MHz", 549 | "1395 MHz", 550 | "1380 MHz", 551 | "1365 MHz", 552 | "1350 MHz", 553 | "1335 MHz", 554 | "1320 MHz", 555 | "1305 MHz", 556 | "1290 MHz", 557 | "1275 MHz", 558 | "1260 MHz", 559 | "1245 MHz", 560 | "1230 MHz", 561 | "1215 MHz", 562 | "1200 MHz", 563 | "1185 MHz", 564 | "1170 MHz", 565 | "1155 MHz", 566 | "1140 MHz", 567 | "1125 MHz", 568 | "1110 MHz", 569 | "1095 MHz", 570 | "1080 MHz", 571 | "1065 MHz", 572 | "1050 MHz", 573 | "1035 MHz", 574 | "1020 MHz", 575 | "1005 MHz", 576 | "990 MHz", 577 | "975 MHz", 578 | "960 MHz", 579 | "945 MHz", 580 | "930 MHz", 581 | "915 MHz", 582 | "900 MHz", 583 | "885 MHz", 584 | "870 MHz", 585 | "855 MHz", 586 | "840 MHz", 587 | "825 MHz", 588 | "810 MHz", 589 | "795 MHz", 590 | "780 MHz", 591 | "765 MHz", 592 | "750 MHz", 593 | "735 MHz", 594 | "720 MHz", 595 | "705 MHz", 596 | "690 MHz", 597 | "675 MHz", 598 | "660 MHz", 599 | "645 MHz", 600 | "630 MHz", 601 | "615 MHz", 602 | "600 MHz", 603 | "585 MHz", 604 | "570 MHz", 605 | "555 MHz", 606 | "540 MHz", 607 | "525 MHz", 608 | "510 MHz", 609 | "495 MHz", 610 | "480 MHz", 611 | "465 MHz", 612 | "450 MHz", 613 | "435 MHz", 614 | "420 MHz", 615 | "405 MHz" 616 | ] 617 | }, 618 | { 619 | "value": "405 MHz", 620 | "supported_graphics_clock": [ 621 | "420 MHz", 622 | "405 MHz" 623 | ] 624 | } 625 | ] 626 | }, 627 | "processes": { 628 | "process_info": [ 629 | { 630 | "gpu_instance_id": "N/A", 631 | "compute_instance_id": "N/A", 632 | "pid": "3592", 633 | "type": "G", 634 | "process_name": "/usr/lib/xorg/Xorg", 635 | "used_memory": "457 MiB" 636 | }, 637 | { 638 | "gpu_instance_id": "N/A", 639 | "compute_instance_id": "N/A", 640 | "pid": "4648", 641 | "type": "G", 642 | "process_name": "/usr/bin/gnome-shell", 643 | "used_memory": "200 MiB" 644 | }, 645 | { 646 | "gpu_instance_id": "N/A", 647 | "compute_instance_id": "N/A", 648 | "pid": "6750", 649 | "type": "G", 650 | "process_name": "/snap/firefox/4848/usr/lib/firefox/firefox", 651 | "used_memory": "143 MiB" 652 | }, 653 | { 654 | "gpu_instance_id": "N/A", 655 | "compute_instance_id": "N/A", 656 | "pid": "7729", 657 | "type": "G", 658 | "process_name": "/usr/share/code/code --type=gpu-process --crashpad-handler-pid=7714 --enable-crash-reporter=42ae51cc-63a4-4cac-acca-a6b8fafb6b70,no_channel --user-data-dir=/home/legion5pro/.config/Code --gpu-preferences=WAAAAAAAAAAgAAAEAAAAAAAAAAAAAAAAAABgAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAGAAAAAAAAAAYAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAA== --shared-files --field-trial-handle=0,i,5200017657493304395,12716261981852817514,262144 --disable-features=CalculateNativeWinOcclusion,SpareRendererForSitePerProcess", 659 | "used_memory": "172 MiB" 660 | } 661 | ] 662 | }, 663 | "accounted_processes": null 664 | } 665 | } 666 | } -------------------------------------------------------------------------------- /out.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "o_gpu_property": { 4 | "s_property_accessor_nvidia_smi": "fb_memory_usage.reserved", 5 | "s_title": "Frame Buffer Memory Reserved", 6 | "s_description": "How much memory is reserved for the frame buffer. This memory is allocated but not necessarily used for immediate rendering." 7 | }, 8 | "s_value": "243 MiB", 9 | "o_number_value": { 10 | "s_original": "243 MiB", 11 | "s_name_base_unit": "Byte", 12 | "n_nano": 254803968000000000, 13 | "n_micro": 254803968000000, 14 | "n_milli": 254803968000, 15 | "n_centi": 25480396800, 16 | "n_deci": 2548039680, 17 | "n": 254803968, 18 | "n_kilo": 254803.968, 19 | "n_kibi": 248832, 20 | "n_mega": 254.803968, 21 | "n_mebi": 243, 22 | "n_giga": 0.254803968, 23 | "n_gibi": 0.2373046875, 24 | "n_tera": 0.000254803968, 25 | "n_tebi": 0.00023174285888671875, 26 | "n_peta": 2.54803968e-7, 27 | "n_peti": 2.2631138563156128e-7 28 | }, 29 | "n_nor": 0.0296630859375, 30 | "o_number_value_max": { 31 | "s_original": "8192 MiB", 32 | "s_name_base_unit": "Byte", 33 | "n_nano": 8589934591999999000, 34 | "n_micro": 8589934592000000, 35 | "n_milli": 8589934592000, 36 | "n_centi": 858993459200, 37 | "n_deci": 85899345920, 38 | "n": 8589934592, 39 | "n_kilo": 8589934.592, 40 | "n_kibi": 8388608, 41 | "n_mega": 8589.934592, 42 | "n_mebi": 8192, 43 | "n_giga": 8.589934592, 44 | "n_gibi": 8, 45 | "n_tera": 0.008589934592, 46 | "n_tebi": 0.0078125, 47 | "n_peta": 0.000008589934592, 48 | "n_peti": 0.00000762939453125 49 | }, 50 | "o_number_value_min": null 51 | }, 52 | { 53 | "o_gpu_property": { 54 | "s_property_accessor_nvidia_smi": "fb_memory_usage.used", 55 | "s_title": "Frame Buffer Memory Used", 56 | "s_description": "The amount of frame buffer memory actively being used by the GPU for rendering tasks and operations." 57 | }, 58 | "s_value": "1737 MiB", 59 | "o_number_value": { 60 | "s_original": "1737 MiB", 61 | "s_name_base_unit": "Byte", 62 | "n_nano": 1821376512000000000, 63 | "n_micro": 1821376512000000, 64 | "n_milli": 1821376512000, 65 | "n_centi": 182137651200, 66 | "n_deci": 18213765120, 67 | "n": 1821376512, 68 | "n_kilo": 1821376.512, 69 | "n_kibi": 1778688, 70 | "n_mega": 1821.376512, 71 | "n_mebi": 1737, 72 | "n_giga": 1.821376512, 73 | "n_gibi": 1.6962890625, 74 | "n_tera": 0.001821376512, 75 | "n_tebi": 0.0016565322875976562, 76 | "n_peta": 0.000001821376512, 77 | "n_peti": 0.0000016177073121070862 78 | }, 79 | "n_nor": 0.2120361328125, 80 | "o_number_value_max": { 81 | "s_original": "8192 MiB", 82 | "s_name_base_unit": "Byte", 83 | "n_nano": 8589934591999999000, 84 | "n_micro": 8589934592000000, 85 | "n_milli": 8589934592000, 86 | "n_centi": 858993459200, 87 | "n_deci": 85899345920, 88 | "n": 8589934592, 89 | "n_kilo": 8589934.592, 90 | "n_kibi": 8388608, 91 | "n_mega": 8589.934592, 92 | "n_mebi": 8192, 93 | "n_giga": 8.589934592, 94 | "n_gibi": 8, 95 | "n_tera": 0.008589934592, 96 | "n_tebi": 0.0078125, 97 | "n_peta": 0.000008589934592, 98 | "n_peti": 0.00000762939453125 99 | }, 100 | "o_number_value_min": null 101 | }, 102 | { 103 | "o_gpu_property": { 104 | "s_property_accessor_nvidia_smi": "fb_memory_usage.free", 105 | "s_title": "Frame Buffer Memory Free", 106 | "s_description": "The available frame buffer memory that can be allocated for future rendering operations." 107 | }, 108 | "s_value": "6211 MiB", 109 | "o_number_value": { 110 | "s_original": "6211 MiB", 111 | "s_name_base_unit": "Byte", 112 | "n_nano": 6512705536000000000, 113 | "n_micro": 6512705536000000, 114 | "n_milli": 6512705536000, 115 | "n_centi": 651270553600, 116 | "n_deci": 65127055360, 117 | "n": 6512705536, 118 | "n_kilo": 6512705.536, 119 | "n_kibi": 6360064, 120 | "n_mega": 6512.705536, 121 | "n_mebi": 6211, 122 | "n_giga": 6.512705536, 123 | "n_gibi": 6.0654296875, 124 | "n_tera": 0.006512705536, 125 | "n_tebi": 0.005923271179199219, 126 | "n_peta": 0.000006512705536, 127 | "n_peti": 0.000005784444510936737 128 | }, 129 | "n_nor": 0.7581787109375, 130 | "o_number_value_max": { 131 | "s_original": "8192 MiB", 132 | "s_name_base_unit": "Byte", 133 | "n_nano": 8589934591999999000, 134 | "n_micro": 8589934592000000, 135 | "n_milli": 8589934592000, 136 | "n_centi": 858993459200, 137 | "n_deci": 85899345920, 138 | "n": 8589934592, 139 | "n_kilo": 8589934.592, 140 | "n_kibi": 8388608, 141 | "n_mega": 8589.934592, 142 | "n_mebi": 8192, 143 | "n_giga": 8.589934592, 144 | "n_gibi": 8, 145 | "n_tera": 0.008589934592, 146 | "n_tebi": 0.0078125, 147 | "n_peta": 0.000008589934592, 148 | "n_peti": 0.00000762939453125 149 | }, 150 | "o_number_value_min": null 151 | }, 152 | { 153 | "o_gpu_property": { 154 | "s_property_accessor_nvidia_smi": "bar1_memory_usage.used", 155 | "s_title": "BAR1 Memory Used", 156 | "s_description": "The amount of memory used by BAR1, which is used for communication between the CPU and GPU. It maps parts of GPU memory for CPU access." 157 | }, 158 | "s_value": "31 MiB", 159 | "o_number_value": { 160 | "s_original": "31 MiB", 161 | "s_name_base_unit": "Byte", 162 | "n_nano": 32505855999999996, 163 | "n_micro": 32505856000000, 164 | "n_milli": 32505856000, 165 | "n_centi": 3250585600, 166 | "n_deci": 325058560, 167 | "n": 32505856, 168 | "n_kilo": 32505.856, 169 | "n_kibi": 31744, 170 | "n_mega": 32.505856, 171 | "n_mebi": 31, 172 | "n_giga": 0.032505856, 173 | "n_gibi": 0.0302734375, 174 | "n_tera": 0.000032505856, 175 | "n_tebi": 0.00002956390380859375, 176 | "n_peta": 3.2505856e-8, 177 | "n_peti": 2.8870999813079834e-8 178 | }, 179 | "n_nor": 0.0037841796875, 180 | "o_number_value_max": { 181 | "s_original": "8192 MiB", 182 | "s_name_base_unit": "Byte", 183 | "n_nano": 8589934591999999000, 184 | "n_micro": 8589934592000000, 185 | "n_milli": 8589934592000, 186 | "n_centi": 858993459200, 187 | "n_deci": 85899345920, 188 | "n": 8589934592, 189 | "n_kilo": 8589934.592, 190 | "n_kibi": 8388608, 191 | "n_mega": 8589.934592, 192 | "n_mebi": 8192, 193 | "n_giga": 8.589934592, 194 | "n_gibi": 8, 195 | "n_tera": 0.008589934592, 196 | "n_tebi": 0.0078125, 197 | "n_peta": 0.000008589934592, 198 | "n_peti": 0.00000762939453125 199 | }, 200 | "o_number_value_min": null 201 | }, 202 | { 203 | "o_gpu_property": { 204 | "s_property_accessor_nvidia_smi": "bar1_memory_usage.free", 205 | "s_title": "BAR1 Memory Free", 206 | "s_description": "The available BAR1 memory that the CPU can map and use for communication with the GPU." 207 | }, 208 | "s_value": "8161 MiB", 209 | "o_number_value": { 210 | "s_original": "8161 MiB", 211 | "s_name_base_unit": "Byte", 212 | "n_nano": 8557428735999999000, 213 | "n_micro": 8557428736000000, 214 | "n_milli": 8557428736000, 215 | "n_centi": 855742873600, 216 | "n_deci": 85574287360, 217 | "n": 8557428736, 218 | "n_kilo": 8557428.736, 219 | "n_kibi": 8356864, 220 | "n_mega": 8557.428736, 221 | "n_mebi": 8161, 222 | "n_giga": 8.557428736, 223 | "n_gibi": 7.9697265625, 224 | "n_tera": 0.008557428736, 225 | "n_tebi": 0.007782936096191406, 226 | "n_peta": 0.000008557428736, 227 | "n_peti": 0.00000760052353143692 228 | }, 229 | "n_nor": 0.9962158203125, 230 | "o_number_value_max": { 231 | "s_original": "8192 MiB", 232 | "s_name_base_unit": "Byte", 233 | "n_nano": 8589934591999999000, 234 | "n_micro": 8589934592000000, 235 | "n_milli": 8589934592000, 236 | "n_centi": 858993459200, 237 | "n_deci": 85899345920, 238 | "n": 8589934592, 239 | "n_kilo": 8589934.592, 240 | "n_kibi": 8388608, 241 | "n_mega": 8589.934592, 242 | "n_mebi": 8192, 243 | "n_giga": 8.589934592, 244 | "n_gibi": 8, 245 | "n_tera": 0.008589934592, 246 | "n_tebi": 0.0078125, 247 | "n_peta": 0.000008589934592, 248 | "n_peti": 0.00000762939453125 249 | }, 250 | "o_number_value_min": null 251 | }, 252 | { 253 | "o_gpu_property": { 254 | "s_property_accessor_nvidia_smi": "cc_protected_memory_usage.used", 255 | "s_title": "CC Protected Memory Used", 256 | "s_description": "The amount of memory used for protected content, which is secured by Content and Context Protection (CCP)." 257 | }, 258 | "s_value": "0 MiB", 259 | "o_number_value": { 260 | "s_original": "0 MiB", 261 | "s_name_base_unit": "Byte", 262 | "n_nano": 0, 263 | "n_micro": 0, 264 | "n_milli": 0, 265 | "n_centi": 0, 266 | "n_deci": 0, 267 | "n": 0, 268 | "n_kilo": 0, 269 | "n_kibi": 0, 270 | "n_mega": 0, 271 | "n_mebi": 0, 272 | "n_giga": 0, 273 | "n_gibi": 0, 274 | "n_tera": 0, 275 | "n_tebi": 0, 276 | "n_peta": 0, 277 | "n_peti": 0 278 | }, 279 | "n_nor": null, 280 | "o_number_value_max": { 281 | "s_original": "0 MiB", 282 | "s_name_base_unit": "Byte", 283 | "n_nano": 0, 284 | "n_micro": 0, 285 | "n_milli": 0, 286 | "n_centi": 0, 287 | "n_deci": 0, 288 | "n": 0, 289 | "n_kilo": 0, 290 | "n_kibi": 0, 291 | "n_mega": 0, 292 | "n_mebi": 0, 293 | "n_giga": 0, 294 | "n_gibi": 0, 295 | "n_tera": 0, 296 | "n_tebi": 0, 297 | "n_peta": 0, 298 | "n_peti": 0 299 | }, 300 | "o_number_value_min": null 301 | }, 302 | { 303 | "o_gpu_property": { 304 | "s_property_accessor_nvidia_smi": "cc_protected_memory_usage.free", 305 | "s_title": "CC Protected Memory Free", 306 | "s_description": "The available memory for protected content secured under Content and Context Protection (CCP)." 307 | }, 308 | "s_value": "0 MiB", 309 | "o_number_value": { 310 | "s_original": "0 MiB", 311 | "s_name_base_unit": "Byte", 312 | "n_nano": 0, 313 | "n_micro": 0, 314 | "n_milli": 0, 315 | "n_centi": 0, 316 | "n_deci": 0, 317 | "n": 0, 318 | "n_kilo": 0, 319 | "n_kibi": 0, 320 | "n_mega": 0, 321 | "n_mebi": 0, 322 | "n_giga": 0, 323 | "n_gibi": 0, 324 | "n_tera": 0, 325 | "n_tebi": 0, 326 | "n_peta": 0, 327 | "n_peti": 0 328 | }, 329 | "n_nor": null, 330 | "o_number_value_max": { 331 | "s_original": "0 MiB", 332 | "s_name_base_unit": "Byte", 333 | "n_nano": 0, 334 | "n_micro": 0, 335 | "n_milli": 0, 336 | "n_centi": 0, 337 | "n_deci": 0, 338 | "n": 0, 339 | "n_kilo": 0, 340 | "n_kibi": 0, 341 | "n_mega": 0, 342 | "n_mebi": 0, 343 | "n_giga": 0, 344 | "n_gibi": 0, 345 | "n_tera": 0, 346 | "n_tebi": 0, 347 | "n_peta": 0, 348 | "n_peti": 0 349 | }, 350 | "o_number_value_min": null 351 | }, 352 | { 353 | "o_gpu_property": { 354 | "s_property_accessor_nvidia_smi": "utilization.gpu_util", 355 | "s_title": "GPU Utilization", 356 | "s_description": "The percentage of GPU utilization, showing how much of the GPU’s processing power is currently in use." 357 | }, 358 | "s_value": "7 %", 359 | "o_number_value": { 360 | "s_original": "7 %", 361 | "s_name_base_unit": "Percent", 362 | "n_nano": 70000000, 363 | "n_micro": 70000.00000000001, 364 | "n_milli": 70, 365 | "n_centi": 7.000000000000001, 366 | "n_deci": 0.7000000000000001, 367 | "n": 0.07, 368 | "n_kilo": 0.00007000000000000001, 369 | "n_kibi": 0.000068359375, 370 | "n_mega": 7e-8, 371 | "n_mebi": 6.67572021484375e-8, 372 | "n_giga": 7e-11, 373 | "n_gibi": 6.51925802230835e-11, 374 | "n_tera": 7e-14, 375 | "n_tebi": 6.366462912410498e-14, 376 | "n_peta": 7e-17, 377 | "n_peti": 6.217248937900877e-17 378 | }, 379 | "n_nor": null, 380 | "o_number_value_max": null, 381 | "o_number_value_min": null 382 | }, 383 | { 384 | "o_gpu_property": { 385 | "s_property_accessor_nvidia_smi": "utilization.memory_util", 386 | "s_title": "Memory Utilization", 387 | "s_description": "The percentage of memory utilization, showing how much of the GPU’s memory is currently in use." 388 | }, 389 | "s_value": "24 %", 390 | "o_number_value": { 391 | "s_original": "24 %", 392 | "s_name_base_unit": "Percent", 393 | "n_nano": 239999999.99999997, 394 | "n_micro": 240000, 395 | "n_milli": 240, 396 | "n_centi": 24, 397 | "n_deci": 2.4, 398 | "n": 0.24, 399 | "n_kilo": 0.00023999999999999998, 400 | "n_kibi": 0.000234375, 401 | "n_mega": 2.4e-7, 402 | "n_mebi": 2.288818359375e-7, 403 | "n_giga": 2.4e-10, 404 | "n_gibi": 2.2351741790771484e-10, 405 | "n_tera": 2.4e-13, 406 | "n_tebi": 2.1827872842550277e-13, 407 | "n_peta": 2.4e-16, 408 | "n_peti": 2.1316282072803005e-16 409 | }, 410 | "n_nor": null, 411 | "o_number_value_max": null, 412 | "o_number_value_min": null 413 | }, 414 | { 415 | "o_gpu_property": { 416 | "s_property_accessor_nvidia_smi": "utilization.encoder_util", 417 | "s_title": "Encoder Utilization", 418 | "s_description": "The percentage of utilization for the GPU’s video encoder, showing how much of the encoder’s resources are being used." 419 | }, 420 | "s_value": "0 %", 421 | "o_number_value": { 422 | "s_original": "0 %", 423 | "s_name_base_unit": "Percent", 424 | "n_nano": 0, 425 | "n_micro": 0, 426 | "n_milli": 0, 427 | "n_centi": 0, 428 | "n_deci": 0, 429 | "n": 0, 430 | "n_kilo": 0, 431 | "n_kibi": 0, 432 | "n_mega": 0, 433 | "n_mebi": 0, 434 | "n_giga": 0, 435 | "n_gibi": 0, 436 | "n_tera": 0, 437 | "n_tebi": 0, 438 | "n_peta": 0, 439 | "n_peti": 0 440 | }, 441 | "n_nor": null, 442 | "o_number_value_max": null, 443 | "o_number_value_min": null 444 | }, 445 | { 446 | "o_gpu_property": { 447 | "s_property_accessor_nvidia_smi": "utilization.decoder_util", 448 | "s_title": "Decoder Utilization", 449 | "s_description": "The percentage of utilization for the GPU’s video decoder, showing how much of the decoder’s resources are being used." 450 | }, 451 | "s_value": "0 %", 452 | "o_number_value": { 453 | "s_original": "0 %", 454 | "s_name_base_unit": "Percent", 455 | "n_nano": 0, 456 | "n_micro": 0, 457 | "n_milli": 0, 458 | "n_centi": 0, 459 | "n_deci": 0, 460 | "n": 0, 461 | "n_kilo": 0, 462 | "n_kibi": 0, 463 | "n_mega": 0, 464 | "n_mebi": 0, 465 | "n_giga": 0, 466 | "n_gibi": 0, 467 | "n_tera": 0, 468 | "n_tebi": 0, 469 | "n_peta": 0, 470 | "n_peti": 0 471 | }, 472 | "n_nor": null, 473 | "o_number_value_max": null, 474 | "o_number_value_min": null 475 | }, 476 | { 477 | "o_gpu_property": { 478 | "s_property_accessor_nvidia_smi": "utilization.jpeg_util", 479 | "s_title": "JPEG Decoder Utilization", 480 | "s_description": "The percentage of utilization for the GPU’s JPEG decoding engine, showing how much of the JPEG decoder’s resources are being used." 481 | }, 482 | "s_value": "0 %", 483 | "o_number_value": { 484 | "s_original": "0 %", 485 | "s_name_base_unit": "Percent", 486 | "n_nano": 0, 487 | "n_micro": 0, 488 | "n_milli": 0, 489 | "n_centi": 0, 490 | "n_deci": 0, 491 | "n": 0, 492 | "n_kilo": 0, 493 | "n_kibi": 0, 494 | "n_mega": 0, 495 | "n_mebi": 0, 496 | "n_giga": 0, 497 | "n_gibi": 0, 498 | "n_tera": 0, 499 | "n_tebi": 0, 500 | "n_peta": 0, 501 | "n_peti": 0 502 | }, 503 | "n_nor": null, 504 | "o_number_value_max": null, 505 | "o_number_value_min": null 506 | }, 507 | { 508 | "o_gpu_property": { 509 | "s_property_accessor_nvidia_smi": "utilization.ofa_util", 510 | "s_title": "Optical Flow Accelerator Utilization", 511 | "s_description": "The percentage of utilization for the GPU’s Optical Flow Accelerator (OFA), which is used for motion estimation and similar tasks." 512 | }, 513 | "s_value": "0 %", 514 | "o_number_value": { 515 | "s_original": "0 %", 516 | "s_name_base_unit": "Percent", 517 | "n_nano": 0, 518 | "n_micro": 0, 519 | "n_milli": 0, 520 | "n_centi": 0, 521 | "n_deci": 0, 522 | "n": 0, 523 | "n_kilo": 0, 524 | "n_kibi": 0, 525 | "n_mega": 0, 526 | "n_mebi": 0, 527 | "n_giga": 0, 528 | "n_gibi": 0, 529 | "n_tera": 0, 530 | "n_tebi": 0, 531 | "n_peta": 0, 532 | "n_peti": 0 533 | }, 534 | "n_nor": null, 535 | "o_number_value_max": null, 536 | "o_number_value_min": null 537 | }, 538 | { 539 | "o_gpu_property": { 540 | "s_property_accessor_nvidia_smi": "temperature.gpu_temp", 541 | "s_title": "GPU Temperature", 542 | "s_description": "The current temperature of the GPU in degrees Celsius." 543 | }, 544 | "s_value": "51 C", 545 | "o_number_value": { 546 | "s_original": "51 C", 547 | "s_name_base_unit": "Celsius", 548 | "n_nano": 51000000000, 549 | "n_micro": 51000000, 550 | "n_milli": 51000, 551 | "n_centi": 5100, 552 | "n_deci": 510, 553 | "n": 51, 554 | "n_kilo": 0.051, 555 | "n_kibi": 0.0498046875, 556 | "n_mega": 0.000051, 557 | "n_mebi": 0.00004863739013671875, 558 | "n_giga": 5.1e-8, 559 | "n_gibi": 4.7497451305389404e-8, 560 | "n_tera": 5.1e-11, 561 | "n_tebi": 4.638422979041934e-11, 562 | "n_peta": 5.1e-14, 563 | "n_peti": 4.529709940470639e-14 564 | }, 565 | "n_nor": null, 566 | "o_number_value_max": null, 567 | "o_number_value_min": null 568 | }, 569 | { 570 | "o_gpu_property": { 571 | "s_property_accessor_nvidia_smi": "temperature.gpu_temp_max_threshold", 572 | "s_title": "Max GPU Temperature Threshold", 573 | "s_description": "The maximum safe operating temperature for the GPU, beyond which it may throttle or shut down to prevent damage." 574 | }, 575 | "s_value": "101 C", 576 | "o_number_value": { 577 | "s_original": "101 C", 578 | "s_name_base_unit": "Celsius", 579 | "n_nano": 101000000000, 580 | "n_micro": 101000000, 581 | "n_milli": 101000, 582 | "n_centi": 10100, 583 | "n_deci": 1010, 584 | "n": 101, 585 | "n_kilo": 0.101, 586 | "n_kibi": 0.0986328125, 587 | "n_mega": 0.000101, 588 | "n_mebi": 0.00009632110595703125, 589 | "n_giga": 1.01e-7, 590 | "n_gibi": 9.406358003616333e-8, 591 | "n_tera": 1.01e-10, 592 | "n_tebi": 9.185896487906575e-11, 593 | "n_peta": 1.01e-13, 594 | "n_peti": 8.970602038971265e-14 595 | }, 596 | "n_nor": null, 597 | "o_number_value_max": null, 598 | "o_number_value_min": null 599 | }, 600 | { 601 | "o_gpu_property": { 602 | "s_property_accessor_nvidia_smi": "temperature.gpu_temp_slow_threshold", 603 | "s_title": "GPU Slowdown Temperature Threshold", 604 | "s_description": "The temperature at which the GPU will start to reduce its clock speeds (throttle) to prevent overheating." 605 | }, 606 | "s_value": "98 C", 607 | "o_number_value": { 608 | "s_original": "98 C", 609 | "s_name_base_unit": "Celsius", 610 | "n_nano": 98000000000, 611 | "n_micro": 98000000, 612 | "n_milli": 98000, 613 | "n_centi": 9800, 614 | "n_deci": 980, 615 | "n": 98, 616 | "n_kilo": 0.098, 617 | "n_kibi": 0.095703125, 618 | "n_mega": 0.000098, 619 | "n_mebi": 0.0000934600830078125, 620 | "n_giga": 9.8e-8, 621 | "n_gibi": 9.12696123123169e-8, 622 | "n_tera": 9.8e-11, 623 | "n_tebi": 8.913048077374697e-11, 624 | "n_peta": 9.8e-14, 625 | "n_peti": 8.704148513061227e-14 626 | }, 627 | "n_nor": null, 628 | "o_number_value_max": null, 629 | "o_number_value_min": null 630 | }, 631 | { 632 | "o_gpu_property": { 633 | "s_property_accessor_nvidia_smi": "temperature.gpu_temp_max_gpu_threshold", 634 | "s_title": "Max GPU Temperature", 635 | "s_description": "The highest temperature the GPU has reached during operation." 636 | }, 637 | "s_value": "87 C", 638 | "o_number_value": { 639 | "s_original": "87 C", 640 | "s_name_base_unit": "Celsius", 641 | "n_nano": 87000000000, 642 | "n_micro": 87000000, 643 | "n_milli": 87000, 644 | "n_centi": 8700, 645 | "n_deci": 870, 646 | "n": 87, 647 | "n_kilo": 0.087, 648 | "n_kibi": 0.0849609375, 649 | "n_mega": 0.000087, 650 | "n_mebi": 0.00008296966552734375, 651 | "n_giga": 8.7e-8, 652 | "n_gibi": 8.102506399154663e-8, 653 | "n_tera": 8.7e-11, 654 | "n_tebi": 7.912603905424476e-11, 655 | "n_peta": 8.7e-14, 656 | "n_peti": 7.72715225139109e-14 657 | }, 658 | "n_nor": null, 659 | "o_number_value_max": null, 660 | "o_number_value_min": null 661 | }, 662 | { 663 | "o_gpu_property": { 664 | "s_property_accessor_nvidia_smi": "gpu_power_readings.power_draw", 665 | "s_title": "GPU Power Draw", 666 | "s_description": "The current power consumption of the GPU in watts." 667 | }, 668 | "s_value": "19.00 W", 669 | "o_number_value": { 670 | "s_original": "19.00 W", 671 | "s_name_base_unit": "Watt", 672 | "n_nano": 19000000000, 673 | "n_micro": 19000000, 674 | "n_milli": 19000, 675 | "n_centi": 1900, 676 | "n_deci": 190, 677 | "n": 19, 678 | "n_kilo": 0.019, 679 | "n_kibi": 0.0185546875, 680 | "n_mega": 0.000019, 681 | "n_mebi": 0.00001811981201171875, 682 | "n_giga": 1.9e-8, 683 | "n_gibi": 1.7695128917694092e-8, 684 | "n_tera": 1.9e-11, 685 | "n_tebi": 1.7280399333685637e-11, 686 | "n_peta": 1.9e-14, 687 | "n_peti": 1.687538997430238e-14 688 | }, 689 | "n_nor": null, 690 | "o_number_value_max": null, 691 | "o_number_value_min": null 692 | }, 693 | { 694 | "o_gpu_property": { 695 | "s_property_accessor_nvidia_smi": "gpu_power_readings.current_power_limit", 696 | "s_title": "Current Power Limit", 697 | "s_description": "The current power limit set for the GPU, which can be dynamically adjusted based on workload or system configuration." 698 | }, 699 | "s_value": "115.00 W", 700 | "o_number_value": { 701 | "s_original": "115.00 W", 702 | "s_name_base_unit": "Watt", 703 | "n_nano": 115000000000, 704 | "n_micro": 115000000, 705 | "n_milli": 115000, 706 | "n_centi": 11500, 707 | "n_deci": 1150, 708 | "n": 115, 709 | "n_kilo": 0.115, 710 | "n_kibi": 0.1123046875, 711 | "n_mega": 0.000115, 712 | "n_mebi": 0.00010967254638671875, 713 | "n_giga": 1.15e-7, 714 | "n_gibi": 1.0710209608078003e-7, 715 | "n_tera": 1.15e-10, 716 | "n_tebi": 1.0459189070388675e-10, 717 | "n_peta": 1.15e-13, 718 | "n_peti": 1.021405182655144e-13 719 | }, 720 | "n_nor": null, 721 | "o_number_value_max": null, 722 | "o_number_value_min": null 723 | }, 724 | { 725 | "o_gpu_property": { 726 | "s_property_accessor_nvidia_smi": "gpu_power_readings.requested_power_limit", 727 | "s_title": "Requested Power Limit", 728 | "s_description": "The power limit requested by the system or software for the GPU." 729 | }, 730 | "s_value": "115.00 W", 731 | "o_number_value": { 732 | "s_original": "115.00 W", 733 | "s_name_base_unit": "Watt", 734 | "n_nano": 115000000000, 735 | "n_micro": 115000000, 736 | "n_milli": 115000, 737 | "n_centi": 11500, 738 | "n_deci": 1150, 739 | "n": 115, 740 | "n_kilo": 0.115, 741 | "n_kibi": 0.1123046875, 742 | "n_mega": 0.000115, 743 | "n_mebi": 0.00010967254638671875, 744 | "n_giga": 1.15e-7, 745 | "n_gibi": 1.0710209608078003e-7, 746 | "n_tera": 1.15e-10, 747 | "n_tebi": 1.0459189070388675e-10, 748 | "n_peta": 1.15e-13, 749 | "n_peti": 1.021405182655144e-13 750 | }, 751 | "n_nor": null, 752 | "o_number_value_max": null, 753 | "o_number_value_min": null 754 | }, 755 | { 756 | "o_gpu_property": { 757 | "s_property_accessor_nvidia_smi": "gpu_power_readings.default_power_limit", 758 | "s_title": "Default Power Limit", 759 | "s_description": "The default power limit set by the manufacturer for the GPU." 760 | }, 761 | "s_value": "115.00 W", 762 | "o_number_value": { 763 | "s_original": "115.00 W", 764 | "s_name_base_unit": "Watt", 765 | "n_nano": 115000000000, 766 | "n_micro": 115000000, 767 | "n_milli": 115000, 768 | "n_centi": 11500, 769 | "n_deci": 1150, 770 | "n": 115, 771 | "n_kilo": 0.115, 772 | "n_kibi": 0.1123046875, 773 | "n_mega": 0.000115, 774 | "n_mebi": 0.00010967254638671875, 775 | "n_giga": 1.15e-7, 776 | "n_gibi": 1.0710209608078003e-7, 777 | "n_tera": 1.15e-10, 778 | "n_tebi": 1.0459189070388675e-10, 779 | "n_peta": 1.15e-13, 780 | "n_peti": 1.021405182655144e-13 781 | }, 782 | "n_nor": null, 783 | "o_number_value_max": null, 784 | "o_number_value_min": null 785 | }, 786 | { 787 | "o_gpu_property": { 788 | "s_property_accessor_nvidia_smi": "gpu_power_readings.min_power_limit", 789 | "s_title": "Minimum Power Limit", 790 | "s_description": "The minimum power limit the GPU can operate under without shutting down or malfunctioning." 791 | }, 792 | "s_value": "1.00 W", 793 | "o_number_value": { 794 | "s_original": "1.00 W", 795 | "s_name_base_unit": "Watt", 796 | "n_nano": 999999999.9999999, 797 | "n_micro": 1000000, 798 | "n_milli": 1000, 799 | "n_centi": 100, 800 | "n_deci": 10, 801 | "n": 1, 802 | "n_kilo": 0.001, 803 | "n_kibi": 0.0009765625, 804 | "n_mega": 0.000001, 805 | "n_mebi": 9.5367431640625e-7, 806 | "n_giga": 1e-9, 807 | "n_gibi": 9.313225746154785e-10, 808 | "n_tera": 1e-12, 809 | "n_tebi": 9.094947017729282e-13, 810 | "n_peta": 1e-15, 811 | "n_peti": 8.881784197001252e-16 812 | }, 813 | "n_nor": null, 814 | "o_number_value_max": null, 815 | "o_number_value_min": null 816 | }, 817 | { 818 | "o_gpu_property": { 819 | "s_property_accessor_nvidia_smi": "gpu_power_readings.max_power_limit", 820 | "s_title": "Maximum Power Limit", 821 | "s_description": "The maximum power limit the GPU can draw without exceeding safety limits." 822 | }, 823 | "s_value": "150.00 W", 824 | "o_number_value": { 825 | "s_original": "150.00 W", 826 | "s_name_base_unit": "Watt", 827 | "n_nano": 150000000000, 828 | "n_micro": 150000000, 829 | "n_milli": 150000, 830 | "n_centi": 15000, 831 | "n_deci": 1500, 832 | "n": 150, 833 | "n_kilo": 0.15, 834 | "n_kibi": 0.146484375, 835 | "n_mega": 0.00015, 836 | "n_mebi": 0.0001430511474609375, 837 | "n_giga": 1.5e-7, 838 | "n_gibi": 1.3969838619232178e-7, 839 | "n_tera": 1.5e-10, 840 | "n_tebi": 1.3642420526593924e-10, 841 | "n_peta": 1.5e-13, 842 | "n_peti": 1.3322676295501878e-13 843 | }, 844 | "n_nor": null, 845 | "o_number_value_max": null, 846 | "o_number_value_min": null 847 | }, 848 | { 849 | "o_gpu_property": { 850 | "s_property_accessor_nvidia_smi": "clocks.graphics_clock", 851 | "s_title": "Graphics Clock Speed", 852 | "s_description": "The current clock speed of the GPU’s graphics core, measured in MHz." 853 | }, 854 | "s_value": "210 MHz", 855 | "o_number_value": { 856 | "s_original": "210 MHz", 857 | "s_name_base_unit": "Byte", 858 | "n_nano": 210000000000000000, 859 | "n_micro": 210000000000000, 860 | "n_milli": 210000000000, 861 | "n_centi": 21000000000, 862 | "n_deci": 2100000000, 863 | "n": 210000000, 864 | "n_kilo": 210000, 865 | "n_kibi": 205078.125, 866 | "n_mega": 210, 867 | "n_mebi": 200.2716064453125, 868 | "n_giga": 0.21, 869 | "n_gibi": 0.1955777406692505, 870 | "n_tera": 0.00021, 871 | "n_tebi": 0.00019099388737231493, 872 | "n_peta": 2.1e-7, 873 | "n_peti": 1.865174681370263e-7 874 | }, 875 | "n_nor": null, 876 | "o_number_value_max": null, 877 | "o_number_value_min": null 878 | }, 879 | { 880 | "o_gpu_property": { 881 | "s_property_accessor_nvidia_smi": "clocks.sm_clock", 882 | "s_title": "SM Clock Speed", 883 | "s_description": "The clock speed of the GPU’s streaming multiprocessor (SM), which handles parallel workloads." 884 | }, 885 | "s_value": "210 MHz", 886 | "o_number_value": { 887 | "s_original": "210 MHz", 888 | "s_name_base_unit": "Byte", 889 | "n_nano": 210000000000000000, 890 | "n_micro": 210000000000000, 891 | "n_milli": 210000000000, 892 | "n_centi": 21000000000, 893 | "n_deci": 2100000000, 894 | "n": 210000000, 895 | "n_kilo": 210000, 896 | "n_kibi": 205078.125, 897 | "n_mega": 210, 898 | "n_mebi": 200.2716064453125, 899 | "n_giga": 0.21, 900 | "n_gibi": 0.1955777406692505, 901 | "n_tera": 0.00021, 902 | "n_tebi": 0.00019099388737231493, 903 | "n_peta": 2.1e-7, 904 | "n_peti": 1.865174681370263e-7 905 | }, 906 | "n_nor": null, 907 | "o_number_value_max": null, 908 | "o_number_value_min": null 909 | }, 910 | { 911 | "o_gpu_property": { 912 | "s_property_accessor_nvidia_smi": "clocks.mem_clock", 913 | "s_title": "Memory Clock Speed", 914 | "s_description": "The current clock speed of the GPU’s memory, measured in MHz." 915 | }, 916 | "s_value": "405 MHz", 917 | "o_number_value": { 918 | "s_original": "405 MHz", 919 | "s_name_base_unit": "Byte", 920 | "n_nano": 405000000000000000, 921 | "n_micro": 405000000000000, 922 | "n_milli": 405000000000, 923 | "n_centi": 40500000000, 924 | "n_deci": 4050000000, 925 | "n": 405000000, 926 | "n_kilo": 405000, 927 | "n_kibi": 395507.8125, 928 | "n_mega": 405, 929 | "n_mebi": 386.23809814453125, 930 | "n_giga": 0.405, 931 | "n_gibi": 0.3771856427192688, 932 | "n_tera": 0.000405, 933 | "n_tebi": 0.00036834535421803594, 934 | "n_peta": 4.05e-7, 935 | "n_peti": 3.597122599785507e-7 936 | }, 937 | "n_nor": null, 938 | "o_number_value_max": null, 939 | "o_number_value_min": null 940 | }, 941 | { 942 | "o_gpu_property": { 943 | "s_property_accessor_nvidia_smi": "clocks.video_clock", 944 | "s_title": "Video Clock Speed", 945 | "s_description": "The clock speed of the GPU’s video processing engine, measured in MHz. This controls the rate at which the video processing hardware operates." 946 | }, 947 | "s_value": "555 MHz", 948 | "o_number_value": { 949 | "s_original": "555 MHz", 950 | "s_name_base_unit": "Byte", 951 | "n_nano": 554999999999999940, 952 | "n_micro": 555000000000000, 953 | "n_milli": 555000000000, 954 | "n_centi": 55500000000, 955 | "n_deci": 5550000000, 956 | "n": 555000000, 957 | "n_kilo": 555000, 958 | "n_kibi": 541992.1875, 959 | "n_mega": 555, 960 | "n_mebi": 529.2892456054688, 961 | "n_giga": 0.555, 962 | "n_gibi": 0.5168840289115906, 963 | "n_tera": 0.000555, 964 | "n_tebi": 0.0005047695594839752, 965 | "n_peta": 5.55e-7, 966 | "n_peti": 4.929390229335695e-7 967 | }, 968 | "n_nor": null, 969 | "o_number_value_max": null, 970 | "o_number_value_min": null 971 | }, 972 | { 973 | "o_gpu_property": { 974 | "s_property_accessor_nvidia_smi": "product_name", 975 | "s_title": "Product Name", 976 | "s_description": "The official name of the GPU, identifying its model and variant." 977 | }, 978 | "s_value": "NVIDIA GeForce RTX 3070 Laptop GPU", 979 | "o_number_value": null, 980 | "n_nor": null, 981 | "o_number_value_max": null, 982 | "o_number_value_min": null 983 | }, 984 | { 985 | "o_gpu_property": { 986 | "s_property_accessor_nvidia_smi": "product_brand", 987 | "s_title": "Product Brand", 988 | "s_description": "The brand under which the GPU is marketed, such as NVIDIA GeForce or AMD Radeon." 989 | }, 990 | "s_value": "GeForce", 991 | "o_number_value": null, 992 | "n_nor": null, 993 | "o_number_value_max": null, 994 | "o_number_value_min": null 995 | }, 996 | { 997 | "o_gpu_property": { 998 | "s_property_accessor_nvidia_smi": "product_architecture", 999 | "s_title": "Product Architecture", 1000 | "s_description": "The underlying architecture of the GPU, representing its generation and core technology, such as Ampere, RDNA, or Turing." 1001 | }, 1002 | "s_value": "Ampere", 1003 | "o_number_value": null, 1004 | "n_nor": null, 1005 | "o_number_value_max": null, 1006 | "o_number_value_min": null 1007 | }, 1008 | { 1009 | "o_gpu_property": { 1010 | "s_property_accessor_nvidia_smi": "vbios_version", 1011 | "s_title": "VBIOS Version", 1012 | "s_description": "The version of the Video BIOS (VBIOS) running on the GPU, which controls low-level operations and configurations." 1013 | }, 1014 | "s_value": "94.04.83.00.13", 1015 | "o_number_value": null, 1016 | "n_nor": null, 1017 | "o_number_value_max": null, 1018 | "o_number_value_min": null 1019 | }, 1020 | { 1021 | "o_gpu_property": { 1022 | "s_property_accessor_nvidia_smi": "display_mode", 1023 | "s_title": "Display Mode", 1024 | "s_description": "The current display mode, indicating whether the GPU is rendering content on connected displays (active) or not (idle)." 1025 | }, 1026 | "s_value": "Enabled", 1027 | "o_number_value": null, 1028 | "n_nor": null, 1029 | "o_number_value_max": null, 1030 | "o_number_value_min": null 1031 | }, 1032 | { 1033 | "o_gpu_property": { 1034 | "s_property_accessor_nvidia_smi": "display_active", 1035 | "s_title": "Display Active", 1036 | "s_description": "Indicates whether the GPU is actively connected to and driving a display." 1037 | }, 1038 | "s_value": "Enabled", 1039 | "o_number_value": null, 1040 | "n_nor": null, 1041 | "o_number_value_max": null, 1042 | "o_number_value_min": null 1043 | }, 1044 | { 1045 | "o_gpu_property": { 1046 | "s_property_accessor_nvidia_smi": "persistence_mode", 1047 | "s_title": "Persistence Mode", 1048 | "s_description": "Indicates whether the GPU is in persistence mode, which keeps the GPU driver loaded even when no applications are using the GPU." 1049 | }, 1050 | "s_value": "Disabled", 1051 | "o_number_value": null, 1052 | "n_nor": null, 1053 | "o_number_value_max": null, 1054 | "o_number_value_min": null 1055 | }, 1056 | { 1057 | "o_gpu_property": { 1058 | "s_property_accessor_nvidia_smi": "addressing_mode", 1059 | "s_title": "Addressing Mode", 1060 | "s_description": "The memory addressing mode used by the GPU, which determines how the GPU accesses its memory." 1061 | }, 1062 | "s_value": "None", 1063 | "o_number_value": null, 1064 | "n_nor": null, 1065 | "o_number_value_max": null, 1066 | "o_number_value_min": null 1067 | }, 1068 | { 1069 | "o_gpu_property": { 1070 | "s_property_accessor_nvidia_smi": "accounting_mode", 1071 | "s_title": "Accounting Mode", 1072 | "s_description": "Indicates whether the GPU’s resource usage accounting mode is enabled, tracking the consumption of GPU resources for processes." 1073 | }, 1074 | "s_value": "Disabled", 1075 | "o_number_value": null, 1076 | "n_nor": null, 1077 | "o_number_value_max": null, 1078 | "o_number_value_min": null 1079 | }, 1080 | { 1081 | "o_gpu_property": { 1082 | "s_property_accessor_nvidia_smi": "accounting_mode_buffer_size", 1083 | "s_title": "Accounting Mode Buffer Size", 1084 | "s_description": "The buffer size allocated for tracking and storing GPU resource usage information when accounting mode is enabled." 1085 | }, 1086 | "s_value": "4000", 1087 | "o_number_value": null, 1088 | "n_nor": null, 1089 | "o_number_value_max": null, 1090 | "o_number_value_min": null 1091 | } 1092 | ] -------------------------------------------------------------------------------- /process_monitor_websersocket_0628a90e-0163-400d-bee6-e31e990e9197.sh: -------------------------------------------------------------------------------- 1 | pid_websersocket=$(pgrep -f "websersocket_0628a90e-0163-400d-bee6-e31e990e9197.js") 2 | watch -n 1 ps -p $pid_websersocket -o pid,etime,%cpu,%mem,cmd -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Browser GPU Monitor 2 | ![graphs](./gpu_monitor.png) 3 | # Installation and run 4 | ` 5 | git clone https://github.com/jonasfrey/gpu-monitor-browser-gui.git 6 | && 7 | cd gpu-monitor-browser-gui 8 | && 9 | deno run -A websersocket_0628a90e-0163-400d-bee6-e31e990e9197.js 10 | ` 11 | # requirements 12 | `deno` (js), `nvidia-smi` OR `amdgpu_top` 13 | 14 | ## install denojs 15 | 16 | `curl -fsSL https://deno.land/install.sh | sh` 17 | 18 | or more installation options on https://docs.deno.com/runtime/fundamentals/installation/ 19 | 20 | ## install nvidia-smi or 21 | `sudo apt install nvidia` 22 | ## or amdgpu_top 23 | `sudo apt install amdgpu_top` 24 | 25 | 26 | # Running / starting it 27 | `deno run -A websersocket_0628a90e-0163-400d-bee6-e31e990e9197.js` 28 | then hit enter a few times to generate a self signed certificate (needed for local https server...) 29 | 30 | finally visit : https://localhost:8443 31 | 32 | ## requirements 33 | the gpu performance data comes from two existing programms you one of these 34 | ### NVIDIA `nvidia-smi` 35 | `sudo apt install nvidia-smi` 36 | ### AMD `amdgpu_top` 37 | `sudo apt instal amdgpu_top` 38 | -------------------------------------------------------------------------------- /restart_nohup_run_websersocket_0628a90e-0163-400d-bee6-e31e990e9197.sh: -------------------------------------------------------------------------------- 1 | ./kill_nohup_deno_run_websersocket_0628a90e-0163-400d-bee6-e31e990e9197.sh 2 | ./nohup_deno_run_websersocket_0628a90e-0163-400d-bee6-e31e990e9197.sh -------------------------------------------------------------------------------- /runtimedata.module.js: -------------------------------------------------------------------------------- 1 | // here 'runtimedata' is stored 2 | // this is data that only exists at the runtime 3 | // usually its arrays of objects representing stuff 4 | // objects can be named and then exported 5 | // import { 6 | // O_person 7 | // } from "./classes.module.js" 8 | 9 | // let o_person__hans = new O_person( 10 | // 'hans', 11 | // 80, 12 | // ); 13 | // // also arrays of objects can be exported 14 | // let a_o_person = [ 15 | // o_person__hans, 16 | // new O_person()// if you dont need the named object 17 | // // 'unnamed' objects can always be accessed with a_o.find(o=>...) 18 | // ] 19 | // export { 20 | // o_person__hans, 21 | // a_o_person 22 | // } -------------------------------------------------------------------------------- /test.js: -------------------------------------------------------------------------------- 1 | import "./localhost/test_client.module.js"; -------------------------------------------------------------------------------- /websersocket_0628a90e-0163-400d-bee6-e31e990e9197.js: -------------------------------------------------------------------------------- 1 | import { 2 | f_websersocket_serve, 3 | f_v_before_return_response__fileserver, 4 | } from "https://deno.land/x/websersocket@6.0.1/mod.js"; 5 | 6 | import { f_s_ymd_hms__from_n_ts_ms_utc } from "https://deno.land/x/date_functions@2.0.0/mod.js"; 7 | import { f_o_command } from "https://deno.land/x/o_command@0.9/mod.js"; 8 | import { O_ws_client } from "./classes.module.js"; 9 | import { 10 | ensureDir, 11 | ensureFile as f_ensure_file, 12 | } from "https://deno.land/std@0.224.0/fs/mod.ts"; 13 | 14 | import { parse as f_o_xml_parsed } from "https://deno.land/x/xml@5.4.16/parse.ts"; 15 | 16 | import { f_o_config } from "./functions.module.js"; 17 | import { 18 | f_o_number_value__from_s_input, 19 | f_a_o_number_value_temperature_from_s_temp, 20 | } from "https://deno.land/x/handyhelpers@5.1.95/mod.js"; 21 | 22 | import { 23 | O_gpu_property_value, 24 | O_gpu_info, 25 | O_gpu_readout_info, 26 | O_gpu_readout_object, 27 | O_gpu_fan, 28 | } from "./localhost/classes.module.js"; 29 | import { 30 | a_o_gpu_property, 31 | o_gpu_property__fan_speed, 32 | o_gpu_property__gpu_name, 33 | o_gpu_property__gpu_utilization, 34 | o_gpu_property__graphics_clock, 35 | o_gpu_property__graphics_volt, 36 | o_gpu_property__mem_clock, 37 | o_gpu_property__memory_info, 38 | o_gpu_property__memory_info_bar1_nvidia_specific, 39 | o_gpu_property__memory_info_graphics_translation_table_amd_specific, 40 | o_gpu_property__memory_info_per_process_nvidia_specific, 41 | o_gpu_property__pci_address, 42 | o_gpu_property__power_draw, 43 | o_gpu_property__sm_clock, 44 | o_gpu_property__temperature, 45 | o_gpu_property__video_clock, 46 | } from "./localhost/runtimedata.module.js"; 47 | 48 | let s_path_abs_file_current = new URL(import.meta.url).pathname; 49 | let s_path_abs_folder_current = s_path_abs_file_current 50 | .split("/") 51 | .slice(0, -1) 52 | .join("/"); 53 | const b_deno_deploy = Deno.env.get("DENO_DEPLOYMENT_ID") !== undefined; 54 | 55 | let a_o_ws_client = []; 56 | 57 | // let o_config = await f_o_config(); 58 | // console.log({o_config}); 59 | 60 | let b_dev = true; 61 | let s_api_key = `rtrjRM`; 62 | let s_path_abs_folder_cached_shaders = "./localhost/cached_shaders"; 63 | if (!b_deno_deploy) { 64 | await ensureDir(s_path_abs_folder_cached_shaders); // deno deploy is read only... 65 | } 66 | let f_b_nvidia_smi_installed = async function () { 67 | let b = false; 68 | try { 69 | let o = await f_o_command("which nvidia-smi"); 70 | b = o.s_stdout != ""; 71 | } catch (error) {} 72 | return b; 73 | }; 74 | let f_b_amdgpu_top_installed = async function () { 75 | let b = false; 76 | try { 77 | let o = await f_o_command("which amdgpu_top"); 78 | b = o.s_stdout != ""; 79 | } catch (error) {} 80 | return b; 81 | }; 82 | let f_o_gpu_in_machine = async function () { 83 | let s_command = 'lspci | grep -E "VGA|3D"'; 84 | let o = await f_o_command(s_command); 85 | let b_nvidia = o.s_stdout.toLowerCase().includes("nvidia"); 86 | let b_amd = o.s_stdout.toLowerCase().includes("advanced micro devices"); 87 | 88 | return { 89 | b_nvidia, 90 | b_amd, 91 | s_command, 92 | s_stdout_from_command: o.s_stdout, 93 | }; 94 | }; 95 | let s_path_file_a_o_configuration = "./gitignored/a_o_configuration.json"; 96 | 97 | let f_a_o_fan_available_nvidia = async function(){ 98 | let b = await f_b_nvidia_smi_installed(); 99 | if(!b){ 100 | return [] 101 | } 102 | let s_command = `nvidia-settings -q GPUFanTarget | grep -i "Attribute 'GPUFanTarget'"` 103 | let o = await f_o_command(s_command); 104 | let a_o_fan = o.s_stdout.split('\n').map(s=>s.trim()).map(s=>{ 105 | 106 | const o_regex = /\[fan:(\d+)\]/; 107 | 108 | // Use o_regex to find the match in the input string 109 | const a_s_match = s.match(o_regex); 110 | 111 | let n_id_fan = 0; 112 | // If a a_s_match is found, return the fan number as an integer, otherwise return null 113 | if (a_s_match && a_s_match[1]) { 114 | n_id_fan = parseInt(a_s_match[1], 10); 115 | }else{ 116 | return false 117 | } 118 | 119 | return new O_gpu_fan( 120 | n_id_fan, 121 | null, 122 | false, 123 | 0.0 124 | ); 125 | }).filter(v=>v); 126 | 127 | return a_o_fan; 128 | } 129 | let f_set_fan_control_auto_nvidia = async function(){ 130 | let s_command_toggle_manual_control = `nvidia-settings -a "[gpu:0]/GPUFanControlState=0"`; 131 | let o1 = await f_o_command(s_command_toggle_manual_control); 132 | return true 133 | } 134 | let f_set_fan_control_manual_nvidia = async function(){ 135 | let s_command_toggle_manual_control = `nvidia-settings -a "[gpu:0]/GPUFanControlState=1"`; 136 | let o1 = await f_o_command(s_command_toggle_manual_control); 137 | return true 138 | } 139 | let f_set_fan_speed_nvidia = async function(n_nor_speed){ 140 | await f_set_fan_control_auto_nvidia(); 141 | let s_command_set_fan_speed = `nvidia-settings -a "[fan:0]/GPUTargetFanSpeed=${parseInt(n_nor_speed*100)}"` 142 | let o2 = await f_o_command(s_command_set_fan_speed); 143 | } 144 | let f_n_rpm_fanspeed_nvidia = async function() { 145 | let s_command = `nvidia-settings -q [fan:0]/GPUCurrentFanSpeedRPM`; 146 | let o = await f_o_command(s_command); 147 | let s_stdout = o.s_stdout; 148 | 149 | // Check if the command was not found or another error occurred 150 | if (s_stdout.includes(': command not found')) { 151 | throw new Error(`The command ${s_command} was not found. Is nvidia-settings installed? Is this even a system with an NVIDIA GPU?`); 152 | } 153 | 154 | // Check if the output contains 'Attribute' indicating that the command ran successfully 155 | if (!s_stdout.includes('Attribute')) { 156 | throw new Error(`Unexpected output: ${s_stdout}`); 157 | } 158 | 159 | // Extract the fan speed RPM from the output using regex 160 | let a_s_match = s_stdout.match(/GPUCurrentFanSpeedRPM' \(.+?\): (\d+)\./); 161 | 162 | // If extraction fails, return null 163 | if (!a_s_match) { 164 | return null; 165 | } 166 | 167 | // Convert the matched value to an integer, including the case where it's 0 168 | let n_fan_speed = parseInt(a_s_match[1], 10); 169 | 170 | // Return null if the fan speed is not a valid number (shouldn't happen unless there's an issue) 171 | if (isNaN(n_fan_speed)) { 172 | return null; 173 | } 174 | 175 | return n_fan_speed; 176 | }; 177 | let f_handler = async function (o_request) { 178 | // websocket 'request' handling here 179 | if (o_request.headers.get("Upgrade") == "websocket") { 180 | const { socket: o_socket, response: o_response } = 181 | Deno.upgradeWebSocket(o_request); 182 | let o_ws_client = new O_ws_client(crypto.randomUUID(), o_socket); 183 | a_o_ws_client.push(o_ws_client); 184 | 185 | o_socket.addEventListener("open", (o_e) => { 186 | console.log({ 187 | o_e, 188 | s: "o_socket.open called", 189 | }); 190 | }); 191 | 192 | o_socket.addEventListener("message", async (o_e) => { 193 | console.log({ 194 | o_e, 195 | s: "o_socket.message called", 196 | }); 197 | let v_data = o_e.data; 198 | a_o_ws_client 199 | .filter((o) => o != o_ws_client) // send to all other clients, comment out to send to all clients 200 | .forEach((o) => { 201 | o.o_socket.send("message was received from a client"); 202 | }); 203 | }); 204 | o_socket.addEventListener("close", async (o_e) => { 205 | a_o_ws_client.splice(a_o_ws_client.indexOf(o_ws_client), 1); 206 | console.log({ 207 | o_e, 208 | s: "o_socket.close called", 209 | }); 210 | }); 211 | 212 | return o_response; 213 | } 214 | // normal http request handling here 215 | let o_url = new URL(o_request.url); 216 | if (o_url.pathname == "/") { 217 | return new Response( 218 | await Deno.readTextFile( 219 | `${s_path_abs_folder_current}/localhost/client.html`, 220 | ), 221 | { 222 | headers: { 223 | "Content-type": "text/html", 224 | }, 225 | }, 226 | ); 227 | } 228 | if (o_url.pathname == "/f_a_o_configuration") { 229 | let a_o = []; 230 | await f_ensure_file(s_path_file_a_o_configuration); 231 | try { 232 | a_o = JSON.parse(await Deno.readTextFile(s_path_file_a_o_configuration)); 233 | } catch (error) {} 234 | return new Response(JSON.stringify(a_o), { 235 | headers: { 236 | "Content-type": "application/json", 237 | }, 238 | }); 239 | } 240 | if (o_url.pathname == "/f_createorupdate_configuration") { 241 | let o = await o_request.json(); 242 | let a_o = []; 243 | try { 244 | a_o = JSON.parse(await Deno.readTextFile(s_path_file_a_o_configuration)); 245 | } catch (error) {} 246 | let o_existing = a_o.find((o2) => o2.s_name == o.s_name); 247 | console.log(o_existing); 248 | let s = "saved"; 249 | if (o_existing) { 250 | let n_idx = a_o.indexOf(o_existing); 251 | a_o[n_idx] = o; 252 | s = "updated"; 253 | } else { 254 | a_o.push(o); 255 | } 256 | 257 | await Deno.writeTextFile( 258 | s_path_file_a_o_configuration, 259 | JSON.stringify(a_o, null, 4), 260 | ); 261 | return new Response(`configuration ${s} successfully !`); 262 | } 263 | if (o_url.pathname == "/f_b_nvidia_smi_installed") { 264 | let b = await f_b_nvidia_smi_installed(); 265 | if (b_dev) { 266 | b = true; 267 | } 268 | return new Response(JSON.stringify(b), { 269 | headers: { 270 | "Content-type": "application/json", 271 | }, 272 | }); 273 | } 274 | 275 | 276 | if (o_url.pathname == "/f_a_o_gpu_fan") { 277 | let a_o = await f_a_o_fan_available_nvidia(); 278 | return new Response(JSON.stringify(a_o), { 279 | headers: { 280 | "Content-type": "application/json", 281 | }, 282 | }); 283 | } 284 | 285 | if(o_url.pathname == '/f_set_fan_control_manual_nvidia'){ 286 | let v = await f_set_fan_control_manual_nvidia(); 287 | return new Response('ok', {status: 200}); 288 | } 289 | if(o_url.pathname == '/f_set_fan_control_auto_nvidia'){ 290 | let v = await f_set_fan_control_auto_nvidia(); 291 | return new Response('ok', {status: 200}); 292 | } 293 | if (o_url.pathname == "/f_set_fan_speed_nvidia") { 294 | let o = await o_request.json(); 295 | let v = await f_set_fan_speed_nvidia(o.n_nor_speed); 296 | return new Response('ok', {status: 200}); 297 | } 298 | 299 | 300 | 301 | if (o_url.pathname == "/f_o_gpu_readout_info") { 302 | let s_xml = ""; 303 | let b_nvidia_smi = await f_b_nvidia_smi_installed(); 304 | let b_amdgpu_top = await f_b_amdgpu_top_installed(); 305 | let o_gpu_in_machine = await f_o_gpu_in_machine(); 306 | 307 | if (!b_amdgpu_top && !b_nvidia_smi) { 308 | if (o_gpu_in_machine.b_amd && !b_amdgpu_top) { 309 | return new Response( 310 | `it looks like you have a AMD GPU ${o_gpu_in_machine.s_command}:${o_gpu_in_machine.s_stdout_from_command}. please run 'apt install amdgpu_top'.`, 311 | { status: 500 }, 312 | ); 313 | } 314 | if (o_gpu_in_machine.b_nvidia && !b_nvidia_smi) { 315 | return new Response( 316 | `it looks like you have a NVIDIA GPU. ${o_gpu_in_machine.s_command}:${o_gpu_in_machine.s_stdout_from_command} please run 'apt install amdgpu_top'.`, 317 | { status: 500 }, 318 | ); 319 | } 320 | } 321 | let a_o_gpu_info = []; 322 | let o_nvidia_smi_xml; 323 | let a_o_gpu_readout_object = []; 324 | let s_binary_nvidia_smi = "nvidia-smi"; 325 | let s_binary_amdgpu_top = "amdgpu_top"; 326 | if (b_nvidia_smi && o_gpu_in_machine.b_nvidia) { 327 | let o = await f_o_command(`${s_binary_nvidia_smi} -q -x`); 328 | // console.log(o) 329 | s_xml = o.s_stdout; 330 | o_nvidia_smi_xml = f_o_xml_parsed(s_xml); 331 | await Deno.writeTextFile( 332 | "./o_xml.json", 333 | JSON.stringify(o_nvidia_smi_xml, null, 4), 334 | ); 335 | // console.log(o_nvidia_smi_xml) 336 | let v = o_nvidia_smi_xml.nvidia_smi_log.gpu; 337 | let a_o = v; 338 | if (!Array.isArray(v)) { 339 | a_o = [v]; 340 | } 341 | for (let o of a_o) { 342 | a_o_gpu_readout_object.push( 343 | new O_gpu_readout_object(s_binary_nvidia_smi, o), 344 | ); 345 | } 346 | 347 | // i could kotzen ! fucking xml structure is behinderet as fuck just use fucking json, what is so hard 348 | // now this absolutely stupid workaround is necessary 349 | } 350 | if (b_amdgpu_top && o_gpu_in_machine.b_amd) { 351 | let a_o = JSON.parse( 352 | (await f_o_command(`${s_binary_amdgpu_top} -d --json`)).s_stdout, 353 | ); 354 | for (let o of a_o) { 355 | a_o_gpu_readout_object.push( 356 | new O_gpu_readout_object(s_binary_amdgpu_top, o), 357 | ); 358 | } 359 | } 360 | // console.log(a_o_gpu_readout_object) 361 | 362 | a_o_gpu_info = a_o_gpu_readout_object.map(async (o_gpu_readout_object) => { 363 | let o_gpu_readout = o_gpu_readout_object.o_gpu_readout; 364 | let a_o_gpu_property_value = a_o_gpu_property 365 | .map(async (o_gpu_property) => { 366 | let o_gpu_property_value = new O_gpu_property_value(o_gpu_property); 367 | let a_o_gpu_property_value = []; 368 | if (o_gpu_property.s_name == o_gpu_property__gpu_name.s_name) { 369 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 370 | o_gpu_property_value.s_val = o_gpu_readout.product_name; 371 | } else { 372 | o_gpu_property_value.s_val = o_gpu_readout?.DeviceName; 373 | } 374 | } 375 | if (o_gpu_property.s_name == o_gpu_property__pci_address.s_name) { 376 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 377 | o_gpu_property_value.s_val = o_gpu_readout.pci.pci_bus_id; 378 | } else { 379 | o_gpu_property_value.s_val = o_gpu_readout?.PCI; 380 | } 381 | } 382 | if (o_gpu_property.s_name == o_gpu_property__gpu_utilization.s_name) { 383 | o_gpu_property_value.s_val = "%"; 384 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 385 | o_gpu_property_value.o_number_value = 386 | f_o_number_value__from_s_input( 387 | o_gpu_readout.utilization.gpu_util, 388 | ); 389 | o_gpu_property_value.o_number_value_max = 390 | f_o_number_value__from_s_input("100 %"); 391 | o_gpu_property_value.n_nor = 392 | parseInt(o_gpu_readout.utilization.gpu_util) / 100; 393 | } else { 394 | o_gpu_property_value.o_number_value_max = 395 | f_o_number_value__from_s_input("100 %"); 396 | o_gpu_property_value.o_number_value = 397 | f_o_number_value__from_s_input( 398 | `${o_gpu_readout?.gpu_activity?.GFX?.value} %`, 399 | ); 400 | o_gpu_property_value.n_nor = 401 | o_gpu_readout?.gpu_activity?.GFX?.value / 100; 402 | } 403 | } 404 | if (o_gpu_property.s_name == o_gpu_property__temperature.s_name) { 405 | o_gpu_property_value.s_val = "°C"; 406 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 407 | o_gpu_property_value.o_number_value = 408 | f_o_number_value__from_s_input( 409 | o_gpu_readout.temperature.gpu_temp, 410 | ); 411 | o_gpu_property_value.o_number_value_max = 412 | f_o_number_value__from_s_input( 413 | // o_gpu_readout.temperature.gpu_temp_max_threshold 414 | //not on all nvidia gpus available... therefore just using 120 degrees... o_gpu_readout.temperature.gpu_temp_max_threshold 415 | `120 C`, 416 | ); 417 | o_gpu_property_value.n_nor = 418 | o_gpu_property_value.o_number_value.n / 419 | o_gpu_property_value.o_number_value_max.n; 420 | } else { 421 | o_gpu_property_value.o_number_value = 422 | f_o_number_value__from_s_input( 423 | `${o_gpu_readout?.Sensors?.["Edge Temperature"]?.value} ${o_gpu_readout?.Sensors?.["Edge Temperature"].unit}`, 424 | ); 425 | o_gpu_property_value.o_number_value_max = 426 | f_o_number_value__from_s_input( 427 | `200 C`, //static because amdgpu_top does not provide? 428 | ); 429 | o_gpu_property_value.n_nor = 430 | o_gpu_property_value.o_number_value.n / 431 | o_gpu_property_value.o_number_value_max.n; 432 | } 433 | } 434 | if (o_gpu_property.s_name == o_gpu_property__power_draw.s_name) { 435 | o_gpu_property_value.s_val = "Watt"; 436 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 437 | o_gpu_property_value.o_number_value = 438 | f_o_number_value__from_s_input( 439 | o_gpu_readout.gpu_power_readings.power_draw, 440 | ); 441 | o_gpu_property_value.o_number_value_max = 442 | f_o_number_value__from_s_input( 443 | o_gpu_readout.gpu_power_readings.current_power_limit, 444 | ); 445 | o_gpu_property_value.n_nor = 446 | o_gpu_property_value.o_number_value.n / 447 | o_gpu_property_value.o_number_value_max.n; 448 | } else { 449 | o_gpu_property_value.o_number_value = 450 | f_o_number_value__from_s_input( 451 | `${o_gpu_readout?.Sensors?.["GFX Power"]?.value} ${o_gpu_readout?.Sensors?.["GFX Power"].unit}`, 452 | ); 453 | o_gpu_property_value.o_number_value_max = 454 | f_o_number_value__from_s_input( 455 | `${o_gpu_readout?.["Power Cap"]?.max} ${o_gpu_readout?.Sensors?.["GFX Power"].unit}`, 456 | ); 457 | o_gpu_property_value.n_nor = 458 | o_gpu_property_value.o_number_value.n / 459 | o_gpu_property_value.o_number_value_max.n; 460 | } 461 | } 462 | if (o_gpu_property.s_name == o_gpu_property__memory_info.s_name) { 463 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 464 | o_gpu_property_value.s_val = o_gpu_readout.fb_memory_usage.used 465 | .split(" ") 466 | .pop() 467 | .trim(); 468 | o_gpu_property_value.o_number_value = 469 | f_o_number_value__from_s_input( 470 | o_gpu_readout.fb_memory_usage.used, 471 | ); 472 | o_gpu_property_value.o_number_value_max = 473 | f_o_number_value__from_s_input( 474 | o_gpu_readout.fb_memory_usage.total, 475 | ); 476 | o_gpu_property_value.n_nor = 477 | o_gpu_property_value.o_number_value.n / 478 | o_gpu_property_value.o_number_value_max.n; 479 | } else { 480 | o_gpu_property_value.s_val = 481 | o_gpu_readout?.VRAM?.["Total VRAM Usage"]?.unit; 482 | 483 | o_gpu_property_value.o_number_value = 484 | f_o_number_value__from_s_input( 485 | `${o_gpu_readout?.VRAM?.["Total VRAM Usage"]?.value} ${o_gpu_readout?.VRAM?.["Total VRAM Usage"]?.unit}`, 486 | ); 487 | o_gpu_property_value.o_number_value_max = 488 | f_o_number_value__from_s_input( 489 | `${o_gpu_readout?.VRAM?.["Total VRAM"]?.value} ${o_gpu_readout?.VRAM?.["Total VRAM"]?.unit}`, 490 | ); 491 | o_gpu_property_value.n_nor = 492 | o_gpu_property_value.o_number_value.n / 493 | o_gpu_property_value.o_number_value_max.n; 494 | } 495 | } 496 | if ( 497 | o_gpu_property.s_name == 498 | o_gpu_property__memory_info_bar1_nvidia_specific.s_name 499 | ) { 500 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 501 | o_gpu_property_value.s_val = o_gpu_readout.bar1_memory_usage.used 502 | .split(" ") 503 | .pop() 504 | .trim(); 505 | o_gpu_property_value.o_number_value = 506 | f_o_number_value__from_s_input( 507 | o_gpu_readout.bar1_memory_usage.used, 508 | ); 509 | o_gpu_property_value.o_number_value_max = 510 | f_o_number_value__from_s_input( 511 | o_gpu_readout.bar1_memory_usage.total, 512 | ); 513 | o_gpu_property_value.n_nor = 514 | o_gpu_property_value.o_number_value.n / 515 | o_gpu_property_value.o_number_value_max.n; 516 | } else { 517 | o_gpu_property_value.s_val = "AMD GPU does not have this metric"; 518 | } 519 | } 520 | if ( 521 | o_gpu_property.s_name == 522 | o_gpu_property__memory_info_graphics_translation_table_amd_specific.s_name 523 | ) { 524 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 525 | o_gpu_property_value.s_val = 526 | "NVIDIA GPU does not have this metric"; 527 | } else { 528 | o_gpu_property_value.s_val = 529 | o_gpu_readout?.VRAM?.["Total GTT Usage"]?.unit; 530 | o_gpu_property_value.o_number_value = 531 | f_o_number_value__from_s_input( 532 | `${o_gpu_readout?.VRAM?.["Total GTT Usage"]?.value} ${o_gpu_readout?.VRAM?.["Total GTT Usage"]?.unit}`, 533 | ); 534 | o_gpu_property_value.o_number_value_max = 535 | f_o_number_value__from_s_input( 536 | `${o_gpu_readout?.VRAM?.["Total GTT"]?.value} ${o_gpu_readout?.VRAM?.["Total GTT"]?.unit}`, 537 | ); 538 | o_gpu_property_value.n_nor = 539 | o_gpu_property_value.o_number_value.n / 540 | o_gpu_property_value.o_number_value_max.n; 541 | } 542 | } 543 | if ( 544 | o_gpu_property.s_name == 545 | o_gpu_property__memory_info_per_process_nvidia_specific.s_name 546 | ) { 547 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 548 | a_o_gpu_property_value = o_gpu_readout.processes.process_info.map( 549 | (o_process_info) => { 550 | let o_gpu_property_value = new O_gpu_property_value( 551 | o_gpu_property, 552 | ); 553 | // { 554 | // "gpu_instance_id": "N/A", 555 | // "compute_instance_id": "N/A", 556 | // "pid": "3592", 557 | // "type": "G", 558 | // "process_name": "/usr/lib/xorg/Xorg", 559 | // "used_memory": "457 MiB" 560 | // }, 561 | o_gpu_property_value.o_number_value = 562 | f_o_number_value__from_s_input(o_process_info.used_memory); 563 | o_gpu_property_value.o_number_value_max = 564 | f_o_number_value__from_s_input( 565 | o_gpu_readout.fb_memory_usage.total, 566 | ); 567 | o_gpu_property_value.n_nor = 568 | o_gpu_property_value.o_number_value.n / 569 | o_gpu_property_value.o_number_value_max.n; 570 | 571 | o_gpu_property_value.o_meta = o_process_info; 572 | return o_gpu_property_value; 573 | }, 574 | ); 575 | } else { 576 | o_gpu_property_value.s_val = "AMD GPU does not have this metric"; 577 | } 578 | } 579 | 580 | if (o_gpu_property.s_name == o_gpu_property__graphics_clock.s_name) { 581 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 582 | o_gpu_property_value.o_number_value = 583 | f_o_number_value__from_s_input( 584 | o_gpu_readout.clocks.graphics_clock, 585 | ); 586 | o_gpu_property_value.o_number_value_max = 587 | f_o_number_value__from_s_input( 588 | o_gpu_readout.max_clocks.graphics_clock, 589 | ); 590 | o_gpu_property_value.n_nor = 591 | o_gpu_property_value.o_number_value.n / 592 | o_gpu_property_value.o_number_value_max.n; 593 | } else { 594 | o_gpu_property_value.o_number_value = 595 | f_o_number_value__from_s_input( 596 | `${o_gpu_readout.Sensors.GFX_SCLK.value} ${o_gpu_readout.Sensors.GFX_SCLK.unit}`, 597 | ); 598 | o_gpu_property_value.o_number_value_max = 599 | f_o_number_value__from_s_input( 600 | `${o_gpu_readout?.["GPU Clock"].max} ${o_gpu_readout.Sensors.GFX_SCLK.unit}`, 601 | //has a min value (o_gpu_readout?.["GPU Clock"].min ) 602 | ); 603 | o_gpu_property_value.n_nor = 604 | o_gpu_property_value.o_number_value.n / 605 | o_gpu_property_value.o_number_value_max.n; 606 | } 607 | } 608 | if (o_gpu_property.s_name == o_gpu_property__sm_clock.s_name) { 609 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 610 | o_gpu_property_value.o_number_value = 611 | f_o_number_value__from_s_input(o_gpu_readout.clocks.sm_clock); 612 | o_gpu_property_value.o_number_value_max = 613 | f_o_number_value__from_s_input( 614 | o_gpu_readout.max_clocks.sm_clock, 615 | ); 616 | o_gpu_property_value.n_nor = 617 | o_gpu_property_value.o_number_value.n / 618 | o_gpu_property_value.o_number_value_max.n; 619 | } else { 620 | // o_gpu_property_value.s_val = 'AMD GPU does not have this metric' 621 | } 622 | } 623 | if (o_gpu_property.s_name == o_gpu_property__mem_clock.s_name) { 624 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 625 | o_gpu_property_value.o_number_value = 626 | f_o_number_value__from_s_input(o_gpu_readout.clocks.mem_clock); 627 | o_gpu_property_value.o_number_value_max = 628 | f_o_number_value__from_s_input( 629 | o_gpu_readout.max_clocks.mem_clock, 630 | ); 631 | o_gpu_property_value.n_nor = 632 | o_gpu_property_value.o_number_value.n / 633 | o_gpu_property_value.o_number_value_max.n; 634 | } else { 635 | o_gpu_property_value.o_number_value = 636 | f_o_number_value__from_s_input( 637 | `${o_gpu_readout.Sensors.GFX_MCLK.value} ${o_gpu_readout.Sensors.GFX_MCLK.unit}`, 638 | ); 639 | o_gpu_property_value.o_number_value_max = 640 | f_o_number_value__from_s_input( 641 | `${o_gpu_readout?.["Memory Clock"].max} ${o_gpu_readout.Sensors.GFX_MCLK.unit}`, 642 | //has a min value (o_gpu_readout?.["Memory Clock"].min ) 643 | ); 644 | o_gpu_property_value.n_nor = 645 | o_gpu_property_value.o_number_value.n / 646 | o_gpu_property_value.o_number_value_max.n; 647 | } 648 | } 649 | if (o_gpu_property.s_name == o_gpu_property__video_clock.s_name) { 650 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 651 | o_gpu_property_value.o_number_value = 652 | f_o_number_value__from_s_input( 653 | o_gpu_readout.clocks.video_clock, 654 | ); 655 | o_gpu_property_value.o_number_value_max = 656 | f_o_number_value__from_s_input( 657 | o_gpu_readout.max_clocks.video_clock, 658 | ); 659 | o_gpu_property_value.n_nor = 660 | o_gpu_property_value.o_number_value.n / 661 | o_gpu_property_value.o_number_value_max.n; 662 | } else { 663 | // o_gpu_property_value.s_val = 'AMD GPU does not have this metric' 664 | } 665 | } 666 | 667 | if (o_gpu_property.s_name == o_gpu_property__graphics_volt.s_name) { 668 | let n_mv_max_estimation = 1200; // according to chatgpt most gpus have a max of 1200 millivolt 669 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 670 | o_gpu_property_value.o_number_value = 671 | f_o_number_value__from_s_input( 672 | o_gpu_readout.voltage.graphics_volt, 673 | ); 674 | o_gpu_property_value.o_number_value_max = 675 | f_o_number_value__from_s_input(`${n_mv_max_estimation} mV`); 676 | o_gpu_property_value.n_nor = 677 | o_gpu_property_value.o_number_value.n / 678 | o_gpu_property_value.o_number_value_max.n; 679 | } else { 680 | o_gpu_property_value.o_number_value = 681 | f_o_number_value__from_s_input( 682 | `${o_gpu_readout.Sensors.VDDGFX.value} ${o_gpu_readout.Sensors.VDDGFX.unit}`, 683 | ); 684 | o_gpu_property_value.o_number_value_max = 685 | f_o_number_value__from_s_input(`${n_mv_max_estimation} mV`); 686 | o_gpu_property_value.n_nor = 687 | o_gpu_property_value.o_number_value.n / 688 | o_gpu_property_value.o_number_value_max.n; 689 | } 690 | } 691 | 692 | if (o_gpu_property.s_name == o_gpu_property__fan_speed.s_name) { 693 | 694 | if (o_gpu_readout_object.s_binary_name == s_binary_nvidia_smi) { 695 | let n_rpm = null; 696 | try { 697 | n_rpm = await f_n_rpm_fanspeed_nvidia(); 698 | } catch (error) { 699 | console.log(error) 700 | } 701 | console.log(n_rpm) 702 | 703 | if(n_rpm != null){ 704 | o_gpu_property_value.o_number_value = f_o_number_value__from_s_input(`${n_rpm} RPM`); 705 | // a bit sketchy, we assume o_gpu_readout.fan_speed always returns % 706 | let n_percent = parseInt(o_gpu_readout.fan_speed); 707 | // if the fan speed is 0, it will be turned off when not much gpu is used 708 | // this calulation wont work 709 | let n_rpm_max = parseInt(parseFloat(o_gpu_property_value.o_number_value.n / n_percent)*100) 710 | if(isNaN(n_rpm_max)){ 711 | n_rpm_max = 5000 712 | } 713 | o_gpu_property_value.o_number_value_max = f_o_number_value__from_s_input(`${n_rpm_max} RPM`); 714 | }else{ 715 | 716 | o_gpu_property_value.o_number_value = 717 | f_o_number_value__from_s_input(o_gpu_readout.fan_speed); 718 | o_gpu_property_value.o_number_value_max = 719 | f_o_number_value__from_s_input("100 %"); 720 | } 721 | // on nvidia rtx 4060 there is just a percentage % unit, no 'rpm', 722 | // o_gpu_property_value.o_number_value_max = f_o_number_value__from_s_input( 723 | // `${n_mv_max_estimation} mV` 724 | // ) 725 | 726 | o_gpu_property_value.n_nor = 727 | o_gpu_property_value.o_number_value.n; 728 | } else { 729 | o_gpu_property_value.o_number_value = 730 | f_o_number_value__from_s_input( 731 | `${o_gpu_readout.Sensors.Fan.value} ${o_gpu_readout.Sensors.Fan.unit}`, 732 | ); 733 | o_gpu_property_value.o_number_value_max = 734 | f_o_number_value__from_s_input( 735 | `${o_gpu_readout.Sensors?.["Fan Max"].value} ${o_gpu_readout.Sensors?.["Fan Max"].unit}`, 736 | ); 737 | o_gpu_property_value.n_nor = 738 | o_gpu_property_value.o_number_value.n / 739 | o_gpu_property_value.o_number_value_max.n; 740 | } 741 | } 742 | 743 | if (a_o_gpu_property_value.length == 0) { 744 | a_o_gpu_property_value.push(o_gpu_property_value); 745 | } 746 | // o_gpu_property__gpu_name, 747 | // o_gpu_property__gpu_utilization, 748 | // o_gpu_property__temperature, 749 | // o_gpu_property__power_draw, 750 | // o_gpu_property__memory_info, 751 | // o_gpu_property__pci_address, 752 | 753 | return a_o_gpu_property_value; 754 | }) 755 | .flat(); 756 | a_o_gpu_property_value = (await Promise.all(a_o_gpu_property_value)).flat(); 757 | 758 | let o_gpu_info = new O_gpu_info( 759 | a_o_gpu_property_value.find( 760 | (o) => { 761 | return o.o_gpu_property.s_name == o_gpu_property__pci_address.s_name 762 | }, 763 | )?.s_val, 764 | a_o_gpu_property_value.find( 765 | (o) => o.o_gpu_property.s_name == o_gpu_property__gpu_name.s_name, 766 | )?.s_val, 767 | a_o_gpu_property_value, 768 | ); 769 | return o_gpu_info; 770 | }); 771 | a_o_gpu_info = (await Promise.all(a_o_gpu_info)).flat() 772 | 773 | let n_ts_ms = new Date().getTime(); 774 | let s_ymd_hms = f_s_ymd_hms__from_n_ts_ms_utc(n_ts_ms); 775 | let o_gpu_readout_info = new O_gpu_readout_info( 776 | n_ts_ms, 777 | s_ymd_hms, 778 | a_o_gpu_info, 779 | ); 780 | 781 | return new Response(JSON.stringify(o_gpu_readout_info), { 782 | headers: { 783 | "Content-type": "application/json", 784 | }, 785 | }); 786 | } 787 | 788 | return f_v_before_return_response__fileserver( 789 | o_request, 790 | `${s_path_abs_folder_current}/localhost/`, 791 | ); 792 | }; 793 | 794 | let s_name_host = "localhost"; //Deno.hostname(); // or maybe some ip adress 112.35.8.13 795 | let b_development = s_name_host != "the_server_name_here"; 796 | let s_name_host2 = b_development ? "localhost" : s_name_host; 797 | 798 | // let o_info_certificates = { 799 | // s_path_certificate_file: './self_signed_cert_0628a90e-0163-400d-bee6-e31e990e9197.crt', 800 | // s_path_key_file: './self_signed_key_0628a90e-0163-400d-bee6-e31e990e9197.key' 801 | // } 802 | 803 | await f_websersocket_serve([ 804 | { 805 | n_port: 8080, 806 | b_https: false, 807 | s_hostname: s_name_host, 808 | f_v_before_return_response: f_handler, 809 | }, 810 | ...[ 811 | !b_deno_deploy 812 | ? { 813 | // ...o_info_certificates, 814 | n_port: 8443, 815 | b_https: true, 816 | s_hostname: s_name_host, 817 | f_v_before_return_response: f_handler, 818 | } 819 | : false, 820 | ].filter((v) => v), 821 | ]); 822 | --------------------------------------------------------------------------------