diff --git a/Cargo.lock b/Cargo.lock index 9a16135..122341d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -513,7 +513,7 @@ checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -548,7 +548,7 @@ checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -615,11 +615,22 @@ dependencies = [ "zbus 3.15.2", ] +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi 0.1.19", + "libc", + "winapi", +] + [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" @@ -668,7 +679,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -793,7 +804,7 @@ checksum = "0cc8b54b395f2fcfbb3d90c47b01c7f444d94d05bdeb775811dec868ac3bbc26" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -832,7 +843,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -916,9 +927,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.1.21" +version = "1.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0" +checksum = "9540e661f81799159abee814118cc139a2004b3a3aa3ea37724a1b66530b90e0" dependencies = [ "jobserver", "libc", @@ -1014,7 +1025,7 @@ dependencies = [ "heck 0.5.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1261,7 +1272,7 @@ dependencies = [ [[package]] name = "cosmic-config" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "atomicwrites", "cosmic-config-derive", @@ -1280,7 +1291,7 @@ dependencies = [ [[package]] name = "cosmic-config-derive" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "quote", "syn 1.0.109", @@ -1312,7 +1323,7 @@ dependencies = [ [[package]] name = "cosmic-theme" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "almost", "cosmic-config", @@ -1442,7 +1453,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1488,7 +1499,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1499,7 +1510,7 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1574,7 +1585,7 @@ dependencies = [ "convert_case", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", "unicode-xid", ] @@ -1587,7 +1598,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1644,7 +1655,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1758,7 +1769,7 @@ checksum = "de0d48a183585823424a4ce1aa132d174a6a81bd540895822eb4c8373a8e49e8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -1947,9 +1958,9 @@ dependencies = [ [[package]] name = "flate2" -version = "1.0.33" +version = "1.0.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "324a1be68054ef05ad64b861cc9eaf1d623d2d8cb25b4bf2cb9cdd902b4bf253" +checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" dependencies = [ "crc32fast", "miniz_oxide 0.8.0", @@ -2076,7 +2087,7 @@ checksum = "1a5c6c585bc94aaf2c7b51dd4c2ba22680844aba4c687be581871a6f518c5742" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2211,7 +2222,7 @@ checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2264,6 +2275,15 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "getopts" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" +dependencies = [ + "unicode-width", +] + [[package]] name = "getrandom" version = "0.2.15" @@ -2442,7 +2462,9 @@ dependencies = [ "env_logger", "lm-sensors", "log", + "nvml-wrapper", "ouroboros 0.18.4", + "pretty-bytes", "rand", "serde", "serde_json", @@ -2487,6 +2509,15 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" +[[package]] +name = "hermit-abi" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" +dependencies = [ + "libc", +] + [[package]] name = "hermit-abi" version = "0.3.9" @@ -2570,7 +2601,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.77", + "syn 2.0.79", "unic-langid", ] @@ -2584,7 +2615,7 @@ dependencies = [ "i18n-config", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -2613,7 +2644,7 @@ dependencies = [ [[package]] name = "iced" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "dnd", "iced_accessibility", @@ -2631,7 +2662,7 @@ dependencies = [ [[package]] name = "iced_accessibility" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "accesskit", "accesskit_winit", @@ -2640,7 +2671,7 @@ dependencies = [ [[package]] name = "iced_core" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "bitflags 2.6.0", "dnd", @@ -2660,7 +2691,7 @@ dependencies = [ [[package]] name = "iced_futures" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "futures", "iced_core", @@ -2673,7 +2704,7 @@ dependencies = [ [[package]] name = "iced_graphics" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "bitflags 2.6.0", "bytemuck", @@ -2697,7 +2728,7 @@ dependencies = [ [[package]] name = "iced_renderer" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "iced_graphics", "iced_tiny_skia", @@ -2709,7 +2740,7 @@ dependencies = [ [[package]] name = "iced_runtime" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "dnd", "iced_core", @@ -2721,7 +2752,7 @@ dependencies = [ [[package]] name = "iced_style" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "iced_core", "once_cell", @@ -2731,7 +2762,7 @@ dependencies = [ [[package]] name = "iced_tiny_skia" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "bytemuck", "cosmic-text", @@ -2748,7 +2779,7 @@ dependencies = [ [[package]] name = "iced_wgpu" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "as-raw-xcb-connection", "bitflags 2.6.0", @@ -2777,7 +2808,7 @@ dependencies = [ [[package]] name = "iced_widget" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "dnd", "iced_renderer", @@ -2793,7 +2824,7 @@ dependencies = [ [[package]] name = "iced_winit" version = "0.12.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "dnd", "iced_graphics", @@ -3111,7 +3142,7 @@ checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] name = "libcosmic" version = "0.1.0" -source = "git+https://github.com/pop-os/libcosmic?branch=master#701638009df09a254b7d077ddc4d1076cd87a147" +source = "git+https://github.com/pop-os/libcosmic?branch=master#228eb4d70d581be88bacb1e261106a58603d847b" dependencies = [ "apply", "ashpd 0.9.1", @@ -3202,7 +3233,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcb64f856d7b5144b0c102ec029f4d8a474c91c86336a2f5e96494e3d2f72db3" dependencies = [ "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -3412,7 +3443,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b8a240ddb74feaf34a79a7add65a741f3167852fba007066dcac1ca548d89c08" dependencies = [ "adler", - "simd-adler32", ] [[package]] @@ -3422,6 +3452,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" dependencies = [ "adler2", + "simd-adler32", ] [[package]] @@ -3661,7 +3692,28 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", +] + +[[package]] +name = "nvml-wrapper" +version = "0.10.0" +source = "git+https://github.com/raum-dellamorte/nvml-wrapper#25606ba634646d19378a6d847eb933b352b0ede4" +dependencies = [ + "bitflags 2.6.0", + "libloading 0.8.5", + "nvml-wrapper-sys", + "static_assertions", + "thiserror", + "wrapcenum-derive", +] + +[[package]] +name = "nvml-wrapper-sys" +version = "0.8.0" +source = "git+https://github.com/raum-dellamorte/nvml-wrapper#25606ba634646d19378a6d847eb933b352b0ede4" +dependencies = [ + "libloading 0.8.5", ] [[package]] @@ -3823,7 +3875,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -3837,7 +3889,7 @@ dependencies = [ "proc-macro2", "proc-macro2-diagnostics", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -3871,7 +3923,7 @@ dependencies = [ "by_address", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -3970,7 +4022,7 @@ dependencies = [ "phf_shared", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -4019,15 +4071,15 @@ checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "png" -version = "0.17.13" +version = "0.17.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06e4b0d3d1312775e782c86c91a111aa1f910cbb65e1337f9975b5f9a554b5e1" +checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0" dependencies = [ "bitflags 1.3.2", "crc32fast", "fdeflate", "flate2", - "miniz_oxide 0.7.4", + "miniz_oxide 0.8.0", ] [[package]] @@ -4082,6 +4134,16 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa" +[[package]] +name = "pretty-bytes" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "009d6edd2c1dbf2e1c0cd48a2f7766e03498d49ada7109a01c6911815c685316" +dependencies = [ + "atty", + "getopts", +] + [[package]] name = "prettyplease" version = "0.2.22" @@ -4089,7 +4151,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "479cf940fbbb3426c32c5d5176f62ad57549a0bb84773423ba8be9d089f5faba" dependencies = [ "proc-macro2", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -4152,7 +4214,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", "version_check", "yansi", ] @@ -4449,7 +4511,7 @@ dependencies = [ "proc-macro2", "quote", "rust-embed-utils", - "syn 2.0.77", + "syn 2.0.79", "walkdir", ] @@ -4644,7 +4706,7 @@ checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -4668,14 +4730,14 @@ checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] name = "serde_spanned" -version = "0.6.7" +version = "0.6.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb5b1b31579f3811bf615c144393417496f152e12ac8b7663bf664f4a815306d" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" dependencies = [ "serde", ] @@ -4702,7 +4764,7 @@ checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -5020,9 +5082,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.77" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", @@ -5051,9 +5113,9 @@ dependencies = [ [[package]] name = "tempfile" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", "fastrand 2.1.1", @@ -5088,7 +5150,7 @@ checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -5264,7 +5326,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -5587,7 +5649,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", "wasm-bindgen-shared", ] @@ -5621,7 +5683,7 @@ checksum = "afc340c74d9005395cf9dd098506f7f44e38f2b4a21c6aaacf9a105ea5e1e836" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -6311,6 +6373,18 @@ dependencies = [ "toml 0.5.11", ] +[[package]] +name = "wrapcenum-derive" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a76ff259533532054cfbaefb115c613203c73707017459206380f03b3b3f266e" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.79", +] + [[package]] name = "x11-dl" version = "2.21.0" @@ -6531,7 +6605,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", "zvariant_utils 2.1.0", ] @@ -6581,7 +6655,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] [[package]] @@ -6643,7 +6717,7 @@ dependencies = [ "proc-macro-crate 3.2.0", "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", "zvariant_utils 2.1.0", ] @@ -6666,5 +6740,5 @@ checksum = "c51bcff7cc3dbb5055396bcf774748c3dab426b4b8659046963523cee4808340" dependencies = [ "proc-macro2", "quote", - "syn 2.0.77", + "syn 2.0.79", ] diff --git a/hardware/Cargo.toml b/hardware/Cargo.toml index 53073fb..2127f75 100644 --- a/hardware/Cargo.toml +++ b/hardware/Cargo.toml @@ -29,6 +29,8 @@ utils.workspace = true [target.'cfg(target_os = "linux")'.dependencies] lm-sensors = { git = "https://github.com/wiiznokes/lm-sensors.git", branch = "pwm" } ouroboros = "0.18" +nvml-wrapper = { git = "https://github.com/raum-dellamorte/nvml-wrapper" } +pretty-bytes = "0.2" [dev-dependencies] env_logger.workspace = true \ No newline at end of file diff --git a/hardware/src/linux.rs b/hardware/src/linux.rs index dc1e8d9..e4c7091 100644 --- a/hardware/src/linux.rs +++ b/hardware/src/linux.rs @@ -227,6 +227,10 @@ fn generate_hardware<'a>( impl HardwareBridge for LinuxBridge { fn new() -> crate::Result { + + test::b().unwrap(); + test::set_default().unwrap(); + let mut hardware = Hardware::default(); let lib = match lm_sensors::Initializer::default().initialize() { @@ -330,3 +334,144 @@ impl HardwareBridge for LinuxBridge { }) } } + +// #[cfg(test)] +mod test { + use nvml_wrapper::{ + cuda_driver_version_major, cuda_driver_version_minor, + enum_wrappers::device::{Clock, TemperatureSensor}, + error::NvmlError, + Nvml, + }; + use pretty_bytes::converter::convert; + + #[test] + fn a() { + b().unwrap(); + set_default().unwrap(); + } + + pub fn set_default() -> Result<(), NvmlError> { + let nvml = Nvml::init()?; + + for device_id in 0..nvml.device_count()? { + let device = nvml.device_by_index(device_id)?; + + for fan_id in 0..device.num_fans()? { + device.set_default_fan_speed(fan_id).unwrap(); + } + } + + Ok(()) + } + + pub fn d() -> Result<(), NvmlError> { + let nvml = Nvml::init()?; + + let device = nvml.device_by_index(0)?; + + device.set_fan_speed(0, 100).unwrap(); + + Ok(()) + } + + pub fn c() -> Result<(), NvmlError> { + let nvml = Nvml::init()?; + + for device_id in 0..nvml.device_count()? { + let device = nvml.device_by_index(device_id)?; + + for fan_id in 0..device.num_fans()? { + // device.set_fan_speed(fan_id, 100).unwrap(); + let s = device.fan_speed(fan_id)?; + dbg!(&s); + } + } + + Ok(()) + } + + pub fn b() -> Result<(), NvmlError> { + let nvml = Nvml::init()?; + + let cuda_version = nvml.sys_cuda_driver_version()?; + + // Grabbing the first device in the system, whichever one that is. + // If you want to ensure you get the same physical device across reboots, + // get devices via UUID or PCI bus IDs. + let device = nvml.device_by_index(0)?; + + // Now we can do whatever we want, like getting some data... + let name = device.name()?; + let temperature = device.temperature(TemperatureSensor::Gpu)?; + let mem_info = device.memory_info()?; + let graphics_clock = device.clock_info(Clock::Graphics)?; + let clock_info = device.clock_info(Clock::Memory); + let mem_clock = clock_info?; + let link_gen = device.current_pcie_link_gen()?; + let link_speed = device + .pcie_link_speed() + .map(u64::from) + // Convert megabytes to bytes + .map(|x| x * 1000000)?; + let link_width = device.current_pcie_link_width()?; + let max_link_gen = device.max_pcie_link_gen()?; + let max_link_width = device.max_pcie_link_width()?; + let max_link_speed = device + .max_pcie_link_speed()? + .as_integer() + .map(u64::from) + // Convert megabytes to bytes + .map(|x| x * 1000000); + let cuda_cores = device.num_cores()?; + let architecture = device.architecture()?; + + // And we can use that data (here we just print it) + print!("\n\n"); + println!( + "Your {name} (architecture: {architecture}, CUDA cores: {cuda_cores}) \ + is currently sitting at {temperature} °C with a graphics clock of \ + {graphics_clock} MHz and a memory clock of {mem_clock} MHz. Memory \ + usage is {used_mem} out of an available {total_mem}. Right now the \ + device is connected via a PCIe gen {link_gen} x{link_width} interface \ + with a transfer rate of {link_speed} per lane; the max your hardware \ + supports is PCIe gen {max_link_gen} x{max_link_width} at a transfer \ + rate of {max_link_speed} per lane.", + name = name, + temperature = temperature, + graphics_clock = graphics_clock, + mem_clock = mem_clock, + used_mem = convert(mem_info.used as _), + total_mem = convert(mem_info.total as _), + link_gen = link_gen, + // Convert byte output to transfers/sec + link_speed = convert(link_speed as _).replace("B", "T") + "/s", + link_width = link_width, + max_link_gen = max_link_gen, + max_link_width = max_link_width, + cuda_cores = cuda_cores, + architecture = architecture, + max_link_speed = max_link_speed + // Convert byte output to transfers/sec + .map(|x| convert(x as _).replace("B", "T") + "/s") + .unwrap_or_else(|| "".into()), + ); + + println!(); + if device.is_multi_gpu_board()? { + println!("This device is on a multi-GPU board.") + } else { + println!("This device is not on a multi-GPU board.") + } + + println!(); + println!( + "System CUDA version: {}.{}", + cuda_driver_version_major(cuda_version), + cuda_driver_version_minor(cuda_version) + ); + + print!("\n\n"); + Ok(()) + } +} diff --git a/justfile b/justfile index f6e171b..4341657 100644 --- a/justfile +++ b/justfile @@ -86,3 +86,8 @@ run-lhm: expand: cargo expand + +rules: + cp ./res/linux/60-fan-control.rules /etc/udev/rules.d/ + udevadm control --reload-rules + udevadm trigger \ No newline at end of file diff --git a/res/linux/60-fan-control.rules b/res/linux/60-fan-control.rules index c1e5517..df76472 100644 --- a/res/linux/60-fan-control.rules +++ b/res/linux/60-fan-control.rules @@ -1 +1,5 @@ SUBSYSTEM=="hwmon", RUN+="/bin/sh -c '/bin/chmod a+w /sys%p/pwm* || true'" + +KERNEL=="nvidia*", MODE="0666" +KERNEL=="nvidiactl", MODE="0666" +KERNEL=="nvidia-uvm", MODE="0666" \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 8ec604b..3cbf9a1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -83,6 +83,10 @@ fn setup_logs(args: &Args) { } fn try_run() -> Result<()> { + + + let bridge = hardware::new()?; + let args = Args::parse(); setup_logs(&args); @@ -92,7 +96,6 @@ fn try_run() -> Result<()> { let dir_manager = DirManager::new(&args.config_dir_path, &args.config_name); - let bridge = hardware::new()?; let hardware = bridge.hardware(); debug!("sensors found: {:?}", hardware);