Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Определить текущую производительность ПК (http://forum.oszone.net/showthread.php?t=307135)

c4uran 26-10-2015 15:27 2568331

Определить текущую производительность ПК
 
Условно есть компьютер на котором средствами командной строки ( на крайняк powershell ) + бесплатными утилитами 7zip или типа https://live.sysinternals.com/ необходимо получить на выходе число - скорость работы этого компьютера.

(в итоге цель - по всему домену собрать отчет со всех компьютеров и выявить самые медленные и на основании этого листа вывести их из эксплуатации)

Iska 26-10-2015 15:36 2568335

c4uran, начните с определения «скорости работы».

sov44 26-10-2015 15:45 2568339

c4uran, попробуйте скрипт "Многопроцессное создание пустых файлов (бенчмарк для винчестера)". Автор Dragokas http://www.cyberforum.ru/cmd-bat
Скрытый текст
Код:

::Многопотоковое создание пустых файлов ::by Alex Drago.kas
@echo off
Setlocal EnableDelayedExpansion EnableExtensions
Set Dest=y:\m2
Set /A Potok=50
Set /A PotokMax=8
Set /A Range=10000
 
if not exist "%Dest%" md "%Dest%"
::1 из потоков - управляющий (этот код) + 1(?не знаю почему)
Set /A PotokMax+=2
 
Set TimeS=%Time%
Call :TimeToMSec "%TimeS%" TimeS_ms
Echo Задание начато в %TimeS%
 
Set /A sS=0
For /L %%P in (1,1,%Potok%) do (
  Set /A sE=!sS!+%Range%-1
  start "Stream %%P" /min "CMD /Q /C For /L %%N in (!sS!,1,!sE!) do cd.>%Dest%\%%N"
  Set /A sS+=%Range%
  Echo Запущен поток № %%P
  Call :WaitForReady %PotokMax%
)
Echo Все потоки запущены.
Echo Ожидаю завершения заданий.
 
Call :WaitForReady 3&:: (+1 ?не знаю почему)
 
Set TimeE=%Time%
Call :TimeToMSec "%TimeE%" TimeE_ms
 
Echo Задание  начато  в  %TimeS%
Echo Задание завершено в %TimeE%
 
Set /A diff=TimeE_ms-TimeS_ms
Set /A diffSS=diff/100
Set /A diffms=%diff% %% 100
Set /A TotalFiles=Potok*Range
Set /A Speed=TotalFiles*100/diff
Echo Записано %TotalFiles% файлов.
Echo Затрачено: %diffSS%,%diffms% с.
Echo Скорость:  %Speed% файлов/с.
Echo.
pause
Goto :eof
 
:WaitForReady %PotokMax%
Set /A n=0
For /F "Delims=" %%A in ('tasklist^|Findstr /BLIC:cmd.exe') do (Set /A n+=1)
if %n% LSS %~1 Exit /B
ping -w 100 -n 1 192.168.254.254> nul
Goto :WaitForReady
 
:TimeToMSec %Time% %var_mSec%
For /F "Tokens=1-4 Delims=,:" %%A in ("%~1") do (
  Set /A HH=%%A
  Set MM=1%%B& Set /A MM=!MM!-100
  Set SS=1%%C& Set /A SS=!SS!-100
  Set mS=1%%D& Set /A mS=!mS!-100
)
Set /A %~2=(HH*60*60+MM*60+SS)*100+mS
Exit /B


NickM 26-10-2015 16:40 2568356

WinSAT? Тогда может помочь - CheckBootSpeed

c4uran 26-10-2015 16:42 2568358

Iska,
думаю я бы разделил это на 3 категории:
1.скорость обработки процессором допустим архива
2.скорость памяти
3.скорость работы жесткого диска

либо получать с каждого компьютера 3 цифры либо взять какую то цифру за основу и подсчитать отношение к ней, думаю это же более простой вопрос

sov44,
Изучаю...

Да еще есть такая вещь как время загрузки системы, я не знаю на сколько точно оно будет отражать производительность но самое простое это оно, как бы его получить

Foreigner 26-10-2015 17:18 2568371

В виндоус, кажется начиная с висты, встроена утилита оценки производительности системы -- winsat.exe. Сбор сведений о производительности
Код:

winsat formal
winsat -?  -- изучите для конкретизации и детализации отчета

К сожалению на 10-ке вылетает (на 8-ке прекрасно работала). Почему разбираться лень.


Iska 26-10-2015 18:16 2568395

c4uran, вся проблема в том, что любой синтетический тест — это банальные, мало к чему привязанные, «попугаи».

c4uran 27-10-2015 10:11 2568606

Кажется странным что поиск тормозящих компьютеров в домене бесплатными средствами еще не реализовали

winsat показывает чрезвычайно синтетическую информацию поэтому думаю не подходит

Думаю возможно ли реализовать это на каком нибудь штатном процессе допустим тесте архива в 1 гиг, проверить сколько времени архивирует нормальный комп и сравнить с остальными

c4uran 28-10-2015 10:19 2568950

эх написал сам как мог, тест взят на основе 7zip т.к он установлен на всех компьютерах в сети.
Функцию :count взял из гугла, на некоторых компьютерах не правильно срабатывает но на 80% работает и ладно

описание лога бенча 7zip обязательно нужно прочесть тут: http://7zip.bugaco.com/7zip/MANUAL/c...V3tFsHWVtNJ6TF
(есть недокументированная фича когда тест вылетает с выводом что не смог выделить память, в отчете заметно не вооруженным глазом)

скрипт закидывается на удаленный комп через psexec или логон скрипт, дополнительная информация, после выполнения сохраняется на удаленной машине(или сервер отчетов), так что путь до нее необходимо поменять(set "remotelog=) для полноты картины добавил дополнительные поля, т.к производительность очень сильно зависит от памяти и от ядер процессора.



Код:

@echo off
setlocal
set app="c:\program files\7-Zip\7z.exe"
if not exist c:\temp md c:\temp
set log="c:\temp\bech.txt"
if exist %log% del /f /q %log%
set "remotelog=\\YOUR_PC_HOSTNAME\d$\bench_%~n0.txt"

echo %computername%
call :getmodel
echo %model%
call :failed
call :benching
call :logwork
call :count

echo %computername%        %model%        %cpu%        %ramsize%        %ramusage%        %spendTime%        %benched%        %errors% >> %remotelog%

endlocal
exit 0

:failed
if not exist %app% (
echo %computername%        %model%        not exist %app% >> %remotelog%
exit 1
)
exit /b

:benching
set "starttime=%time%"
echo %starttime%
%app% b 1 -md26        >%log%
set "errors=%errorlevel%"
set "endtime=%time%"
echo %endtime%
exit /b

:getmodel
for /f "tokens=1,2 skip=1 delims= " %%i in ('wmic csproduct get name') do set model=%%i %%j&exit /b
exit /b

:logwork
for /f "tokens=3 delims= " %%a in ('type %log% ^| findstr/i c:"RAM size:"') do set "ramsize=%%a MB"
for /f "tokens=3 delims= " %%a in ('type %log% ^| findstr/i "RAM size:"') do set "ramusage=%%a MB"
for /f "tokens=3 delims=:" %%a in ('type %log% ^| findstr/i "CPU hardware threads:"') do set "cpu=%%a"
for /f "tokens=2,3,4 delims= " %%a in ('type %log% ^| findstr/i "tot:"') do set "benched=%%a        %%b        %%c"
REM Dict        Compressing          |        Decompressing
      REM Speed Usage    R/U Rating  |    Speed Usage    R/U Rating
      REM KB/s    %  MIPS  MIPS  |    KB/s    %  MIPS  MIPS

REM 22:  13684  334  3990  13312  |  177800  395  4059  16042
REM 23:  14296  346  4212  14566  |  170129  390  3989  15568
REM 24:  14646  343  4589  15747  |  170093  396  3984  15780
REM 25:  13319  354  4290  15207  |  165123  388  3998  15528
REM 26:  11319  354  3901  13793  |  162527  390  3971  15485
REM ----------------------------------------------------------------
REM Avr:          346  4197  14525              392  4000  15681
REM Tot:          369  4098  15103
exit /b

:count
SET T1=%starttime%
SET T2=%endtime%
    ::--------------- РАЗБИЕНИЕ МЕТОК ВРЕМЕНИ НА РАЗРЯДЫ [hh,mm,ss] -------------
for /f "tokens=1,2,3 delims=;:,." %%a in ("%T1%") do (set h1=%%a & set m1=%%b & set s1=%%c)
for /f "tokens=1,2,3 delims=;:,." %%a in ("%T2%") do (set h2=%%a & set m2=%%b & set s2=%%c)
    ::--------------- СЕРИАЛИЗАЦИЯ -------------
set /a time1 = (h1*3600)+(m1*60)+(s1)
set /a time2 = (h2*3600)+(m2*60)+(s2)
    ::--------------- ВЫЧИСЛЕНИЕ -------------
set /a time3=time2-time1
if /i %time3% lss 0 set /a time3=time2+(86400-time1)
    ::--------------- ДЕСЕРИАЛИЗАЦИЯ [muchSS -> hh,mm,ss] -------------
::hour
set /a H = time3/3600
set /a time3 = time3-(H*3600)
::minute
set /a M = time3/60
set /a time3=time3-(M*60)
::second
set /a S = time3
    ::--------------- CHECKING VALUES -------------
 CALL :CheckNum %H%,H
 CALL :CheckNum %M%,M
 CALL :CheckNum %S%,S
 
set spendTime=%H%:%M%:%S%
::show result
echo ______________________________

EXIT /B
======================
:CheckNum (varIN,varOUT)
set /A temp = %1
if "%temp:~1,1%"=="" (SET %2=0%temp%)
EXIT /B


c4uran 28-10-2015 10:34 2568955

Вложений: 1
Забыл добавить, в итоге получается такой вот отчет в экзеле(шапку делаем сами)


Время: 15:34.

Время: 15:34.
© OSzone.net 2001-