Thread multiplier for p2 что это
Перейти к содержимому

Thread multiplier for p2 что это

  • автор:

Низкоуровневое программирование звука в Windows

Уведомления, передаваемые программе звуковой подсистемой

По желанию программы звуковая подсистема может использовать три варианта уведомлений: установку объекта программного события (event), вызов заданной программной функции (callback) либо посылку сообщения заданному окну или задаче (thread). В первом варианте программа получает информацию лишь о самом факте некоторого события в звуковой подсистеме и сама должна выяснить, что именно произошло; во втором и третьем вариантах передаются код события и уточняющая информация.

Звуковая подсистема передает программе уведомления о событиях трех видов: успешное открытие устройства, успешное его закрытие и завершение обработки очередного буфера из очереди драйвера. Строго говоря, полностью асинхронным является только последнее событие; первые два возникают сразу же после успешного открытия и закрытия устройства и передаются в программу еще до возврата из соответствующих интерфейсных функций.

Уведомление установкой программного события

Звуковая подсистема переводит в установленное состояние (set event) заданный объект события. В частности, объект события будет находиться в установленном состоянии сразу после возврата из функций Open и Close, так что до передачи драйверу первого звукового буфера объект события необходимо сбросить.

Уведомление посылкой сообщения окну или задаче

Звуковая подсистема посылает заданному окну или задаче сообщение Windows, код которого отражает наступившее событие, передавая в параметрах сообщения ключ открытого звукового устройства и дополнительную информацию о событии. Сообщение посылается асинхронно при помощи функций PostMessage или PostThreadMessage и выбирается из очереди окна или задачи наравне с прочими сообщениями Windows.

Имена констант для кодов сообщений имеют вид MM_WxM_event, где x — тип устройства (буква I — для устройства ввода или O — для устройства вывода), а event — тип события:

Сообщения MM_WxM_OPEN и MM_WxM_CLOSE посылаются устройствам обоих типов, а MM_WIM_DATA и MM_WOM_DONE — только устройствам ввода или вывода соответственно.

Во всех сообщениях параметр wParam передает ключ устройства, породившего событие. В сообщениях DATA/DONE параметр lParam передает указатель заголовка возвращаемого звукового буфера.

Сообщения звуковой подсистемы не требуют возврата значения обрабатывающей их функцией.

Уведомление вызовом программной функции

Звуковая подсистема вызывает заданную программную функцию, передавая в ее аргументах код и параметры события. Прототип вызываемой функции имеет следующий вид:

void CALLBACK CallbackProc ( HWAVEx Handle, UINT Msg, DWORD Instance, DWORD Param1, DWORD Param2 );

Handle — ключ звукового устройства. Имеет тип HWAVEIN или HWAVEOUT; допустимо использование универсального типа HWAVE.

Msg — код события. Константы для кодов событий имеют те же имена, что и константы кодов сообщений для окон/задач, но без префикса MM_ (WIM_OPEN, WOM_DONE и т.п.). Фактически сейчас они определяются в MMSYSTEM.H как эквивалентные константам с префиксом MM_, однако в будущем на это рассчитывать не стоит.

Instance — 32-разрядное информационное слово, указанное программой при открытии устройства. Звуковая подсистема никак не использует это значение, а лишь передает его при каждом вызове функции.

Param1, Param2 — параметры события. Для событий OPEN и CLOSE значение Param1 равно нулю; для событий DATA и DONE этот параметр передает указатель заголовка возвращаемого звукового буфера. Значение Param2 в текущей реализации всегда равно нулю.

Функция может вызываться в контексте обработчика прерывания, поэтому безопасно может использовать лишь ограниченный набор функций Windows: EnterCriticalSection, LeaveCriticalSection, midiOutLongMsg, midiOutShortMsg, OutputDebugString, PostMessage, PostThreadMessage, SetEvent, timeGetSystemTime, timeGetTime, timeKillEvent, timeSetEvent. Обращение к другим системным функциям, как и к функциям звуковой подсистемы, может вызвать непредсказуемые последствия.

Для вызова функции звуковая подсистема создает отдельную задачу (thread) с повышенным (ABOVE_NORMAL) приоритетом. В отличие от передачи сообщений, которые обрабатываются в порядке очереди, вызов функции происходит параллельно с работой остальных задач процесса, поэтому необходимо позаботиться о синхронизации доступа функции и других задач к общим переменным и структурам данных.

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

Набор интерфейсных функций звуковых устройств

В дальнейшем мы будем придерживаться универсальной системы именования функций, указывая лишь смысловую часть имени и опуская префикс, содержащий тип и «ориентацию» устройства. Например, говоря о функции GetDevCaps, мы будем подразумевать две функции — waveInGetDevCaps и waveOutGetDevCaps, объясняя только их различия для устройств ввода и вывода. Это потребует от читателя «конструирования» полного имени функции в каждом конкретном случае, однако позволит сделать описание более широким и систематическим. В прототипе функции префикс будет обозначаться последовательностью «xxx».

Первым параметром большинства функций указывается ключ (handle) открытого звукового устройства, имеющий тип HWAVEIN или HWAVEOUT; в прототипе его тип обозначается HWAVEx. Как уже говорилось, ключи звуковых устройств можно хранить в переменных совместимого типа HWAVE.

Перечень интерфейсных функций

Значения, возвращаемые интерфейсными функциями

За редким исключением, все функции звукового интерфейса возвращают результат типа MMRESULT, эквивалентный типу UINT. Значение MMSYSERR_NOERROR, в текущей реализации равное нулю, означает успешное выполнение функции, любое другое значение указывает на ошибку. Константы для кодов ошибок имеют префиксы MMSYSERR_ (общая ошибка мультимедийной подсистемы) и WAVERR_ (ошибка драйвера Wave-устройства):

GetNumDevs — запрос количества устройств

UINT xxxGetNumDevs (void);

Возвращает количество установленных в системе устройств ввода или вывода.

GetDevCaps — запрос параметров и возможностей устройств

MMRESULT xxxGetDevCaps ( UINT DevId, LPWAVExCAPS Caps, UINT CapsSize );

Служит для определения параметров и возможностей устройства.

DevId — номер устройства начиная с нуля, либо ключ ранее открытого устройства, либо константа WAVE_MAPPER. В последнем случае возвращаются параметры стандартного системного устройства.

Caps — указатель структуры типа WAVEINCAPS или WAVEOUTCAPS (имеются специальные типы LPWAVEINCAPS и LPWAVEOUTCAPS).

CapsSize — размер структуры в байтах.

При успешном завершении функция заполняет поля переданной указателем структуры параметрами устройства. Если были запрошены параметры Wave Mapper, то в качестве имени устройства возвращается название службы переназначения.

Open — открывание устройства

MMRESULT xxxOpen ( LPHWAVEx ForHandle, UINT DevId, LPCWAVEFORMATEX Format, DWORD Callback, DWORD Instance, DWORD OpenFlags );

ForHandle — указатель переменной типа HWAVEIN или HWAVEOUT (тип указателя — LPHWAVEIN или LPHWAVEOUT), в которую при успешном завершении операции записывается ключ открытого устройства.

DevId — номер устройства начиная с нуля, либо ключ ранее открытого устройства, либо значение WAVE_MAPPER. В последнем случае службой переназначения выбирается устройство, поддерживающее заданный формат, причем поиск начинается со стандартного системного устройства.

Format — указатель структуры типа WAVEFORMATEX, описывающей требуемый формат потока.

Callback — объект, которому будут передаваться уведомления драйвера о выполнении запрошенных операций. Задается ключом (handle) окна или события, указателем функции либо идентификатором задачи (thread id).

Instance — 32-разрядное информационное слово, которое будет передаваться драйвером в параметрах вызова функции уведомления. Например, при разработке универсального интерфейса со звуковыми устройствами это может быть указатель описателя устройства (структуры или объекта класса).

OpenFlags — флаги режимов открывания и работы устройства:

В случае успешного открытия устройства (если не был задан флаг опроса формата) звуковая подсистема возвращает в переменную, на которую ссылается указатель ForHandle, ключ (handle) открытого устройства.

Устройства ввода открываются в режиме «стоп», и передача драйверу звуковых буферов не приводит к автоматическому запуску записи — для этого необходимо вызвать функцию Start. Устройства вывода открываются сразу в режиме воспроизведения, и при передаче драйверу первого же звукового буфера автоматически начинается его проигрывание.

При завершении работы с устройством его необходимо закрыть функцией Close, в противном случае открытое устройство может «зависнуть». В отличие от файловой, звуковая подсистема в Windows гораздо более чувствительна к ошибкам и не всегда в состоянии отследить завершение программы, чтобы аварийно закрыть звуковые устройства.

Close — закрытие устройства

MMRESULT xxxClose (HWAVEx Handle);

Закрывает звуковое устройство. Закрытие допустимо только после завершения обмена данными и возврата драйвером всех переданных ранее буферов, иначе подсистема возвращает код ошибки WAVERR_STILLPLAYING. Поэтому перед вызовом функции необходимо либо дождаться возврата всех буферов в обычном порядке, либо вызвать функцию Reset, в результате чего буферы будут возвращены немедленно.

PrepareHeader — подготовка буфера и его заголовка к передаче драйверу

MMRESULT xxxPrepareHeader (HWAVEx Handle, LPWAVEHDR Hdr, UINT HSize);

Hdr — указатель заголовка звукового буфера.

HSize — размер структуры заголовка.

Подготавливает звуковой буфер к передаче драйверу. Обычно подготовка заключается в фиксации буфера в памяти, чтобы во время внепроцессорной передачи (DMA) он не оказался вытесненным (откачанным) на диск. В заголовке подготовленного буфера звуковой подсистемой устанавливается флаг WHDR_PREPARED.

Перед вызовом функции в заголовке буфера должны быть заполнены поля lpData, dwBufferLength, dwFlags.

Для уже подготовленного буфера функция не выполняет никаких действий и завершается успешно.

UnprepareHeader — отмена подготовительных действий для буфера

MMRESULT xxxUnprepareHeader (HWAVEx Handle, LPWAVEHDR Hdr, UINT HSize);

Hdr — указатель заголовка звукового буфера.

HSize — размер структуры заголовка.

Отменяет подготовительные действия, выполненные ранее функцией PrepareHeader. Обычно эта отмена состоит в снятии режима фиксации буфера в памяти.

При успешном выполнении функции в заголовке буфера сбрасывается флаг WHDR_PREPARED.

Для неподготовленного буфера функция не выполняет никаких действий и завершается успешно.

Write/AddBuffer — передача звукового буфера драйверу

