From e0cb2fb136cb2cf347041265bc0043e5180dd271 Mon Sep 17 00:00:00 2001 From: wjchuee Date: Thu, 12 Jun 2025 14:39:18 +0800 Subject: [PATCH] Ant dyno start_now option --- .../dynolog_npu/cli/src/commands/nputrace.rs | 9 ++++-- msmonitor/dynolog_npu/cli/src/main.rs | 31 +++++++++++-------- 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/msmonitor/dynolog_npu/cli/src/commands/nputrace.rs b/msmonitor/dynolog_npu/cli/src/commands/nputrace.rs index ef84b3038df..a9fc563963e 100644 --- a/msmonitor/dynolog_npu/cli/src/commands/nputrace.rs +++ b/msmonitor/dynolog_npu/cli/src/commands/nputrace.rs @@ -11,6 +11,7 @@ pub enum NpuTraceTriggerConfig { }, IterationBased { start_step: u64, + start: bool, iterations: i64, }, } @@ -27,12 +28,14 @@ impl NpuTraceTriggerConfig { ), NpuTraceTriggerConfig::IterationBased { start_step, + start, iterations, } => format!( r#"PROFILE_START_ITERATION=0 PROFILE_START_STEP={} +PROFILE_START={} ACTIVITIES_ITERATIONS={}"#, - start_step, iterations + start_step, start, iterations ), } } @@ -196,14 +199,16 @@ mod test { ACTIVITIES_DURATION_MSECS=1000"# ); - let trigger_config = NpuTraceTriggerConfig::IterationBased { + let trigger_config = NpuTraceTriggerConfig::IterationBased { profile_start_step: 1000, + profile_start: false, iterations: 1000, }; assert_eq!( trigger_config.config(), r#"PROFILE_START_ITERATION=0 PROFILE_START_STEP=1000 +PROFILE_START=false ACTIVITIES_ITERATIONS=1000"# ); } diff --git a/msmonitor/dynolog_npu/cli/src/main.rs b/msmonitor/dynolog_npu/cli/src/main.rs index 2bd85a79637..c43dcd798f1 100644 --- a/msmonitor/dynolog_npu/cli/src/main.rs +++ b/msmonitor/dynolog_npu/cli/src/main.rs @@ -78,7 +78,7 @@ fn parse_mspti_activity_kinds(src: &str) -> Result{ return Err(format!("Invalid MSPTI activity kind: {}, Possible values: {:?}.]", kind, allowed_values)); } } - + Ok(src.to_string()) } @@ -175,6 +175,9 @@ enum Command { /// Number of steps to start profile. #[clap(long, default_value_t = 0)] start_step: u64, + /// Whether to start profile now. + #[clap(long, action)] + start: bool, /// Max number of processes to profile. #[clap(long, default_value_t = 3)] process_limit: u32, @@ -285,12 +288,12 @@ fn verify_certificate(cert_der: &[u8], is_root_cert: bool) -> Result<()> { // 检查证书签名算法 let sig_alg = cert.signature_algorithm.algorithm; - + // 定义不安全的算法 OID let md2_rsa = oid!(1.2.840.113549.1.1.2); // MD2 with RSA let md5_rsa = oid!(1.2.840.113549.1.1.4); // MD5 with RSA let sha1_rsa = oid!(1.2.840.113549.1.1.5); // SHA1 with RSA - + // 检查是否使用不安全的算法 if sig_alg == md2_rsa || sig_alg == md5_rsa || sig_alg == sha1_rsa { return Err(io::Error::new( @@ -428,7 +431,7 @@ fn is_cert_revoked(cert_der: &[u8], crl_path: &PathBuf) -> Result { let crl_data = read_to_string(crl_path)?; let (_, pem) = pem::parse_x509_pem(crl_data.as_bytes()) .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, format!("Failed to parse CRL PEM: {:?}", e)))?; - + // 解析 CRL let (_, crl) = CertificateRevocationList::from_der(&pem.contents) .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, format!("Failed to parse CRL: {:?}", e)))?; @@ -472,7 +475,7 @@ fn is_cert_revoked(cert_der: &[u8], crl_path: &PathBuf) -> Result { for revoked in crl.iter_revoked_certificates() { let revoked_serial = revoked.user_certificate.to_bigint() .ok_or_else(|| io::Error::new(io::ErrorKind::InvalidData, "Failed to convert revoked certificate serial to BigInt"))?; - + if revoked_serial == cert_serial { return Ok(true); } @@ -486,7 +489,7 @@ enum DynoClient { } fn create_dyno_client( - host: &str, + host: &str, port: u16, certs_dir: &str, ) -> Result { @@ -507,7 +510,7 @@ fn create_dyno_client( } fn create_dyno_client_with_no_certs( - host: &str, + host: &str, port: u16, ) -> Result { let addr = (host, port) @@ -519,7 +522,7 @@ fn create_dyno_client_with_no_certs( } fn create_dyno_client_with_certs( - host: &str, + host: &str, port: u16, config: &ClientConfigPath, ) -> Result> { @@ -549,7 +552,7 @@ fn create_dyno_client_with_certs( let cert_file = File::open(&config.cert_path)?; let mut cert_reader = BufReader::new(cert_file); let certs = rustls_pemfile::certs(&mut cert_reader)?; - + // 检查客户端证书的基本要求 for cert in &certs { verify_certificate(cert, false)?; // 验证客户端证书 @@ -587,7 +590,7 @@ fn create_dyno_client_with_certs( println!("Loading client key from: {}", config.key_path.display()); let key_file = File::open(&config.key_path)?; let mut key_reader = BufReader::new(key_file); - + // 检查私钥是否加密 let mut key_data = Vec::new(); key_reader.read_to_end(&mut key_data)?; @@ -600,10 +603,10 @@ fn create_dyno_client_with_certs( let mut password = prompt_password("Please enter the certificate password: ")?; let pkey = PKey::private_key_from_pem_passphrase(&key_data, password.as_bytes()) .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, format!("Failed to decrypt private key: {}", e)))?; - + // 清除密码 password.clear(); - + // 返回私钥 vec![pkey.private_key_to_der() .map_err(|e| io::Error::new(io::ErrorKind::InvalidData, format!("Failed to convert private key to DER: {}", e)))?] @@ -612,7 +615,7 @@ fn create_dyno_client_with_certs( let mut key_reader = BufReader::new(File::open(&config.key_path)?); rustls_pemfile::pkcs8_private_keys(&mut key_reader)? }; - + if keys.is_empty() { return Err(io::Error::new( io::ErrorKind::InvalidData, @@ -703,6 +706,7 @@ fn main() -> Result<()> { iterations, profile_start_time, start_step, + start, process_limit, record_shapes, profile_memory, @@ -728,6 +732,7 @@ fn main() -> Result<()> { let trigger_config = if iterations > 0 { NpuTraceTriggerConfig::IterationBased { start_step, + start, iterations, } } else { -- Gitee