의사도요

의사도요

의사도요

테스트를 위해 서버의 CPU 아키텍처에 대한 정보를 시뮬레이션해야 합니다. 이를 달성할 수 있는 유일한 방법은 lscpu 명령(lscpu | grep Architecture모의 스키마를 반환해야 합니다.). lscpu가 /proc/cpuinfo데이터를 가져오는 것을 알고 있지만 sysf찾을 수 없습니다.정확히 뭐야?lscpu가 다른 아키텍처를 반환하도록 변경해야 합니까?

문맥

사용자가 사용하고 있는 CPU 아키텍처를 간단히 확인하고 있습니다. 나는 이것을 확인함으로써 이것을 한다 if 'arm' =~ (lscpu | grep Architecture | awk '{print $2}'). 제가 소개해드리고 싶은 사소한 체크입니다. 그러나 문제는 다양한 유형의 스키마에 대해 다양한 검사를 수행하는 방법을 모른다는 것입니다.

내가 시도한 것 :

  1. mock을 사용하여 lscpu 파일을 미리 준비 echo Architecture: <Different architecture> 하고 $PATH에 추가합니다. 테스트 중인 애플리케이션은 다른 $PATH를 사용하므로 작동하지 않습니다.
  2. 에뮬레이션을 사용하여 lscpu 파일을 미리 준비하고 lscpu | sed -r <expression to change Architecture>이를 원본 lscpu에 바인딩합니다. sudo mount --bind <mockedlscpu> /usr/bin/lscpu이 경우 모든 lscpu호출이 시스템을 정지시킵니다.
  3. lscpu와 다른 명령 사용 - 테스트된 애플리케이션은 명시적으로 lscpu를 사용합니다.

이것이 유일한 방법은 /proc/cpuinfo의 데이터를 시뮬레이션하는 것이라고 가정합니다(아래 샘플 출력: "CPU 아키텍처" 필드 없음).

processor   : 31
vendor_id   : AuthenticAMD
cpu family  : 25
model       : 33
model name  : AMD Ryzen 9 5950X 16-Core Processor
stepping    : 0
microcode   : 0xa201025
cpu MHz     : 4065.719
cache size  : 512 KB
physical id : 0
siblings    : 32
core id     : 15
cpu cores   : 16
apicid      : 31
initial apicid  : 31
fpu     : yes
fpu_exception   : yes
cpuid level : 16
wp      : yes
flags       : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf rapl pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate ssbd mba ibrs ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 erms invpcid cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr rdpru wbnoinvd arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif v_spec_ctrl umip pku ospke vaes vpclmulqdq rdpid overflow_recov succor smca fsrm
bugs        : sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass
bogomips    : 6787.39
TLB size    : 2560 4K pages
clflush size    : 64
cache_alignment : 64
address sizes   : 48 bits physical, 48 bits virtual
power management: ts ttp tm hwpstate cpb eff_freq_ro [13] [14]

또는 sysfs를 사용하여 lscpu를 정상적으로 실행하고 시뮬레이션 데이터를 출력하도록 합니다. 그런데 이 CPU 아키텍처 데이터가 변경되는 구체적인 위치를 찾을 수 없습니다. 가능합니까? 그렇다면 이 데이터는 정확히 어디에 저장되며 어떻게 시뮬레이션할 수 있습니까? 모든 아이디어를 높이 평가합니다!

관련 정보