MMRESULT waveOutWrite (HWAVEx Handle, LPWAVEHDR Hdr, UINT HSize); MMRESULT waveInAddBuffer (HWAVEx Handle, LPWAVEHDR Hdr, UINT HSize);

Hdr — указатель заголовка звукового буфера.

HSize — размер структуры заголовка.

Передает звуковой буфер драйверу для воспроизведения (Write) или для записи (AddBuffer). Буфер должен быть подготовлен функцией Prepare, иначе драйвер откажется его принять.

Получив буфер, драйвер сбрасывает в его заголовке флаг WHDR_DONE, включает заголовок во внутреннюю очередь и устанавливает флаг WHDR_INQUEUE. После этого асинхронный драйвер возвращает управление приложению, продолжая параллельную обработку очереди буферов по прерываниям от устройства; синхронный драйвер возвращает управление лишь после завершения обработки буфера.

Завершив обработку очередного буфера, драйвер изымает его из очереди, сбрасывает флаг WHDR_INQUEUE, затем устанавливает флаг WHDR_DONE, после чего выполняет уведомление приложения, если это было запрошено при открытии устройства. Затем драйвер продолжает обработку следующего буфера из очереди.

Приложение не имеет права изменять какие-либо поля заголовка до тех пор, пока обработка буфера драйвером не будет завершена.

Поскольку заголовок буфера имеет только одно поле для связывания в список, повторная передача драйверу буфера, уже помещенного в очередь, приводит к ошибке.

Stop/Pause — остановка записи/воспроизведения

MMRESULT waveInStop (HWAVEx Handle); MMRESULT waveOutPause (HWAVEx Handle);

Останавливает запись или воспроизведение в текущей позиции потока. Не до конца заполненный буфер устройства записи немедленно возвращается программе; не полностью проигранный буфер устройства воспроизведения остается в очереди драйвера.

На деле реальная позиция, в которой был остановлен процесс, может несколько отличаться от полученной только что с помощью функции GetPosition.

При остановленном потоке функция не выполняет никаких действий и завершается успешно.

Start/Restart — запуск записи/воспроизведения

MMRESULT waveInStart (HWAVEx Handle); MMRESULT waveOutRestart (HWAVEx Handle);

Запускает запись/воспроизведение с текущей позиции потока.

При активном потоке функция не выполняет никаких действий и завершается успешно.

Reset — уничтожение (сброс) потока

MMRESULT xxxReset (HWAVEx Handle);

Уничтожает текущий звуковой поток. Все буферы, находящиеся в очереди драйвера, немедленно возвращаются программе; позиция потока обнуляется.

При отсутствии буферов в очереди функция не выполняет никаких действий и завершается успешно.

BreakLoop — прерывание текущего цикла

MMRESULT waveOutBreakLoop (HWAVEx Handle);

Сбрасывает режим цикла воспроизведения, если он установлен. Текущий проход цикла проигрывается до конца, далее воспроизведение продолжается линейно, без возврата к первому буферу цикла. Группа буферов цикла возвращается программе по мере завершения воспроизведения каждого из них.

При остановленном потоке или отсутствии цикла функция не выполняет никаких действий и завершается успешно.

GetPosition — запрос текущей позиции потока

MMRESULT xxxGetPosition (HWAVEx Handle, LPMMTIME Time, UINT TSize);

Time — указатель структуры типа MMTIME. В поле wType должен быть установлен код единиц, в которых запрашивается позиция.

TSize — размер структуры в байтах.

Возвращает текущую позицию потока, заполняя поля переданной структуры в соответствии со значением поля wType. Если драйвер не в состоянии вернуть позицию в требуемых единицах, он по своему усмотрению устанавливает значение поля wType и заполняет структуру в выбранных им единицах. Обычно в таком случае позиция возвращается в терминах байтов (TIME_BYTES) или звуковых блоков (TIME_SAMPLES).

SetVolume — установка громкости воспроизведения

MMRESULT waveOutSetVolume (HWAVEx Handle, DWORD Volume);

Volume — громкость по левому и правому каналу. Младшее слово задает громкость левого канала, старшее — правого. Значение 0xFFFF задает максимальную громкость, 0 — минимальную. Для адаптеров, не поддерживающих независимую регулировку громкости по каналам, младшее слово задает громкость в обоих каналах тракта.

Функция устанавливает выходной уровень воспроизводимого сигнала. Несмотря на то, что функцией допускается 65 536 уровней громкости, большинство адаптеров поддерживает лишь от 8 до 256 уровней. В таких случаях значимыми являются только от трех до восьми старших разрядов значения громкости, младшие разряды игнорируются. Такая трактовка позволяет использовать одну и ту же шкалу громкости, изменяя лишь степень ступенчатости регулировки.

Функция поддерживается только адаптерами, в свойствах которых установлен флаг WAVECAPS_VOLUME. Раздельная регулировка по каналам поддерживается только при наличии флага WAVECAPC_LRVOLUME.

GetVolume — запрос текущей громкости воспроизведения

MMRESULT waveOutGetVolume (HWAVEx Handle, LPDWORD ForVolume);

ForVolume — указатель переменной типа DWORD, в которую заносятся текущие уровни громкости.

Функция опрашивает текущий установленный уровень выходного сигнала. Трактовка переменной, на которую ссылается указатель ForVolume, аналогична используемой в функции SetVolume.

SetPitch / SetPlaybackRate — установка высоты тона / скорости воспроизведения

MMRESULT waveOutSetPitch (HWAVEx Handle, DWORD Multiplier); MMRESULT waveOutSetPlaybackRate (HWAVEx Handle, DWORD Multiplier);

Multiplier — множитель высоты тона / скорости воспроизведения. Старшее слово задает целую часть множителя, младшее — дробную. Если имеется значение множителя f типа double, то преобразовать его в тип DWORD можно по формуле:

Multiplier = (DWORD)(f * 0x10000)

Функции изменяют высоту тона или скорость воспроизведения потока, не изменяя частоты дискретизации, на которой воспроизводится поток. Значение множителя должно быть положительным. По умолчанию установлен множитель 1.0, что означает воспроизведение потока с естественной высотой и скоростью.

При изменении высоты тона все звуки в потоке становятся выше или ниже, однако длительность каждого звука и общее время воспроизведения сохраняются. Изменение скорости воспроизведения подобно изменению скорости ленты в магнитофоне: все звуки становятся выше или ниже, а общее время воспроизведения соответственно уменьшается или увеличивается.

Эту пару функций поддерживают далеко не все звуковые адаптеры; как правило, она реализуется на специализированных сигнальных процессорах (DSP). Технически проще всего реализуется изменение скорости, для чего в точках между имеющимися отсчетами путем интерполяции вычисляются промежуточные отсчеты, следующие друг за другом чаще или реже, которые и поступают на схему ЦАП. Изменение высоты требует гораздо более сложных вычислений: фрагменты потока разлагаются в ряд Фурье, образуя спектр звука, затем спектр сдвигается в сторону высоких или низких частот, после чего из измененного спектра снова формируется фрагмент нового звукового потока.

Для адаптеров, поддерживающих изменение высоты и/или скорости, функция GetDevCaps устанавливает флаги WAVECAPS_PITCH и WAVECAPS_PLAYBACKRATE соответственно.

GetPitch/GetPlaybackRate — запрос высоты тона/скорости воспроизведения

MMRESULT waveOutGetPitch (HWAVEx Handle, LPDWORD ForPitch); MMRESULT waveOutGetPlaybackRate (HWAVEx Handle, LPDWORD ForRate);

ForPitch/ForRate — указатель переменной, в которую заносится текущий множитель высоты тона или скорости воспроизведения.

Функция опрашивает текущие установки множителя высоты тона или скорости воспроизведения потока. Интерпретация переменных, на которые ссылаются указатели ForPitch/ForRate, — как в функциях SetPitch/SetPlaybackRate.

GetID — запрос номера устройства по ключу

MMRESULT xxxGetID (HWAVEx Handle, LPUINT ForID);

ForID — указатель переменной типа UINT, в которую заносится номер устройства.

Функция определяет номер устройства, при открытии которого системой был возвращен заданный ключ. В том случае, если при открывании была использована служба переназначения (значение WAVE_MAPPER вместо номера или флаг WAVE_MAPPED), функция возвращает значение WAVE_MAPPER.

Документация Microsoft утверждает, будто эта функция поддерживается только для совместимости, и что для получения номера достаточно привести ключ к нужному типу, однако это совсем не так. Ключ открытого устройства является адресом описателя, принадлежащего звуковой подсистеме, и в Win32 размещается в общей области памяти. Единственный способ получить номер устройства по ключу — использование функции GetID.

GetErrorText — запрос текстового сообщения об ошибке по коду

MMRESULT xxxGetErrorText (MMRESULT Error, LPSTR Text, UINT TextSize);

Error — код ошибки, возвращенный одной из интерфейсных функций;

Text — указатель текстового буфера (массива типа char);

TextSize — размер текстового буфера в байтах.

Функция заносит в заданный буфер текстовое описание ошибки с заданным кодом. Записанный текст завершается нулевым байтом. Если буфер недостаточно велик, то конец текста обрезается; нулевой байт записывается в буфер в любом случае. Размер буфера, способного вместить любое сообщение об ошибке, определяется константой MAXERRORLENGTH.

Сообщения об ошибках не имеют разделения по типам устройств, поэтому для запроса текста любой ошибки достаточно любой из возможных функций, например waveOutGetErrorText.

Message — передача сообщения драйверу

MMRESULT xxxMessage (HWAVEx Handle, UINT Msg, DWORD P1, DWORD P2);

Msg — код передаваемого сообщения.

P1, P2 — параметры сообщения.

Функция используется для прямой передачи сообщения драйверу. Все интерфейсные функции, кроме GetID и GetErrorText, транслируются звуковой подсистемой в сообщения, передаваемые драйверу; при этом каждое сообщение имеет два параметра типа DWORD, в которые преобразуются параметры интерфейсных функций. Если драйвер устройства поддерживает нестандартные сообщения, они могут быть переданы ему при помощи функций Message. Возвращаемое значение при этом определяется самим драйвером.

Недостатки звуковой подсистемы MME

В Windows 95/98 подсистема MME и ее драйверы так и остались 16-разрядными, как и в Windows 3.x. Из-за этого каждое обращение к звуковому драйверу из Win32–приложения сопровождается двойной сменой режима исполнения (thunking), что, увы, приводит к дополнительным накладным расходам, доходящим до единиц миллисекунд на процессорах Celeron-366. Кроме того, многие драйверы ограничивают частоту обновления кольцевого буфера, через который идет обмен между компьютером и адаптером, до нескольких десятков раз в секунду, отчего в процессе передачи звука возникает отставание (latency). У драйверов для адаптеров ISA это отставание может достигать десятков миллисекунд, у драйверов для адаптеров PCI оно обычно ограничивается единицами миллисекунд.

