Регистрация Gpuview с помощью cygwin не работает

Когда я запускаю log.cmd из командной строки Windows, я получаю сообщения об ошибках xperf, говорящих о том, что файл *.etl уже существует. Я понимаю, что другие процессы также используют Windows ETL, и поскольку gpuview использует xperf для отслеживания событий, это в некотором смысле «сталкивается». Тем не менее, я получаю массу файлов ETL, которые объединяются при повторном запуске log.cmd.

Я ненавижу использовать cmd и пытался сделать то же самое с cygwin bash. Я получаю похожие ошибки, но кроме DXCstate.etl больше ничего не вижу.

Я запускаю терминал с правами администратора, а log.cmd имеет права 755.

$ ./log.cmd
Xperf: error: NT Kernel Logger: Cannot create a file when that file already exists. (0xb7).
Xperf: error: DxTest: Cannot create a file when that file already exists. (0xb7).
Xperf: error: DxLogger: Cannot create a file when that file already exists. (0xb7).
The trace you have just captured "C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\gpuview\DXCState.etl" may contain personally identifiable information, including but not necessarily limited to paths to files accessed, paths to registry accessed and process names. Exact information depends on the events that were logged. Please be aware of this when sharing out this trace with other people.
Xperf: error: DxcStackLogger: Cannot create a file when that file already exists. (0xb7).
Xperf: error: DxcLogger: Cannot create a file when that file already exists. (0xb7).
Xperf: error: UMDLogger: Cannot create a file when that file already exists. (0xb7).
Xperf: error: DXGILogger: Cannot create a file when that file already exists. (0xb7).
Xperf: error: Dx11Logger: Cannot create a file when that file already exists. (0xb7).
Xperf: error: D3D10Level9Logger: Cannot create a file when that file already exists. (0xb7).
Xperf: error: MFLogger: Cannot create a file when that file already exists. (0xb7).
Xperf: error: OLogger: Cannot create a file when that file already exists. (0xb7).
Xperf: error: XAMLLogger: Cannot create a file when that file already exists. (0xb7).
Xperf: error: D2DLogger: Cannot create a file when that file already exists. (0xb7).
Xperf: error: D2DScenariosLogger: Cannot create a file when that file already exists. (0xb7).

$ ls
DXCState.etl*  DxEtw.dll*  EventsForStackTrace.txt*  dota2/  GPUView.chm*  GPUView.exe*    
LDDMCore.man*  log.cmd*  plugins/  README.TXT*  tplugins/  UMDEtw.man*

person Raja    schedule 11.03.2014    source источник
comment
остановить другие инструменты, такие как ProcessExplorer и Resource Monitor, которые используют ETW. Они вызывают такие ошибки.   -  person magicandre1981    schedule 11.03.2014


Ответы (1)


Если вы посмотрите в log.cmd, вы увидите, что каждый регистратор связан с именем файла. Например, у нас есть эта строка:

"%~dp0"..\Xperf -start DxcLogger -on %TRACE_DXC_MIN% %TRACE_LARGE_BUFFERS% -f DXC.etl

Если вы можете получить ошибку «Невозможно создать файл, когда этот файл уже существует», это означает, что DXC.etl уже существует, что означает, что предыдущий вызов log.cmd не завершился корректно и не остановил запись в этот файл. Вы, вероятно, отменили пакетный файл с помощью Ctrl + C. Это не конфликт с Process Explorer или Resource Monitor, потому что они, в частности, не будут использовать DXC.etl.

Итак, перезагрузите компьютер, чтобы вернуться в нормальное состояние, и будьте осторожны, чтобы не остановить log.cmd в середине его работы.

В качестве альтернативы просто перестаньте использовать log.cmd. Вместо этого используйте wprui.exe. Подробнее см. в этом сообщении в блоге:

http://randomascii.wordpress.com/2013/04/20/xperf-basics-recording-a-trace-the-easy-way/

person Bruce Dawson    schedule 18.03.2014
comment
нет, ошибка «Невозможно создать файл, когда этот файл уже существует» означает, что запущен другой инструмент, который использует ETW. Мне потребовалось время, чтобы понять это. - person magicandre1981; 25.03.2014
comment
@ magicandre1981, внимательно посмотрите на сообщения об ошибках в исходном вопросе - мы оба правы. Эти сообщения появляются, когда включена трассировка ETW. Но не все типы ETW отслеживают конфликты. Например, log.cmd запускает около дюжины сеансов трассировки пользовательского режима, каждый с разными именами сеансов и именами файлов. Другой пользователь ETW вряд ли будет использовать те же имена и конфликты, поэтому проблема определенно заключается в том, что log.cmd оставил эти сеансы запущенными. Поставщик ядра особенный. Только одна программа может контролировать это. Дублирование использования дает эту ошибку, особенно вариант NT Kernel Logger. - person Bruce Dawson; 26.03.2014