Войти

Показать полную графическую версию : [решено] Определить текущую производительность ПК


c4uran
26-10-2015, 15:27
Условно есть компьютер на котором средствами командной строки ( на крайняк powershell ) + бесплатными утилитами 7zip или типа https://live.sysinternals.com/ необходимо получить на выходе число - скорость работы этого компьютера.

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

Iska
26-10-2015, 15:36
c4uran, начните с определения «скорости работы».

sov44
26-10-2015, 15:45
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
WinSAT? Тогда может помочь - CheckBootSpeed (http://www.outsidethebox.ms/16187/)

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

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

sov44,
Изучаю...

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

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

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

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

http://s18.postimg.org/fd508a7np/winsat.jpg (http://postimg.org/image/fd508a7np/)

Iska
26-10-2015, 18:16
c4uran, вся проблема в том, что любой синтетический тест — это банальные, мало к чему привязанные, «попугаи».

c4uran
27-10-2015, 10:11
Кажется странным что поиск тормозящих компьютеров в домене бесплатными средствами еще не реализовали

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

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

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

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

скрипт закидывается на удаленный комп через 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
Забыл добавить, в итоге получается такой вот отчет в экзеле(шапку делаем сами)




© OSzone.net 2001-2012