Для более оперативного вывода звука, особенно с модификацией его в реальном времени, Microsoft разработан более новый интерфейс — DirectSound. Этот интерфейс призван «приблизить» аппаратуру адаптера к прикладной программе и позволяет ей практически напрямую записывать звук в системный кольцевой буфер, сводя максимальные задержки к единицам миллисекунд для любого адаптера. При работе с DirectSound программа обращается непосредственно к 32-разрядному системному драйверу адаптера (VxD), минуя переключения между 32- и 16-разрядным режимом исполнения.

В целях эффективной работы интерфейс DirectSound должен поддерживаться системным драйвером адаптера. Для устройств, драйверы которых не поддерживают DirectSound, Windows эмулирует новый интерфейс «поверх» обычного MME–драйвера, но в этом случае все задержки даже возрастают из-за накладных расходов на эмуляцию.

К сожалению, Microsoft разработала спецификацию расширения DirectSound для звуковых VxD только в части воспроизведения звука, действуя прежде всего в интересах производителей игр. Запись звука через DirectSound до сих пор ведется путем эмуляции поверх MME.

Надо сказать, что звуковая подсистема Windows 3.x и 95/98, равно как и подсистема удаленного доступа к сети (RAS), обладает низкой устойчивостью к ошибкам. Это чаще всего проявляется в том, что при аварийном завершении программы, открывшей звуковые устройства и работающей с ними, система не выполняет корректного закрытия (cleanup) используемых устройств. В результате этого в ряде случаев после такого аварийного завершения может потребоваться перезагрузка, а до тех пор незакрытые устройства будут недоступны другим приложениям. Кроме того, 16-разрядные подсистемы защищены от ошибок гораздо меньше 32-разрядных, так что серьезные ошибки в звуковых программах могут приводить к сбоям и «зависаниям» всей системы Windows.

В Windows NT все подсистемы сделаны изначально 32-разрядными, поэтому описанных проблем там не возникает, однако задержки ввода и вывода звука по-прежнему определяются частотой обновления кольцевого буфера, которая задается драйвером конкретного адаптера.

Пример программы, использующей интерфейс MME

В качестве иллюстрации приводится программа, реализующая в реальном времени эффект задержки (delay). Суть эффекта состоит в сложении исходного звукового сигнала с его копией, задержанной во времени на небольшую величину (единицы-сотни миллисекунд). Задержка на величину до 15-20 мс воспринимается на слух, как «дробление» источника звука; на этом принципе основано создание хорового эффекта. Задержка на величину 20-50 мс воспринимается как реверберация (ощущение объема), а большие величины задержки — как обычное эхо.

Чтобы получить правдоподобное звучание описанных эффектов, обычно делается несколько последовательных задержек звука, в которых копия исходного сигнала постепенно ослабляется. В приведенной программе для простоты делается только одна задержка, причем копия сигнала не ослабляется.

Программа реализована на языке C++. Фактически от C++ в ней использованы лишь общие расширения (определение переменных в заголовках циклов, использование имен структур в качестве имен типов и т.п.), в остальном же можно считать, что в ней использовался обычный язык ANSI C.

Разработка программы выполнялась в среде MS VC++ 4.2. Использован только стандартный интерфейс Windows, без каких-либо расширений из среды разработки.

Программа работает в реальном времени, одновременно открывая два звуковых устройства — ввода и вывода. Поступающие с устройства ввода заполненные звуковые буферы суммируются со своими сдвинутыми во времени копиями, после чего отправляются устройству вывода; между устройством ввода и вывода циркулирует один общий набор звуковых буферов.

Для управления циркуляцией буферов создается отдельная рабочая задача (worker thread), которой присваивается максимальное приращение приоритета. Звуковые устройства открываются в режиме уведомления рабочей задачи.

Вследствие буферизации выводимый программой звук несколько отстает от исходного. Общее время буферизации и количество звуковых буферов задается в секции параметров программы. Для непрерывного переноса звука количество буферов не должно быть меньше двух; приемлемая стабильность достигается уже при использовании трех-четырех буферов.

Для работы программы необходим полнодуплексный звуковой адаптер, допускающий одновременную работу своего АЦП и ЦАП. Большинство современных адаптеров удовлетворяет этому условию.

  • ПК и комплектующие
    • Настольные ПК и моноблоки
    • Портативные ПК
    • Серверы
    • Материнские платы
    • Корпуса
    • Блоки питания
    • Оперативная память
    • Процессоры
    • Графические адаптеры
    • Жесткие диски и SSD
    • Оптические приводы и носители
    • Звуковые карты
    • ТВ-тюнеры
    • Контроллеры
    • Системы охлаждения ПК
    • Моддинг
    • Аксессуары для ноутбуков
    • Принтеры, сканеры, МФУ
    • Мониторы и проекторы
    • Устройства ввода
    • Внешние накопители
    • Акустические системы, гарнитуры, наушники
    • ИБП
    • Веб-камеры
    • KVM-оборудование
    • Сетевые медиаплееры
    • HTPC и мини-компьютеры
    • ТВ и системы домашнего кинотеатра
    • Технология DLNA
    • Средства управления домашней техникой
    • Планшеты
    • Смартфоны
    • Портативные накопители
    • Электронные ридеры
    • Портативные медиаплееры
    • GPS-навигаторы и трекеры
    • Носимые гаджеты
    • Автомобильные информационно-развлекательные системы
    • Зарядные устройства
    • Аксессуары для мобильных устройств
    • Цифровые фотоаппараты и оптика
    • Видеокамеры
    • Фотоаксессуары
    • Обработка фотографий
    • Монтаж видео
    • Операционные системы
    • Средства разработки
    • Офисные программы
    • Средства тестирования, мониторинга и диагностики
    • Полезные утилиты
    • Графические редакторы
    • Средства 3D-моделирования
    • Веб-браузеры
    • Поисковые системы
    • Социальные сети
    • «Облачные» сервисы
    • Сервисы для обмена сообщениями и конференц-связи
    • Разработка веб-сайтов
    • Мобильный интернет
    • Полезные инструменты
    • Средства защиты от вредоносного ПО
    • Средства управления доступом
    • Защита данных
    • Проводные сети
    • Беспроводные сети
    • Сетевая инфраструктура
    • Сотовая связь
    • IP-телефония
    • NAS-накопители
    • Средства управления сетями
    • Средства удаленного доступа
    • Системная интеграция
    • Проекты в области образования
    • Электронный документооборот
    • «Облачные» сервисы для бизнеса
    • Технологии виртуализации
    1999 1 2 3 4 5 6 7 8 9 10 11 12
    2000 1 2 3 4 5 6 7 8 9 10 11 12
    2001 1 2 3 4 5 6 7 8 9 10 11 12
    2002 1 2 3 4 5 6 7 8 9 10 11 12
    2003 1 2 3 4 5 6 7 8 9 10 11 12
    2004 1 2 3 4 5 6 7 8 9 10 11 12
    2005 1 2 3 4 5 6 7 8 9 10 11 12
    2006 1 2 3 4 5 6 7 8 9 10 11 12
    2007 1 2 3 4 5 6 7 8 9 10 11 12
    2008 1 2 3 4 5 6 7 8 9 10 11 12
    2009 1 2 3 4 5 6 7 8 9 10 11 12
    2010 1 2 3 4 5 6 7 8 9 10 11 12
    2011 1 2 3 4 5 6 7 8 9 10 11 12
    2012 1 2 3 4 5 6 7 8 9 10 11 12
    2013 1 2 3 4 5 6 7 8 9 10 11 12

    Thread multiplier for p2 что это

    Портал техногенных экспериментов

    8159 разгона до облаков

    • Главная
    • Новости
    • Devices by zx-c64
    • Материалы
    • – Процессоры и MB
    • – Видеокарты
    • – Оперативная память
    • – Накопители и SSD
    • – Системы охлаждения
    • – Корпуса и БП
    • – Периферия
    • – Разгон и модификации
    • – Гаджеты
    • Блоги
    • Уголок бенчера
    • Фотогалерея
    • Форум
    • Магазин
    • Файловый архив
    • Конкурсы

    Сообщества

    Наши проекты

    Всё о программе CPU-Z

    О программе и её основных возможностях.

    CPU-Z — это бесплатная программа, ставшая уже давно стандартом де-факто для определения процессора, установленного в системе; отображения информации о нём, а также о других комплектующих — материнской плате, памяти и видеокарте.

    Скачать CPU-Z из файлового архива modlabs.net можно тут

    Программа способна определять следующее железо и его характеристики:

    Процессор

    • Название и модель
    • Степпинг ядра и техпроцесс
    • Корпусировка
    • Напряжение ядра
    • Внутренняя и внешняя частоты, множитель процессора
    • Поддерживаемые наборы инструкций
    • Информация о кеш-памяти

    Материнская плата

    • Производитель, модель и ревизия
    • Производитель BIOS, дата и версия BIOS
    • Чипсет (северный и южный мосты) и датчик
    • Графический интерфейс

    Память

    • Частота и тайминги
    • Спецификации модулей, записанные в SPD — производитель, серийный номер, таблица таймингов

    Система

    • Версия Windows и DirectX

    Список поддерживаемого железа и установка

    Процессоры:

    Intel Pentium, Pentium MMX, Pentium Pro, Pentium II, Pentium . Pentium . -M, Celeron (P2/P3) и Xeon (P2/P3)

    Pentium 4, Pentium 4-M, Pentium M, Pentium D, Pentium XE, Celeron (P4/PM) и Xeon (P4)

    Pentium Dual Core, Core Solo, Core Duo, Core 2 Duo, Core 2 Quad, Core 2 Extreme, Celeron (CL) and Xeon (C2D/C2Q) Itanium, Itanium 2 Core i3, Core i5, Core i7, Core i7 Extreme

    AMD Am5x86, K5, Geode LX, K6, K6-2, K6-III, K6-2+, K6-III+

    Athlon (4, XP, MP), Duron, Sempron (K7),

    Athlon 64, Athlon 64 X2, Sempron (K8), Turion, Opteron, Athlon 64 FX Phenom, Phenom II, Athlon II, Sempron (K10,5)

    VIA C3 (Samuel, Samuel2, Ezra, Ezra-T, Nehemiah), C7, C7-M, Nano (Isaiah)

    Transmeta Crusoe TM3200, TM5400, TM5500, TM5600, TM5800

    Чипсеты:

    Intel i430TX, i440LX, i440FX, i440BX/ZX, i810/E, i815/E/EP/EM, i840, i845, i845E, i845G, i850/E, i845PE/GE, E7205, E7500, E7520, i852, i855, i865P/PE/G, i875P, i915P/G, i915PM/GM, i925X/XE, i945P/PL/G/GZ, i945PM/GM/GT, i955X/XE, P965, Q965, G965, GL960/GM965/PM965, i975X, 5000X/P/Z, 5400A/B, P35, G33, G31, Q35, Q33, X38, Q45, X48, P45, X58, P55, H55

    VIA Apollo VP3, Apollo Pro, Apollo Pro +, Apollo Pro 266, KX133, KT133(A), KT266(A), KT400(A), KT600, P4X266(A), PT880, PT880 Pro, K8T800, K8T890, K8T900, P4M800CE, P4M890, P4M900, CX700/VX700

    NVIDIA nForce, nForce2, nForce3, nForce4, nForce4 SLI Intel Edition, GeForce 6100/6150 (nForce 410/430), nForce 520/550/560/570/590, GeForce 7050/7100/7150, 650i, 680i, 740i, 750a/780a, 750i, 770i, 780i, 790i, MCP79/7A, GeForce 320M, ION

    ATi RS350, RS400, RS480/RX480, RS482, RD580/RX580, RS600/RD600, RS690, RS700, RD790

    SiS 645, 645DX, 648, 648FX, 649, 655FX, 655TX, 656, 662, 735, 756, 761GX, 760, 760GX, 755, 755FX, 741, 741GX, 671/FX/DX/MX

    AMD AM-751, AM-761, AM-762 (760MP), 780G, 790GX, 870/880G/890GX

    Память:

    SDR, DDR, DDR2, FB-DDR2, DDR3, RDRAM, поддержка расширенных профилей EPP и XMP.

    Установка:

    Программа поставляется в двух вариантах, начиная с версии 1.51: требующем установку и не требующем. Наиболее популярен (да и исторически он является первым) вариант без установки, поскольку незачем лишние библиотеки хранить в памяти. С другой стороны заявлено, что версия с установкой грузится слегка быстрее и более стабильна. Для рекордов, впрочем, это момент спорный, поскольку чем меньше библиотека висит в памяти разогнанной до предела системы, тем она стабильнее, поскольку её вылет в данном случае — всего лишь вопрос времени. Вариант, не требующий установки, существует отдельно для 32-битных и 64-битных ОС. С недавних возобновлена поддержка версий для Win98.

    Вкладка Processor

    Знакомство с интерфейсом

    Открыв программу, первое, что мы обнаружим – аскетичный серый интерфейс классических «окошек». И это большой плюс – при том количестве информации, что программа предоставляет о системе, более разнообразный интерфейс усложнял бы восприятие. Для написания статьи я использовал чуть модифицированную (но об этом позже) версию 1.54 (номер версии прописывается на каждой закладке программы слева внизу).

    Главное окно выглядит следующим образом:

    CPU

    Мы видим четыре группы полей: Processor, Clocks, Cache, Selection; здесь же находятся семь вкладок и две кнопки. Кнопка OK закрывает программу (посмотрели? OK, хватит). Кнопка Validate открывает окно валидации (но об этом чуть позднее).

    Первая группа, Processor является самой важной – она содержит информацию о том, что за процессор(ы) у нас установлен.

    • Name – поле модели процессора, отображающее то, как его определяет CPU-Z. Соответственно, актуальность этого поля будет зависеть от версии CPU-Z. И не стоит удивляться, что версия 2005 года неверно показывает информацию о процессоре 2009 года.
    • Code name – кодовое (техническое) название процессора. Обычно, при разработке ядра процессора, ему даётся техническое название, используемое вплоть до того момента, когда процессор готов к выходу на рынок. Тогда за дело берутся маркетологи и запутывают название настолько, насколько успеют, пока их не остановят, да так, что нельзя понять, насколько схожи два процессора входящие в одну линейку или имеющие один модельный номер. И наоборот – сколько разницы между двумя линейками. Так, их стараниями появилось два процессора E6600 имеющие разный техпроцесс, ядро, кеш, частоту – в общем, все характеристики, кроме шины и микроархитектуры. Отличить их можно только по полному названию линеек, что, конечно, объёмнее, чем просто назвать модель.
    • Package – корпусировка процессора. Само ядро процессора нельзя подключить к материнской плате напрямую ввиду невероятно мелких размеров контактов. Потому его сажают на подложку (также называемую субстратом) – своего рода переходник для подключения к материнской плате. Одно и то же ядро может выпускаться в разных исполнениях корпуса – для этого и служит данное поле. Например, Prescott выпускался в двух корпусах – socket 478 и LGA 775 (socket T). Gallatin в трёх: socket 603, socket 478 и LGA775 (socket T).

    упаковка

    Пример компоновки процессора под Socket LGA775. Видно, что ядро припаяно в подложке, которая может варьироваться.

    Следующая группа – это Clocks. Стоит заметить, что в скобках подписано, к какому ядру (нумерация начинается с нуля) относится информация, отображаемая в данной группе. Простейший способ переключения ядер – нажать на рабочей области окна программы правой кнопкой мыши и выбрать нужное ядро. А теперь про поля:

    • Core Speed – тактовая частота процессора, обновляемая в режиме реального времени. Обычно все программы такого рода используют один алгоритм. У процессора есть регистр TSC, который увеличивает своё значение на единицу каждый такт. Таким образом, взяв, интервал, например, в миллисекунду, разделив разницу в показаниях регистра на время, в течение которого мы проводим измерение, получим частоту процессора. Ибо разница между значениями регистра покажет сколько тактов прошло за это время, что и является определением частоты.
    • Multiplier – множитель процессора, показывающий, во сколько раз внутренняя частота процессора (называемая просто частотой процессора) больше внешней (называемая частотой шины). Современные процессоры поддерживают технологии энергосбережения, которые во время простоя понижают множитель процессора и напряжение питания. Поэтому иногда программа может показывать частоту ниже номинальной, что вы и можете наблюдать на приведённом примере (штатный множитель 11x, в простое понижается до 6x).
    • Bus Speed – внешняя частота процессора, она же – (опорная) частота шины процессора.
    • Rated FSB – эффективная частота процессора. Показывает, какой частоте шины эквивалентна скорость из-за применения технологий DDR (Double Data Rate) и QDR (Quad Data Rate), позволяющих передавать несколько бит за один такт по одной линии шины. Также эффективная частота используется, когда частота шины «умножается» подобно частоте процессора относительно некой «опорной» частоты (отображаемой в поле Bus Speed). Взятый для примера процессор использует шину QDR (она же QPB – Quad Pumped Bus, что означает по сути то же самое), потому эффективная частота шины в четыре раза больше реальной (физической).

    Группа Cache. Данная группа отображает краткую информацию о кэш-памяти CPU.

    • L1 Data — отображает информацию о кэш-памяти первого уровня для данных, а именно — объём кэша и его ассоциативность.
    • L1 Inst. — информация о кэш-памяти первого уровня (объём и ассоциативность)
    • Level 2 — информация о кэш-памяти второго уровня.
    • Level 3 — информация о кэш-памяти третьего уровня. Присутствует не на всех современных процессорах, потому поле может быть неактивно.

    Последняя группа на этой закладке подытоживает информацию о многопоточности системы.

    • Selection — позволяет выбрать процессор, о котором отображается информация на закладке CPU. Активна только для многопроцессорных систем.
    • Cores — показывает число активных ядер процессора. Данный процессор является двухъядерным, потому число ядер — два. Однако, ядра можно как отключать, так и (иногда) активировать отключённые производителем, потому число в данном поле может отличаться от начальных настроек. Поскольку у каждого ядра есть свой кэш, то количество активных ядер влияет и на эти пункты.
    • Threads — количество логических процессоров в системе или количество потоков. Отличается от числа активных ядер при наличии технологии Hyperthreading, позволяющей выполнять несколько потоков на одном ядре процессора, что определяется системой как наличие дополнительных виртуальных (логических) ядер. На данный момент технология позволяет выполнять два потока на ядре, потому число потоков на таком процессоре будет вдвое больше числа ядер.

    Вкладка Cache

    Cache

    Следующая закладка, «Cache«, отображает информацию о кэш-памяти. Каждая группа на данной вкладке отвечает за свой кэш. Так, кэш-память делится по уровням, входя в состав иерархической структуры подсистемы памяти. Кэш служит для маскирования запросов в оперативную память. Подробное описание кэша выходит за рамки данной статьи. Группы представлены следующие: Кэш-память первого уровня для данных (D-cache), кэш первого уровня для инструкций (I-cache), кэш второго уровня и (есть не у всех процессоров) кэш третьего уровня. Рассмотрим теперь пункты каждого типа кэша:

    • Size — объём кэш-памяти. Измеряется в килобайтах и мегабайтах. Чем больше, тем лучше, хотя после определённого значения прироста почти не приносит. Конечно, это зависит и от самой задачи или теста.
    • Количество — в группе находится справа от объёма. Показывает, сколько таких кэшей присутствует в процессоре. Поскольку кэш первого уровня у каждого ядра — свой, а процессор имеет два ядра, то он имеет два подобных кэша.
    • Descriptor — сведения о кэше сохраняются в зашифрованном виде подобное CPUID. Данное поле расшифровывает характеристики кэша, такие как его ассоциативность и объём линии кэша.

    Вкладка Mainboard

    Mainboard

    Вкладка «Mainboard«. Как следует из названия, содержит информацию о системной плате.

    Группа Motherboard собрала в себе следующие пункты:

    • Manufacturer — Стоит заметить, что информация берётся из так называемого DMI — интерфейса для программного сбора данных о системе. В свою очередь, эти данные являются частью BIOS, потому если производитель не утруждал себя, вы можете увидеть пустое поле на этом месте. Так, у AsRock N61P-S это поле пусто.
    • Model — модель материнской платы и ревизия (следующее поле справа). Берётся аналогично из DMI. У одной из плат Epox на чипсете Nforce2 данное поле является пустым. На некоторых платах вместо и производителя и платы можно увидеть чудесную надпись: «To Be Filled By O.E.M.».
    • Chipset — название производителя, модели и ревизии чипсета. Раньше чипсет отвечал за работу с памятью, но сейчас контроллер памяти встроен в процессор и эта функция отпала. За чипсетом осталась только функция связи с южным мостом и графическим портом, но и они добавляются в процессор. Определяется через PCI регистры, потому если отключить определение PCI-устройств, то информация о чипсете отображаться не будет.
    • South bridge — южный мост. Отвечает за работу с периферией — такие шины, как SATA, USB, LAN, Audio, а также мультик (чип MultiIO) — все они обмениваются информацией через южный мост. Определяется через PCI-регистры.
    • LPCIO — чип мультиввода-вывода (multiIO), в народе именуемый мультиком. Называется раздел по названию интерфейса, служащего для связи его с южным мостом — LPC. Это хабовый интерфейс, созданный для подключения, например, флеш-чипов BIOS. Мультик обеспечивает работу самых старых шин — PS/2, COM, LPT, контроллера флоппи-дисков, а также контроль за скоростью вращения вентиляторов и датчиков температуры.

    Следующая группа — BIOS.

    • Brand — название производителя BIOS. BIOS материнских плат не пишутся с нуля, а создаются на основе стандартных шаблонов, которые производятся несколькими компаниями, такими как Phoenix, AMI и др. а уже затем переделываются производителями плат под свои нужды.
    • Version — версия BIOS. Версия записана в самом BIOS и может не соответствовать истине — нередко при обновлении BIOS обновляется не целиком, а лишь его основная часть, потому программы докладывают о том, что версия BIOS является более старой, нежели есть на самом деле.
    • Date — дата выпуска версии BIOS. Стоит учесть, что при модификации BIOS с помощью утилит, эта дата обновляется на текущую, потому информация о дате выпуска изначальной прошивки может быть недостоверна.

    Последняя группа этой закладки — Graphic Interface. Информирует о типе графической шины, её возможностях и текущем режиме.

    • Version — название версии порта. Либо сообщает о шине PCI-Express, либо об AGP и её версии.
    • Link width — текущий режим шины.
    • Max supported — максимально поддерживаемый режим шины. Нередко бывает, что при разгоне чипсета P965 шина PCI-E «сваливается» в режим PCI-E 1x. Данная опция помогает определить это явление.
    • Sideband — опция шины AGP. Отвечает за работу передачи данных по побочной шине (дополнительная, служившая для технических целей, часть шины AGP, которую затем использовали для передачи данных). Для плат с шиной PCI-Express неактивна.

    Вкладка Memory

    Вкладка «Memory» имеет всего две группы, первая из которых — General (общее) отвечает за основные характеристики памяти.

    Memory

    • Type — тип оперативной памяти, например, DDR, DDR2, DDR3.
    • Size — объём памяти, измеряется в мегабайтах.
    • Channels # — количество каналов памяти. Используется для определения наличия многоканального доступа к памяти.
    • DC mode — режим двухканального доступа. Существуют чипсеты, которые могут по-разному организовывать двухканальный доступ. Из простых методов это symmetric (симметричный) — когда на каждом канале находятся одинаковые модули памяти, либо assymetric, когда память используется разной структуры и/или объёма. Ассиметричный режим поддерживают чипсеты Intel, начиная с 915P и NVIDIA, начиная с Nforce2.
    • NB Frequency — частота контроллера памяти. Начиная с AMD K10 и Intel Nehalem, встроенный контроллер памяти получил раздельное тактование от ядер процессора. Данный пункт указывает его частоту. Для систем с контроллером памяти, находящимся в чипсете, данный пункт неактивен, что и можно наблюдать.

    Следующая группа — Timings. Посвящена таймингам памяти, характеризующим время выполнения памятью определённой типовой операции.

    • Frequency — частота памяти, реальная. То есть, DDR2-800 будет передавать данные по шине с частотой 400МГц, но за счёт удвоенной частоты передачи данных будет иметь скорость, как обычная память на частоте 800МГц, что и используется маркетологами для политики «больших чисел». Так что не стоит пугаться вдвое меньшей частоты. Однако, бывает, что частота всё равно отличается слегка от той, что должно быть (см. следующий пункт).
    • FSB:DRAM — показывает делитель памяти, то есть, величину, характеризующую соотношение частоты памяти и системной шины. Например, поскольку частота шины составляет 266МГц, а памяти DDR2-800 — 400МГц, то соотношение будет 2:3. Стоит отметить, что на асинхронных контроллерах данное поле будет отображать «asynch.«, что говорит о полной независимости частоты памяти от шины. Для десктопов такой чипсет существует только один — ATI RD600. AsynchСкриншот вкладки памяти на RD600. Делители отсутствуют, как класс по причине асинхронности чипсета, да и тайминги далеко не на всех платформах можно такие выставить — 3-0-1-0. Все остальные чипсеты являются либо синхронными (как самые первые чипсеты, вплоть до 440BX), либо псевдоасинхронными (т.е. работающие посредством делителей памяти). На системах со встроенным контроллером памяти данной поле отличается, поскольку частота памяти на процессорах AMD зависит не от шины, а от частоты процессора, потому поле будет называться CPU/DRAM. При этом делитель памяти может быть только целочисленным, что (по причине большого числа моделей процессоров с разными частотами) приводит к шагу дискретизации частоты памяти. Так, делитель памяти равный 8 на процессоре с частотой 3200МГц будет выдавать 400МГц — в точности DDR2-800. А на процессоре с частотой 3000МГц — уже 375 (DDR2-750). Это совершенно нормальное явление, а разницу в производительности «на глазок» заметить нельзя. Memory AMDСкриншот вкладки памяти на встроенном контроллере AMD K8.
    • CAS# Latency (CL) — минимальное время между подачей команды на чтение (CAS#) и началом передачи данных (задержка чтения).
    • RAS# to CAS# Delay (tRCD) — время, необходимое для активации строки банка, или минимальное время между подачей сигнала на выбор строки (RAS#) и сигнала на выбор столбца (CAS#).
    • RAS# Precharge (tRP) — время, необходимое для предварительного заряда банка (precharge). Иными словами, минимальное время закрытия строки, после чего можно активировать новую строку банка.
    • Cycle Time (tRAS) — минимальное время активности строки, то есть минимальное время между активацией строки (её открытием) и подачей команды на предзаряд (начало закрытия строки).
    • Bank Cycle Time (tRC) — минимальное время между активацией строк одного банка. Является комбинацией таймингов tRAS+tRP – минимального времени активности строки и времени её закрытия (после чего можно открывать новую).
    • Command Rate (CR) — время, необходимое для декодирования контроллером команд и адресов. Иначе, минимальное время между подачей двух команд. При значении 1T команда распознаётся 1 такт, при 2T – 2 такта, 3T – 3 такта (пока только на RD600).
    • DRAM Idle Timer — количество тактов, через которое контроллер памяти принудительно закрывает и предзаряжает открытую страницу памяти, если к ней не было обращений.
    • Total CAS# (tRDRAM) — тайминг, используемый памятью RDRAM. Определяет время в тактах минимального цикла распространения сигнала CAS# для канала RDRAM. Включает в себя задержку CAS# и задержку самого канала RDRAM — tCAC+tRDLY.
    • Row to Column (tRCD) — ещё один тайминг RDRAM. Определяет минимальной время между открытием строки и операцией над столбцом в этой строке (аналогичен с RAS# to CAS#).

    Вкладка SPD

    SPD

    Данная вкладка описывает данные SPD — механизма, служащего для определения наличия и характеристик модулей памяти. Расшифровывается как serial presence detect, последовательное определения наличия. Слово последовательное указывает на тип используемой при этом шины, I2C — она как раз последовательная. Шина I2C включена в состав SMBus, разработанной Intel, потому если отключить в CPU-Z определение устройств на шине SMBus, то данные о SPD отображаться не будут. Если посмотреть на модуль памяти, то можно увидеть маленькую микросхему, отличную от чипов памяти, которая имеет восемь ног. Вот это и есть так называемая микросхема SPD. По сути же это обычная «флешка» — чип флеш-памяти по типу тех, что хранят в себе BIOS материнской платы и видеокарт (и другой разной периферии).

    Почти все материнские платы выставляют тайминги и частоты исходя из данных SPD, поэтому ошибки в этих данных могут привести к тому, что система не сможет стартовать. Особенно часто проблемы возникают с модулями, рассчитанными на энтузиастов. Иногда частоты и тайминги, зашитые в SPD предназначены для использования на повышенном напряжении, что приводит к невозможности загрузиться на стандартном напряжении и нужно найти обычный модуль, выставить в BIOS нужное напряжение и уже тогда воткнуть исходные модули. Такая проблема была, как минимум, у Corsair. Другой пример — когда производитель пишет на наклейке частоты и тайминги и напряжение, при которых память можно эксплуатировать, но для того, чтобы загрузиться, прописывает в SPD безопасные частоты, сильно завышенные, или же завышенные тайминги. И тогда у новичков появляются вопросы, мол, почему купил память DDR2-1066, а она определяется как DDR2-800?

    И теперь, собственно, данные, что мы можем видеть на данной вкладке. Первая группа, Memory Slot Selection:

    • поле со списком для выбора модуля. Позволяет выбрать модуль памяти, для которого отображается информация SPD.
    • справа находится поле с названием типа памяти, в нашем случае — DDR2.
    • Module Size — объём модуля в мегабайтах.
    • Max. Bandwith — максимальная пропускная способность. В данном случае, PC2 означает память DDR2, а число после этого означает максимальную пропускную способность в мегабайтах. В скобках подписана реальная частота шины DDR. Считается пропускная способность по формуле: Freq * 64 * 2 / 8, где 64 — ширина шины памяти в битах (у всех модулей SDRAM она равна 64 битам), 2 — означает технологию DDR, которая удваивает пропускную способность, а деление на 8 переводит биты в байты (в 1 байте 8 бит). Так, для DDR2-800 с реальной частотой 400МГц мы получим: 400*64*2/8=6400МБ/с, что и показывает CPU-Z.
    • Manufacturer — название производителя модуля памяти. Обычно не заполняется Noname (безымянными) производителями.
    • Part Number — номер партии. Аналогично, не заполняется Noname.
    • Serial Number — серийный номер модуля. Безымянные производители шьют одну прошивку, потому понятие серийности вообще не существует.
    • Correction — наличие у модуля коррекции ошибок. На обычной памяти не встречается, а отличить такой модуль легко по «лишнему» чипу памяти. Если у обычного модуля на одной стороне 4 или 8 чипов, то у такого — 5 или 9. Находится посередине. На некоторых модулях можно увидеть место на плате под этот чип.
    • Registered — наличие регистровой памяти. Энтузиастам интереса не представляет.
    • Buffered — наличие буферизованной памяти.Опять же, энтузиастам интереса не представляет.
    • SPD Ext. — наличие расширений SPD. SPD разрабатывается организацией JEDEC, занимающейся принятием стандартов в области памяти. Но компания NVIDIA предложила неиспользуемые стандартом байты (а их немало) задействовать для скоростных профилей, где не только будут прописывать основные и дополнительные тайминги, но и напряжение. Свой стандарт она назвала EPP — enhanced performance profile (профиль улучшенной производительности). Вслед за ней Intel добавила в свои чипсеты поддержку аналогичных профилей с названием XMP — extreme memory profile (экстремальный профиль памяти). Сделаны профили для новичков, которые не могут сами разогнать и выставить нужные настройки, потому энтузиастам они не рекомендуются. Модуль памяти поддерживает либо EPP, либо XMP, но дело тут не столько в том, что оба алгоритма используют смежные байты. Основная причина — конечно, политическая. Память должна получить благословение либо одной компании, либо другой, чтобы провозгласить поддержку профиля. Сделать поддержку обоих технически возможно, но одобрено это, конечно, не будет.
    • Week/Year — неделя и год выпуска.

    Следующая группа — Timings Table — таблица таймингов для разных частот. Подписи столбцов обозначают номер таблицы, созданной по стандарту JEDEC, либо же профиль EPP/XMP, если таковой имеется.

    • Frequency — частота памяти. Как говорилось, может отличаться от написанной на этикетке, что обычно является нормальным явлением, если память может работать на заявленной производителем частоте.
    • CAS# Latency — минимальное время между подачей команды на чтение (CAS#) и началом передачи данных (задержка чтения).
    • RAS# to CAS# — время, необходимое для активации строки банка, или минимальное время между подачей сигнала на выбор строки (RAS#) и сигнала на выбор столбца (CAS#).
    • RAS# Precharge — время, необходимое для предварительного заряда банка (precharge). Иными словами, минимальное время закрытия строки, после чего можно активировать новую строку банка.
    • tRAS — минимальное время активности строки, то есть минимальное время между активацией строки (её открытием) и подачей команды на предзаряд (начало закрытия строки).
    • tRC — минимальное время между активацией строк одного банка. Является комбинацией таймингов tRAS+tRP – минимального времени активности строки и времени её закрытия (после чего можно открывать новую).
    • Command Rate — время, необходимое для декодирования контроллером команд и адресов. Иначе, минимальное время между подачей двух команд. Используется только в расширенных профилях.
    • Voltage — используемое напряжение. JEDEC использует только стандартное значение, потому отличаться это поле будет только в расширенных профилях.

    Вкладка Graphics

    Graphics

    «Graphics» — данная закладка, как можно понять из названия, рассказывает о видеосистеме. Появилась она сравнительно недавно, но уже обзавелась интересными возможностями.

    В группе Display Device Selection всего два пункта:

    • Поле со списком для выбора видео устройства (на случай, если вы добавили больше одной видеокарты в систему). Неактивно, если видеокарта всего одна.
    • Perf level — уровень производительности. Видеокарта может иметь несколько уровней производительности (профилей), которые дадут разные показания в следующих секциях. Сделаны уровни для переключения 2D/3D режимов, чтобы видеокарта не грела попусту воздух тогда, когда это не требуется. Аналогично — неактивно, если уровень производительности всего один.

    Группа GPU. Отображает информацию о видеопроцессоре.

    • Name — название видеокарты, зашитое в BIOS видеокарты.
    • Code name — кодовое название видеочипа, по аналогии с кодовым названием ядра процессора. Обычно представляет собой буквенно-числовую кодировку, в отличие от процессоров, где используются слова и словосочетания (сейчас обычно названия городов или мест).
    • Revision — ревизия ядра, аналогично такому же пункту у центрального процессора.
    • Technology — технологический процесс, по нормам которого выполнен чип. Зависит от маркировки чипа, потому способ менее точен и число ошибок с его определением больше, чем у процессоров.

    Справа от группы можно увидеть логотип производителя чипа (если CPU-Z его верно определяет).

    Группа Clocks объединяет информацию о частотах видеокарты.

    • Core — частота ядра видеочипа. Как и с процессором, если присутствует более одного профиля производительности, то частоты могут быть ниже номинальных. Это всего лишь режим энергосбережения при простое.
    • Shaders — частота шейдерного домена. Раздельное тактование его частоты позволяет более гибко подбирать оптимальный режим работы чипа в зависимости от характера нагрузки. NVIDIA согласилась, что тенденция показывает увеличение шейдерной нагрузки на чип, для чего решила поднять его частоту относительно остальной части чипа.
    • Memory — частота видеопамяти, физическая (реальная).

    Группа Memory объединяет пункты, информирующие о характеристиках подсистемы памяти видеокарты.

    • Size — объём видеопамяти.
    • Type — тип памяти, например, DDR, DDR2, GDDR2, GDDR3, GDDR4, GDDR5.
    • Bus width — ширина шины памяти. Показывает, сколько данных можно передать за один такт без учёта технологий DDR/QDR.

    Вкладка About

    About

    Последняя и достаточно очевидная вкладка, «About«.

    • About CPU-Z — в данной группе отображается версия CPU-Z и время её выпуска, автор и команда, официальная страница проекта, тип лицензии и сайт валидации.
    • Windows version — в данной группе изображены версия Windows, сервис пака и DirectX.
    • Tools. Дополнительные возможности, а именно — создание отчётов и валидаций. Последние рассмотрим в следующей главе.

    Очень полезной функцией CPU-Z является создание отчётов о системе.

    1. Save Report (.HTML) – краткий отчёт в виде гипертекстовой страницы. В него входит только описание оборудования, датчиков и основных параметров системы (процессора, памяти, чипсета, видео, софта).
    2. Save Report (.TXT) – наиболее полный отчёт в обычном текстовом файле. В нём содержатся не только данные, попадающие в HTML-версию, но и дампы регистров системных устройств и SPD памяти.

    Валидация (Validation)

    Очень важный элемент функциональности CPU-Z. Позволяет сделать краткий отчёт о системе в зашифрованном виде и выложить его на сайт валидации (сейчас это http://valid.canardpc.com/ ). Сделать валидацию можно в режиме онлайн. Для этого нужно перейти на вкладку «About» и нажать кнопку Validation. В появившемся окне в группе «Online mode» ввести имя (по умолчанию подставляется имя компьютера), e-mail (опционально, если не ввести, то на почту не придёт письма о добавлении записи в базу валидаций и ссылки на результат). Затем нажать кнопку Submit. Если снять галочку «publish online«, то у результата будет просто проверена контрольная сумма, но добавлен в базу он не будет.

    Valid

    Обычно же результаты выкладывают вручную (редко, когда на тестовом стенде есть интернет). Можно сделать это следующими способами:

    1. Нажать F7 (самый распространённый метод ввиду простоты и скорости)
    2. Перейти на вкладку «About» и нажать кнопку Validation. В появившемся окне нажать кнопку Save validation file.
    3. Нажать кнопку Validate на первой вкладке программы (появилась в последних версиях). Она сразу откроет окно валидации, где нужно нажать кнопку Save validation file.

    Результатом любого из этих трёх действий будет файл с валидацией. Раньше валидация была текстовой и имела контрольную сумму в конце, что позволяло смотреть, что это за валидация и на какой частоте она сделана. Сейчас файл является полностью зашифрованным, поэтому, если вы собрались разгонять несколько процессоров подряд, не забудьте складывать результаты, полученные на одном процессоре в отдельную папку перед установкой нового. По умолчанию, при нажатии F7 в название файла валидации дописывается частота процессора, что является ещё одним плюсом относительно других способов.

    Далее нужно зайти на страницу http://valid.canardpc.com/ , ввести имя, на которое будет зарегистрирован результат (Правила HWBot требуют совпадения имени, на которое зарегистрирован результат валидации и профиля на HWBot).

    Горячие клавиши

    • F5 — сохраняет скриншот программы в формате bmp в текущую папку (откуда запущена программа). Файлы получают названия по названию вкладок (записаны по порядку) — cpu.bmp, cache.bmp, mainboard.bmp, memory.bmp, spd.bmp, graphics.bmp, snap.bmp. При этом закладки cpu, memory и почему-то snap (закладка About) в конце имени приписывают через дефис частоту процессора. Достаточно полезное свойство.
    • F6 — копирует скриншот программы в буфер обмена.
    • F7 — создаёт файл валидации в формате cvf в текущей папке.
    • F9 — переключается между алгоритмами вычисления частоты процессора.

    Параметры запуска

    Программа имеет возможность использовать запуск с параметрами.

    • -txt=report Запуск CPU-Z в скрытом режиме: окно программы не открывается, только создаётся текстовый отчёт с дампом регистров (report.txt). Помимо названия файла (после знака равно) можно прописать и путь. Например: — txt=D:\Dump\report Создаст файл report.txt в папке D:\Dump. Можно использовать и относительный путь.
    • -html=report То же самое, но создаётся отчёт в HTML.
    • -core=N Отображает частоту ядра за номером N (ядра нумеруются, начиная с нуля). Можно следить за частотой разных ядер, запуская несколько окон CPU-Z с разным параметром, например: cpuz.exe –core=0 cpuz.exe –core=1 Это приведёт к запуску двух окон CPU-Z, отображающих частоты двух первых ядер процессора. Однако, проще переключаться между частотами ядер с помощью нажатия правой кнопкой мышки в рабочей области окна CPU-Z на вкладке процессора.
    • -console Выводит информацию в командную строку интерпретатора cmd.exe в Windows XP. Заметим, что вызывать программу с параметром необходимо из самой командной строки.

    Файл конфигурации

    Вместе с программой прилагается файл конфигурации, cpuz.ini, с помощью которого можно задавать особые параметры работы CPU-Z. По умолчанию, выглядит он следующим образом:

    [CPU-Z] TextFontName=Verdana TextFontSize=13 TextFontColor=000060 LabelFontName=Verdana LabelFontSize=13 PCI=1 MaxPCIBus=256 DMI=1 Sensor=1 SMBus=1 Display=1 ShowDutyCycles=0

    • TextFontName= Определяет шрифт, используемый для информационных полей.
    • TextFontSize= Определяет размер шрифта.
    • TextFontColor= Определяет цвет шрифта, записанный в формате RGB в шестнадцатеричной системе исчисления, например, 9600E0.
    • LabelFontName= Определяет шрифт, используемый для подписей к полям.
    • LabelFontSize= Определяет размер шрифта подписей к полям.
    • Sensor= Выставление равным нулю отключает определение чипа мониторинга и измерение напряжений.
    • DMI= Выставление «0» или «off» отключает вывод информации DMI (Desktop management interface), записанной в BIOS материнской платы и содержащей обычно информацию о производителе BIOS, версии ядра, версии прошивки и её даты, названии материнской платы, шинах и контроллерах, установленных на материнской плате.
    • PCI= Выставление «0» или «off» отключает вывод информации об устройствах, занимающих PCI-адресное пространство (т.е. логически находящихся на ней, при этом подключаться к шине им не обязательно). Это,например, определение чипсета и его свойств (скорости графического порта, таймингов).
    • MaxPCIBus= Определяет, сколько устройств (логических) из PCI адресного пространства будет просканировано. Максимальное число устройств на одной шине (шина может быть не одна) – 256 с нумерацией от 0 до 255. Значение по умолчанию как раз 255.
    • SMBus= Выставление значения «0» или «off» отключает сканирование шины SMBUS. Шина SMBUS – это технология, разработанная Intel и являющаяся производной от шины I2C, на которой, как известно, сидит, например, SPD. Таким образом, при отключении информация в закладке SPD показываться не будет.
    • Display= Позволяет отключить отображение свойств видеокарты в закладке Graphics.
    • ShowDutyCycles= При значения «1» CPU-Z использует другой алгоритм вычисления частоты, основанный на вычислении периода такта.

    Некоторые из этих параметров можно использовать в качестве твиков. Например, при отключении всех вышеуказанных параметров CPU-Z грузится слегка быстрее. Когда система в разгоне проходит Superpi 1M, но валится при загрузке CPU-Z, это довольно обидно. Возможно, кому-то подобное поможет. Однако, если отключить всё, то не будут показываться тайминги, а правила HWBot требуют как вкладки CPU, так и Memory. Выходом является не отключать для 3D тестов и большинства 2D тестов параметр PCI, а выставить MaxPCIbus=0, что заставит программу сканировать только северный мост (который всегда является нулевым устройством на шине и содержит информацию о таймингах и делителе памяти). Теоретически, это должно давать небольшой прирост стабильности за счёт облегчения самой программы.

    Пара слов о микроизменениях в версиях CPU-Z. Заключение.

    Как я сказал, я использовал модифицированную версию, в чём же отличие? Новейшая версия, 1.54 показывала про мой процессор вот что:

    Old CPU-Z

    Видно, что старая версия 1.54 мой E6500K за таковой не определяла, относя его к простым смертным. Я связался с автором CPU-Z и выслал ему отчёт, в том числе и по этому вопросу. Ответа от него не получил. Но, запустив с флешки скачанную по другому поводу версию (скачал опять же, 1.54) увидел надпись E6500K, что вызвало лёгкий когнитивный диссонанс. Покопавшись и найдя «старую» версию, я сравнил цифровые подписи. У старой была от 24-го марта. А у новой — от 31-го марта, что меня успокоило, поскольку письмо я написал 29-го. Так что не всегда одна версия является той же самой. Это скорее микро-обновление, но о существовании таких явлений, я считаю, знать полезно.

    Обсуждение материала ведётся в этой теме нашего форума.

    Thread multiplier for p2 что это

    Всем хай
    На днях искал формулу для расчета урона для абилок дагера
    Нашёл пару разных источников, и несколько вариантов

    Формула с сайта 4гейм (как написано эта формула является самой точной для стабов НА РУОФЕ (Эртея)) — [ 70 * (skillpower + patk) * soulshot_bns * cd_mult * pvp_bns * att_bns * proximity_mod + 77 * cd_patk *6.1 ] / pdef

    Эта формула встречается чаще — ( ([P.Atk] * [soulshot] + [skill Power]) * [CD Multiplier] + [skill Multiplier] * [CD Bonus] )* 70 / [P.Def]

    Я понимаю что тема уже заезженна до дыр, но мне всё же хочется узнать какая формула более точная в реалиях хроник HF.

    ViruSS__renamed_1339505_15122020
    View Public Profile
    Find More Posts by ViruSS__renamed_1339505_15122020

    Уличная Магия
    Всего лайков: 61

    Волшебник Знаток Lineage2 Issue reason: За лучшие ответы в конкурсе экспертов по Lineage 2

    Re: Формула расчета на HF
    Все по blow умениям

    effect = i_fatal_blow;3453;250;0
    chance = weapon_critical * dex_bonus * crit_height_bonus * crit_pos_bonus * effect_bonus * fatal_blow_rate

    weapon_critical = (12.0 для даггеров) из itemdata
    dex_bonus = dex_bonus

    crit_height_bonus = (z_diff * 4 / 5 + 10) / 100 + 1
    z_diff = z_attacker — z_target, (min = -25 max = 25) если меньше -25, то -25 и
    если больше 25 то 25

    crit_pos_bonus = crit_pos * p_critical_rate_position_bonus
    crit_pos = (front = 1, side = 1.1, back = 1.3)

    effect_bonus = (p2 + 100) / 100, p2 — 2-й пар-р из эффекта

    если chance > 80 то chance = 80

    damage_bonus = (pAtk * ss + p1) * weapon_random * pos_k1

    ss = если есть соска то 2 если нет то 1
    pos_k1 = (back = 0.2; side = 0.05; front = 0)

    damage = ((pAtk * ss + p1) * soul_bonus * weapon_random * p_critical_damage per * p_defence_critical_damage per * pos_k2 + def_diff + damage_bonus) * 77 / (sDef + pDef) * weapon_triat_bonus * attr_bonus * p_pvp_physical_skill_dmg_bonus per * p_pvp_physical_skill_defence_bonus per * crit

    soul_bonus = 1 всегда для эффекта i_fatal_blow (он не учитывает души)
    i_soul_blow учитывает, если они есть то:
    soul_bonus = 1.3 + soul_count * 0.05

    p_critical_damage per — стат
    p_defence_critical_damage per — стат

    pos_k2 = (p_critical_damage_position per — 1) * 0.5 + 1
    p_critical_damage_position per — стат

    def_diff = (p_defence_critical_damage diff + p_critical_damage diff + p_critical_damage_position diff) * 6
    p_defence_critical_damage diff — стат
    p_critical_damage diff — стат
    p_critical_damage_position diff — стат

    sDef = pDef щита если попали в щит и 0 если не попали.
    Шанс попасть в щит умножается на 3 для этих эффектов.

    p_pvp_physical_skill_dmg_bonus per — стат если пвп
    p_pvp_physical_skill_defence_bonus per — стат если пвп

    crit = rand(p3), p3 — 3-й пар-р эффекта, если рандом выпал то 2, иначе 1

    Надёжен ли твой компьютер?

    Представляю вашему вниманию перевод статьи Джеффа Атвуда о тестировании новых компьютеров. Я не видел ни одной статьи подобного качества на эту тему; в статье приведена вся необходимая информация и ничего лишнего, а так же хорошо структурирован материал. Надеюсь, и вам она придётся по нраву.

    Джефф — основатель StackOverflow. Ныне он работает над проектом Discourse.

    Дисклеймер: Хоть статья и называется «Надёжен ли твой компьютер?», речь идет не о надёжности как термине(англ. reliability), а, скорее, о стабильности (англ. stability). Статья о том, как автор тестирует новые компьютеры на стабильность и прочность.

    Если мне не изменяет память, я собрал около сотни компьютеров за последние двадцать лет. Это не так уж и сложно и, в действительности, со временем становится только легче, так как компьютеры становятся все более совместимыми.

    Например, вот что может понадобится для сборки Scooter Computer:

    1. Нанести немного термопасты на верхнюю часть корпуса.
    2. Поместить в корпус материнскую плату.
    3. Прикрутить материнскую плату к корпусу.
    4. Вставить плату SSD.
    5. Вставить плату RAM.
    6. Подключить внешнее питание.
    7. Загрузиться.

    Это до смешного просто. Мы с моим шестилетним сыном собирали конструкторы Лего, которые были намного сложнее. Сборка традиционных ПК отличается всего парой дополнительных шагов: вставить процессор, радиатор, подключить кабели. И, наконец, сборка сервера добавляет еще пару незначительных действий, возможно, с ограничениями на размер сборки. Мини-компьютер, обычный ПК или сервер — если вы смогли собрать один из них — считайте вы собрали их все.

    Каждый из нас выдыхает с облегчением, когда только что собранный компьютер загружается первый раз, и не важно сколько собранных машин на вашем счету. Но загрузка это только начало. Это отлично, если он загружается, но этим никого не удивишь. На самом деле, нам нужно знать, надёжен ли этот компьютер.

    И хотя компьютерные составляющие с каждым годом становятся всё надежнее, а производители проводят многочисленные тесты перед отправкой — нет никакой гарантии что все части будут надежно работать вместе, в конкретно ваших условиях. И всегда есть вероятность того, что вам попадутся запчасти с трудноуловимыми внутренними дефектами — пусть эта вероятность и очень мала.

    Так как мы всё-таки учёные, мы тестируем вещи в нужных условиях и собираем данные, чтобы доказать, что наш компьютер работает стабильно. Поэтому, после загрузки мы начинаем тесты.

    Память

    Мне нравится начинать с тестирования памяти, так как для него не обязательно наличие установленной ОС и оно работает одинаково на всех x86 компьютерах. Memtest86 является «прадедушкой» всех тестировщиков памяти. Я не уверен, почему он и Memtest86+ разделились, но они работают практически одинаково. Версия от PassMark является более новой, поэтому её я и рекомендую.

    Загрузите подходящую вам версию, запишите её на загрузочную USB флешку, вставьте в новый компьютер, загрузитесь и позвольте программе сделать свое дело. Всё работает в автоматическом режиме — просто загрузитесь и смотрите как тест выполняется.

    image

    (если ваш компьютер поддерживает UEFI boot, вам будет доступна более новая версия 6.x, в другом случае — версия 4.2, которая показана на скриншоте).

    Я рекомендую как минимум один полный проход memtest’а, а если вам нужно быть сверхуверенным в стабильности компьютера, оставьте его тестироваться на ночь. Если у вас много памяти, запаситесь терпением. Для наших серверов с памятью в 128Гб тестирование заняло около 3-х часов.

    Значение «Pass» в верхней части экрана должно дойти до отметки в 100%, а значение «Pass» в таблице должно быть больше единицы. Если у вас появляются какие-то ошибки, да и вообще всё что угодно, кроме чистой отметки в 100% — ваш компьютер не надёжен. В таком случае стоит начать вынимать платы памяти, чтобы обнаружить неисправную.

    Операционная система

    Все последующие тесты будут нуждаться в установленной ОС, и самый важный из всех тестов на надёжность это тестирование того, возможно ли установить на компьютер операционную систему. Выберите вашу любимую бесплатную ОС и начните обычную установки. Я рекомендую Ubuntu Server LTS x64, так как у нее намного меньшие ожидания по поводу вашего видеооборудования. Скачайте ISO и запишите его на загрузочную флешку, затем загрузитесь с неё.

    image

    (Эй, вы только посмотрите, там есть опция для тестирования памяти! Как предусмотрительно!)

    • Удостоверьтесь в том, что у вас присутствует стабильное интернет-соединение с DHCP. Это позволит установке пройти быстрее.
    • В общем случае, вы будете нажимать Enter очень много раз, принимая все настройки по умолчанию. Да знаю, знаю я, что мы устанавливаем Linux, но хотите верьте, хотите нет — но они сделали процесс установки очень дружелюбным.
    • Касательно того, что нужно вводить в качестве логина и пароля для аккаунта по умолчанию, я рекомендую jeff и password, так как я являюсь одним из самых выдающихся экспертов в компьютерной безопасности.
    • Если вы устанавливаете ОС с флешки и получаете сообщение об отсутствующем CD, просто выньте и вставьте обратно флешку. Я тоже не знаю почему это работает, но это работает.

    В любом случае, для следующих тестов нам будет необходима установленная ОС. В дальнейшем я предполагаю, что вы установили Ubuntu, но в действительности подойдет любой дистрибутив Linux.

    Центральный процессор

    Теперь, давайте убедимся в том, что мозги нашего компьютера в порядке. Честно говоря, если вы дошли это этого момента, и тесты памяти и ОС завершились успешно, то шанс того, что вы имеете неисправный компьютер практически равны нулю. Но нам нужно быть уверенными, а лучший способ добиться этого — обратиться к нашему старому другу, Марену Мерсенну.

    image

    Числа Мерсенна (англ. Mersenne numbers) — числа вида Mn = 2^n — 1, где n — натуральное число. Числа такого вида замечательны в том числе тем, что некоторые из них являются простыми числами. Числа Мерсенна названы в честь французского математика Марена Мерсенна исследовавшего их свойства в 17 веке.

    Обычно я использую Prime95 и Mprime — программы, которые анализируют огромное количество гигантских чисел с целью определить, являются ли они простыми. Вот как мы скачиваем и устанавливаем mprime на нашу свежеустановленную Ubuntu Server:

    mkdir mprime
    cd mprime
    wget mersenne.org/gimps/p95v287.linux64.tar.gz
    tar xzvf p95v287.linux64.tar.gz
    rm p95v287.linux64.tar.gz

    (Возможно, вам придётся заменить номер версии в командах на текущую последнюю версию отсюда: www.mersenne.org/download, но на момент написания статьи, приведённая мной версия является последней).

    Теперь запустите mprime командой ./mprime

    image

    На вопрос отвечаем N.

    Далее вас попросят указать количество тестов на выполнение. Но программа умна и по умолчанию выбирает количество потоков равным количеству логических ядер, так что просто нажимаем enter — нам нужно полное тестирование всех процессоров и ядер. Далее выберем тип тестирования:

    1. Small FFT’s (максимум тепла + стресс-тест FPU, данные помещаются в L2-кэш, RAM практически не тестируется).
    2. In-place large FFT’s (максимальное потребление электричества, немного тестирует RAM).
    3. Blend (всего по чуть-чуть, много тестов RAM).

    Accept the answers above? (Y):
    [Main thread Feb 14 05:48] Starting workers.
    [Worker #2 Feb 14 05:48] Worker starting
    [Worker #3 Feb 14 05:48] Worker starting
    [Worker #3 Feb 14 05:48] Setting affinity to run worker on logical CPU #2
    [Worker #4 Feb 14 05:48] Worker starting
    [Worker #2 Feb 14 05:48] Setting affinity to run worker on logical CPU #3
    [Worker #1 Feb 14 05:48] Worker starting
    [Worker #1 Feb 14 05:48] Setting affinity to run worker on logical CPU #1
    [Worker #4 Feb 14 05:48] Setting affinity to run worker on logical CPU #4
    [Worker #2 Feb 14 05:48] Beginning a continuous self-test on your computer.
    [Worker #4 Feb 14 05:48] Test 1, 44000 Lucas-Lehmer iterations of M7471105 using FMA3 FFT length 384K, Pass1=256, Pass2=1536.

    Сейчас самое подходящее время, чтобы расчехлить свой Kill-a-Watt или другой похожий измеритель потребления энергии. Если у вас есть такой, вы можете измерить максимальное потребление энергии процессором. В большинстве систем, CPU является единственным значимым потребителем энергии в системе, только если у вас не стоит мощная игровая видеокарта.

    Так же я советую запустить i7z в другом терминале: так вы сможете отслеживать температуру ядер и частоты, в то время как mprime делает свою работу.

    sudo apt-get install i7z
    sudo i7z

    Позвольте mprime работать всю ночь в режиме максимального выделения тепла. Все вычисления тщательно проверяются, так что если где-то произойдёт какая-то ошибка, то весь процесс прервётся и выведет ошибку в консоль. В общем, если mprime прервался… ваш компьютер не надёжен.

    image

    Следите за температурой процессора! В дополнение к абсолютной температуре процессора, так же необходимо следить за суммарным выделением тепла в системе. Вентиляторы должны увеличить обороты и температура всей системы должна держаться в приемлемых рамках, иначе в конце концов вы получите неисправный, перегревающийся компьютер.

    Плохие новости в том, что на практике компьютеры практически никогда не испытывают подобных нагрузок. Хорошая новость в том, что если ваша система может выдержать ночь в таком режиме — она 100% готова к любым задачам и перегрузкам.

    Диск

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

    sudo badblocks -sv /dev/sda

    Так мы полностью тестируем весь диск (в режиме безопасного чтения). Думаю и без объяснений понятно, что любые ошибки должны заставить вас усомниться в исправности вашего диска.

    Checking blocks 0 to 125034839
    Checking for bad blocks (read-only test): done
    Pass completed, 0 bad blocks found. (0/0/0 errors)

    Теперь проверим SMART записи для нашего диска.

    sudo apt-get install smartmontools
    smartctl -i /dev/sda

    Вышеприведённая команда позволит узнать, поддерживает ли ваш диск SMART. Если да, давайте активируем его:

    smartctl -s on /dev/sda

    Теперь мы готовы запускать SMART тесты. Но сначала давайте узнаем, как долго будут выполняться разные тесты:

    smartctl -c /dev/sda

    Запустите long тест, если у вас есть время или short, если нет.

    smartctl -t long /dev/sda

    Тесты выполняются асинхронно; после истечения указанного времени откройте отчет по тесту SMART и убедитесь, что все прошло успешно:

    === START OF READ SMART DATA SECTION ===
    SMART Self-test log structure revision number 1
    Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
    # 1 Extended offline Completed without error 00% 100 —

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

    dd bs=1M count=512 if=/dev/zero of=test conv=fdatasync
    hdparm -Tt /dev/sda

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

    536870912 bytes (537 MB) copied, 1.52775 s, 351 MB/s
    Timing cached reads: 11434 MB in 2.00 seconds = 5720.61 MB/sec
    Timing buffered disk reads: 760 MB in 3.00 seconds = 253.09 MB/sec

    Наконец, проведем более интенсивный тест с помощью bonnie++:

    sudo apt-get install bonnie++
    bonnie++ -f

    Нам не особо важны полученные численные результаты, нам важно, чтобы тест завершился без ошибок. Если вы получаете ошибки в процессе вышеприведённых действий… ваш компьютер не надёжен.

    (Я считаю, что приведённые мной тесты отлично подходят для повседневного использования, в частности для дисков в составе RAID. Однако, если вы хотите протестировать ваши диски ещё более тщательно, предлагаю хороший ресурс: FreeNAS «how to burn in hard drives»)

    Сеть

    Честно говоря, у меня нет большого опыта в сетевых неисправностях. Но я верю в важность полосы пропускания, а это как раз та вещь, которую можно проверить.

    Вам понадобится два компьютера для теста iperf. Допустим, наш сервер имеет адрес 10.0.0.1, вот команды для него:

    sudo apt-get install iperf
    iperf -s

    А вот наш клиент, который будет подключаться к серверу и следить за тем, как быстро мы можем передавать данные между машинами:

    sudo apt-get install iperf
    iperf -c 10.0.0.1

    ————————————————————
    Client connecting to 10.0.0.1, TCP port 5001
    TCP window size: 23.5 KByte (default)
    ————————————————————
    [ 3] local 10.0.0.2 port 43220 connected with 10.0.0.1 port 5001
    [ ID] Interval Transfer Bandwidth
    [ 3] 0.0-10.0 sec 1.09 GBytes 933 Mbits/sec

    Вы должны видеть примерно 120 мегабайт/сек (960 мегабит/сек) для одиночного гигабитного Ethernet соединения. Если вам повезло иметь 10-ти гигабитное соединение, отлично, поздравляю с вашими 1.2 Гигабайтами/сек.

    Видеокарта

    Я не освещаю этот вопрос, потому что очень малая часть компьютеров, которые я собираю, нуждается в чём-то большем, чем встроенный в процессор GPU. Кстати, встроенные GPU становятся на удивление очень хорошими.

    Но ты же геймер, да? Тогда тебе нужно загрузиться в Windows и попробовать что-то на подобие furmark. И ты должен протестировать видеокарту, потому что видеокарты, особенно игровые, зачастую являются самым мощным и сложным устройством, потребляющим огромное количество ватт. И да, следите за температурой.

    Ну ладно, возможно, ваш компьютер надёжен

    Всё описанное выше я применяю ко всем компьютерам, которые я собираю, и всё это отлично выполняет свою задачу. Таким образом я нахожу неисправные процессоры, RAM, диски, системы охлаждения до того, как они доставят проблем в основной работе. Всё это не значит, что компьютер никогда не сломается, но я сделал всё, что мог, чтобы быть уверенным в том, что мои компьютеры будут жить долго.

    Кто знает, может быть удача посопутствует тебе и ты станешь известен как парень, чей сервер имел 16 лет аптайма, пока его не списали.

    image

    Все эти тесты — просто отправная точка. Расскажите, какие техники вы используете, чтобы удостовериться, что ваши компьютеры стабильны и надёжны? Как бы вы улучшили предложенные мной тесты в соответствии с вашим опытом?

    • тестирование железа
    • сборка компьютеров
    • стресс-тестирование
    • перевод
    • Компьютерное железо
    • Процессоры

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *