Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Странное поведение microtime
 
 автор: Phantom   (21.07.2011 в 05:42)   письмо автору
 
 

На компьютере под Windows XP установлен PHP 5.2.17.17
Замечаю странное поведение функции microtime(). Ставил в коде метки для быстрого тестирования скорости выполнения MySQL запросов:

$time=microtime(true);
// тут код запроса, но это по сути не важно, проблема в другом
echo round(microtime(true)-$time,5);


К моему удивлению этот код считает время как ему сздумается и часто выдаёт даже отрицательные результаты. Всегда пользовался данным методом, проблем никогда не было ни на одном сервере, ни на денвере на ноутбуке (там стоит более старая версия php). Решил разобраться в чём дело, запустил многократно в консоли такой код:

      $a=time();
      // $a вычитается для того, чтобы убрать целую часть и видеть больше чисел после запятой
      echo (microtime(true)-$a)."\r\n";
      usleep(10);
      echo (microtime(true)-$a)."\r\n";
      usleep(10);
      echo (microtime(true)-$a)."\r\n";
      usleep(10);
      echo (microtime(true)-$a)."\r\n";
      usleep(10);
      echo (microtime(true)-$a)."\r\n";
      usleep(10);
      echo (microtime(true)-$a)."\r\n";
      usleep(10);
      echo (microtime(true)-$a)."\r\n";
      usleep(10);
      echo (microtime(true)-$a)."\r\n";

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

Гугл в решении проблемы не помогает, так как в основном находит проблему, когда горе программисты используют функцию microtime без параметра.

Вместе с PHP тут установлен ZEND оптимизатор, не знаю имеет ли это значение, раньше никогда с ним не связывался.

Откуда PHP берёт значение microtime? У операционной системы ведь? Может XP глючит? Какие есть теории? может кто-то сталкивался с подобной проблемой.

  Ответить  
 
 автор: Phantom   (21.07.2011 в 05:50)   письмо автору
 
   для: Phantom   (21.07.2011 в 05:42)
 

Всё сильнее кошу на проказы операционной системы. Запустил скрипт в консоли через интерпретатор Денвера (того, что стоит на ноутбуке и работает без нареканий), но на данном компьютере. Проблема имеет место быть. Видимо, это вопрос уже не по PHP, но всё таки, может кто-то с таким сталкивался.

  Ответить  
 
 автор: cheops   (21.07.2011 в 12:19)   письмо автору
 
   для: Phantom   (21.07.2011 в 05:42)
 

Он берет его из Windows API, который сам по себе очень медленный, а тут еще и тормознутость PHP добавляется. Таймеры в Windows очень неточные, помоему у самых точных ошибка 15 микросекунд (могу врать, нужно смотреть) - причем это самые точные таймеры, есть еще менее точные, от предыдущих версий Windows API, скорее всего они и используются в реализации PHP.
В PHP скорее всего ничего сделать нельзя. В Intel-процессорах, есть машинные коды 0x0F, 0x31, которые вызывают таймер тактов (сколько тактов прошло со времени работы процессора) - вот идеально его бы задействовать.

  Ответить  
 
 автор: Phantom   (21.07.2011 в 16:26)   письмо автору
 
   для: cheops   (21.07.2011 в 12:19)
 

Возможно данная проблема проявляется всегда, просто в настолько небольшой степени, что это незаметно. Разница в тысячную долю секунду особо большой роли не сыграет. Но у меня разница достигает более одной секунды иногда. Это ни в какие рамки не лезет. На компе проц AMD, на ноуте Intel. На обоих стоит WINDOWS XP с одного и того же физического носителя. Автообновление включено на обоих. Но раньше на компе стояла эта же винда и тот же самый интерпретатор и проблемы не было насколько я помню (не думаю, что она бы прошла у меня мимо глаз). Поэтому я сейчас думаю, что тут какая-то проблема с конфигурацией системы (я тут в винде понаотключал ненужных сервисов, в реестре менял некоторые вещи, но не думаю, что я задел что-то такое, что может влиять на время).

  Ответить  
 
 автор: cheops   (21.07.2011 в 16:34)   письмо автору
 
   для: Phantom   (21.07.2011 в 16:26)
 

Да секунда - это многовато... Реестр и сервисы не должны бы влиять на это.

  Ответить  
 
 автор: Phantom   (21.07.2011 в 16:37)   письмо автору
 
   для: cheops   (21.07.2011 в 16:34)
 

Проблема проявляется на самой последней версии PHP из ветки 5.2 (PHP5.2.17.17) и на PHP5.2.4.4 из Денвера. На других версиях не тестировал. На ноутбуке уже больше года стоит Денвер, никогда проблемы такой не наблюдалось.

  Ответить  
 
 автор: cheops   (21.07.2011 в 16:39)   письмо автору
 
   для: Phantom   (21.07.2011 в 05:42)
 

>Вместе с PHP тут установлен ZEND оптимизатор, не знаю имеет ли это значение, раньше никогда
>с ним не связывался.
Скорее всего в нем дело, либо он как-то кэширует значения, либо еще чего-то... у меня ваш код выдает вполне осмысленный результат, все значения возрастают от меньших к большему.

  Ответить  
 
 автор: Phantom   (21.07.2011 в 16:42)   письмо автору
 
   для: cheops   (21.07.2011 в 16:39)
 

На Денверовском интерпретаторе нет ZENDа. И видеть он его в другой папке не может, так как конфиг php.ini берёт точно тот, который нужно. Я этот интерпретатор сконфигурировал давно и использую только для запуска консольных скриптов.

  Ответить  
 
 автор: cheops   (21.07.2011 в 18:21)   письмо автору
 
   для: Phantom   (21.07.2011 в 16:42)
 

Если не сложно, приведите пример вывода временных меток скриптом, который вы привели во втором посте. Пока никаких свежих идей по поводу того, что есть и как исправить нет.

PS У вас кстати системы корректировки времени по серверу точного времени, никакой-нибудь хитрой не стоит, как в UNIX-системах, которая постепенно корректирует время, а не махом, как это делает Windows? Две машины - это показатель, если бы одна глючила, еще можно было как-то понять.

  Ответить  
 
 автор: Phantom   (21.07.2011 в 19:36)   письмо автору
 
   для: cheops   (21.07.2011 в 18:21)
 

Глючит именно одна машина. На другой (ноутбук) стоит в точности тот же самый дистрибутив винды и тот же интерпретатор с той же конфигурацией, но на ней всегда всё было в порядке.

Вот примеры меток:

0.642505884171
0.643323898315
0.658124923706
2.04041790962
0.658124923706
2.04077506065
2.04141306877
2.04243588448

0.970629930496
0.970624923706
0.970624923706
2.3539659977
2.3549759388
0.970624923706
2.35396695137
2.35495901108

0.595628976822
0.595624923706
0.595624923706
0.595624923706
0.595624923706
0.611249923706
0.611249923706
1.99481296539

0.501880884171
0.502594947815
0.503571033478
0.504554986954
0.505527973175
0.501874923706
1.88571500778
1.88669705391

  Ответить  
 
 автор: cheops   (22.07.2011 в 12:20)   письмо автору
 
   для: Phantom   (21.07.2011 в 19:36)
 

Да, честно говоря дур дом какой-то, а первый и второй прогон вообще ни в какие ворота не лезет.

>Глючит именно одна машина. На другой (ноутбук) стоит в точности тот же самый дистрибутив
>винды и тот же интерпретатор с той же конфигурацией, но на ней всегда всё было в порядке.
Т.е. все-таки одна машина? А у этой машины кстати, процессор не с плавающей частотой? Обычно частоту вычисляют по тактам, но некоторые функции создавались во времена процессоров с фиксированной частотой и могут ориентироваться на частоту процессора для вычисления времени.

  Ответить  
 
 автор: Phantom   (22.07.2011 в 15:12)   письмо автору
 
   для: cheops   (22.07.2011 в 12:20)
 

На другом форуме мне выдвинули теорию, что это из-за того, что время ядер процессора отличается. Как же мне решить-то эту проблему?
Глючит именно одна машина. Я с самого начала так сказал, наверно, немного запутано объяснил. Ноутбук я приводил в противопоставление, что там та же система, тот же интерпретатор, но глюка такого нет.

  Ответить  
 
 автор: cheops   (22.07.2011 в 16:50)   письмо автору
 
   для: Phantom   (22.07.2011 в 15:12)
 

>На другом форуме мне выдвинули теорию, что это из-за того, что время ядер процессора
>отличается. Как же мне решить-то эту проблему?
Без претензии на экспертный уровень, вряд ли это состоятельно, не настолько хорошо PHP написан, чтобы сразу два ядра в одном процессе использовать (тем более для такой тонкой материи, как время, тем более для microtime)... как правило, скрипт и процесс php обслуживает одно ядро, а другое ядро в этот момент чем-то другим, а чаще просто балду пинает. Да и не кажется мне, что проблема в железе, иначе бы у вас черт знает что со всем остальным творилось - время бы глючило, видео бы не показывалось и операционная система скорее всего давно бы навернулась... тут где-то поближе проблемы, а сносить PHP и ставить другую версию пробовали?

  Ответить  
 
 автор: Гость   (22.07.2011 в 12:38)   письмо автору
 
   для: Phantom   (21.07.2011 в 19:36)
 

приведите вывод скрипта где не вычитается time(), а просто идет вывод microtime(true) - там значения так же скачут?

  Ответить  
 
 автор: Phantom   (22.07.2011 в 15:11)   письмо автору
 
   для: Гость   (22.07.2011 в 12:38)
 

Значения скачут и там тоже. При использовании старого метода:
array_sum(explode(' ', microtime()))
тоже скачут значения.

  Ответить  
 
 автор: Phantom   (21.07.2011 в 19:42)   письмо автору
 
   для: cheops   (21.07.2011 в 18:21)
 

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

  Ответить  
 
 автор: Саня   (22.07.2011 в 16:24)   письмо автору
 
   для: Phantom   (21.07.2011 в 05:42)
 

Возможно вышел из строя кварцевый резонатор, отвечающий за счётчик тактов. То есть возможно причина именно в железной части.

  Ответить  
 
 автор: cheops   (22.07.2011 в 17:03)   письмо автору
40 Кб
 
   для: Саня   (22.07.2011 в 16:24)
 

Можно проверить, но в моем понимании должен случить апокалипсис на всем компьютере. Phantom, во вложении программа, запустите её несколько раз - там скачков нет - выводится от меньшего к большему? Вообще если у вас терпение не кончилось, можно сейчас подергать функции Windows API, чтобы понять откуда у проблемы ноги растут (правда, придется на C++ программы писать).

  Ответить  
 
 автор: Саня   (22.07.2011 в 19:00)   письмо автору
 
   для: cheops   (22.07.2011 в 17:03)
 

У меня проблем с microtime() нету. Видимо вы ошиблись адресатом.

  Ответить  
 
 автор: cheops   (22.07.2011 в 19:46)   письмо автору
 
   для: Саня   (22.07.2011 в 19:00)
 

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

  Ответить  
 
 автор: cheops   (22.07.2011 в 17:57)   письмо автору
 
   для: Phantom   (21.07.2011 в 05:42)
 

Полез в исходные коды, чтобы докопаться до истины, откуда есть пошла microtime(). Оказывается - это просто обертка для PHP-функции gettimeofday() - вот это новость, оказывается gettimeofday(true) быстрее microtime() - исключается один вызов функции. PHP-функция gettimeofday() находится тут же в начале файла. Эта функция использует С-функцию gettimeofday(), определение которой можно найти в win32/time.c, там же находится usleep(). usleep() использует CreateWaitableTimer() - Windows API функцию, которая появилась в Windows 2000 (т.е. это новые таймеры). А gettimeofday() использует QueryPerformanceCounter(). Так получилось, что эта функция реализована с ошибкой - она как раз на частоту ориентируется, а не на такты. Проблемы с ней имеют многие, как только ноутбук начинает экономить питание и снижать частоту - функция начинает глючить. Я так понимаю в Microsoft не захотелись привязываться к машинным кодам разных процессоров и чтобы функция работала и под Intel и под AMD в 2000 году тупо привязались к частоте (тогда даже трансметы еще не было, не говоря о новых мобильных процессорах Intel). Так получилось, что частота сейчас не является постоянной, особенно на ноутбуках. Отсюда проблемы, на серверах они не встречаются, так как там частота фиксированная, а на ноутбуках - пожалуйста. Насколько я понимаю, это проявляется когда система мультиядерная, частота плавающая (ну или проблема в BIOS, Microsoft все валит на железо, хотя мне с трудом верится, что у вас старый BIOS).

PS Кстати, попробуйте экономию питания отключить - скорее всего глюк пропадет.

  Ответить  
 
 автор: Phantom   (22.07.2011 в 18:35)   письмо автору
22.3 Кб
 
   для: cheops   (22.07.2011 в 17:57)
 

Запускал вашу программу много раз. Не совсем понял что это за числа. Во вложении скриншот.

[quote]
Оказывается - это просто обертка для PHP-функции gettimeofday() - вот это новость, оказывается gettimeofday(true) быстрее microtime() - исключается один вызов функции.
[/quote]
О_о PHP такой PHP.

[quote]
PS Кстати, попробуйте экономию питания отключить - скорее всего глюк пропадет.
[/quote]
:D Повторяю в третий раз: на ноутбуке всё как работало, так и работает нормально. Проблема наблюдается на стационарном компе. Проверил, экономия питания отключена.

Вот конфигурация машины:

Система:
Microsoft Windows XP Professional версия 2002 Service Pack 3

Компьютер:
AMD Athlon(tm) 64 X2 Dual Core Processor 4400+ 2.31 ГГц, 1.00 ГБ ОЗУ

(раньше было два гигабайта оперативной памяти, одна планка сгорела зимой)

В BIOS залезть сейчас так просто не смогу. Монитор не подключен к компу, я им управляю через Радмин с ноутбука.

  Ответить  
 
 автор: cheops   (22.07.2011 в 19:14)   письмо автору
 
   для: Phantom   (22.07.2011 в 18:35)
 

.

  Ответить  
 
 автор: cheops   (22.07.2011 в 19:15)   письмо автору
 
   для: Phantom   (22.07.2011 в 18:35)
 

Почему-то далось, что проблема именно с ноутбуком... с ними всегда больше всех проблем.
Вообще программа ориентирована на машинные коды Intel. BIOS судя по всему исключается, хотя можно попробовать перепрошить, хотя то что во вложении - это счетчик тактов (конкретно вычисляется сколько тактов тратится на создание одной черной кисти GDI в Windows), третий столбец вычисляет их по QueryPerformanceFrequency, а самый крайний берет их прямо из процессора - минусы там очень плохо, мне они очень не нравятся (даже не смотря на то, что это AMD, а не Intel). Судя по всему вариант о котором говорил Саня, причем на одном из ядер или какой-то более хитрый глюк. Вы процессор не разгоняли?

PS Попробуйте вот что, в диспетчере задач можно явно указывать каким ядром должен обрабатывать тот или иной процесс. Создайте длительно-выполняющиеся скрипты с участием microtime(), отключите лимит время выполнения при помощи set_time_limit(), заставьте скрипты выводить данные в файлы, а в диспетчере задач каждому из процессов PHP задайте разные ядра - одному одно, другому - другое (Вкладка Процессы, контекстное меню, Задать соответствие).

PPS Хотя повторю, что программа ориентирована на Intel, правда судя по тому, что в большинстве случаев возвращается то, что нужно, эта команда в AMD реализована и вот минусы мне там очень не нравятся, в моем понимании минусы там должны возникать спустя 137 лет после работы процессора. Либо процессор разогнан, либо перегревается, либо еще что-то...

  Ответить  
 
 автор: cheops   (22.07.2011 в 19:46)   письмо автору
 
   для: Phantom   (22.07.2011 в 18:35)
 

Хотя судя по частоте процессор не разгонялся... А какая у него температура?

  Ответить  
 
 автор: Phantom   (22.07.2011 в 22:34)   письмо автору
 
   для: cheops   (22.07.2011 в 19:46)
 

Процессор разгонялся моим братом, но очень давно. И он говорит, что после этого биос был сброшен уже ни один раз.
А круг сужается между прочим. Предложенный вами тест показал интересные результаты.
Я написал следующий код:
<?php

sleep
(60);

$file='test 1.txt';

if(
is_file($file)) unlink($file);

for(
$i=0;$i<100;$i++){
  
$times=array();
  for(
$i=0;$i<20;$i++){
    
$times[]=microtime();
    
usleep(10);
  }
  
$str='';
  foreach(
$times as $time){
    
$time=explode(' ',$time);
    
$str.=$time[1].str_replace('0.','.',$time[0])."\r\n";
  }
  
toLog($file,$str."\r\n");
  
sleep(30);
}

function 
toLog($file,$str){
  
$f=fopen($file,'ab');
  
fputs($f,$str);
  
fclose($f);
}

?>

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

Эврика. Проблема проявляется только в третьем варианте. То есть каждое ядро по отдельности работает как надо, но между ними рассинхронизация времени идёт. Поэтому когда используются оба ядра, то скрипт может получать время то от одного, то от второго. Такую теорию мне сразу высказали на форуме forum.boolean.name. Но там моя тема не вызвала такой глубокой дискуссии. А я не знал, что в диспетчере задач можно указать процессу, какое ядро ему использовать, а то сразу бы этот тест провёл.

Проблема, как я понимаю, определена. Но как же её теперь решать? Может какие-то настройки биоса подёргать? Монитор могу притащить от брата, но желательно уже знать, что делать, чтобы не таскать его потом туда-обратно.

  Ответить  
 
 автор: Phantom   (22.07.2011 в 22:39)   письмо автору
 
   для: cheops   (22.07.2011 в 19:46)
 

Попробовал двум висящим процессам апача (httpd.exe) указать тоже одно ядро, вместо двух. Проблема пропадает. Как только возвращаю работу второго ядра - проблема сразу появляется.
Очень интересный эффект, никогда с подобным не сталкивался. Какие будут идеи по решению? Чувствую, что из-за этого кроме PHP ещё много чего глючить может.

  Ответить  
 
 автор: cheops   (22.07.2011 в 22:54)   письмо автору
 
   для: Phantom   (22.07.2011 в 22:39)
 

Хм... любопытно, все-таки два ядра задействуются, вот это уже вероятно работа BIOS. Мы все тоже на двух ядрах сидим, а ничего такого не наблюдаем. Да и не будет никто в здравом уме брать такты с одного ядра, а потом с другого, тем более программисты могут явно задать номер нужного ядра (правда, почему-то это не делают, ведь то что может диспетчер задач, может и программа). Мне кажется это нужно на форум железячников идти их спрашивать, описав кратко ситуацию. Може прошивка какая есть для мат.платы - ведь минуя BIOS к процессору не обратишься, а BIOS-ы тоже ошибки содержат довольно часто (тем более QueryPerformanceCounter() может и с мат.платы брать данные). Может кто сталкивался или посоветует чего умного.

PS В любом случае на программистском форуме, вероятность конструктивного решения мала. Это уж так повезло, что тут кое-что нащупали, а так вопрос конечно не по профилю форума...
PPS Тут вероятно придется поверить Microsoft, они при возникновении этой проблемы как раз кивают в сторону BIOS.

  Ответить  
 
 автор: Phantom   (22.07.2011 в 23:11)   письмо автору
 
   для: cheops   (22.07.2011 в 22:54)
 

Попробую на днях прошить биос. Всё таки он там наверно 5-и летней давности. Спасибо всем за участие. Если решу проблему, то отпишусь тут.

  Ответить  
 
 автор: Phantom   (23.07.2011 в 02:25)   письмо автору
 
   для: cheops   (22.07.2011 в 22:54)
 

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

UPD:
Поспешил с выводами. Проблема осталась. Начала проявляться спустя некоторое время. Такое ощущение, что проблема начинает проявляться со временем после включения компа, причём чем дольше он работает, тем сильнее отличается время между ядрами.

  Ответить  
 
 автор: Саня   (23.07.2011 в 11:06)   письмо автору
 
   для: Phantom   (23.07.2011 в 02:25)
 

Значит проблема с температурой. Проверьте зависимость глюка от температуры процессора (или любой другой доступной для измерения температуры).

  Ответить  
 
 автор: Phantom   (23.07.2011 в 16:05)   письмо автору
 
   для: Саня   (23.07.2011 в 11:06)
 

От температуры возможно, так как радиатор там на процессере "временно" поставлен без свежей термопасты. Но наблюдается зависимость между временем работы компа и разницей во времени между ядрами. После включения компа проблема начинает давать о себе знать спустя час примерно, но не очень сильно. А когда комп поработает несколько суток, то время начинает отличаться аж на 2 секунды. Мне кажется, может винда должна проводить синхронизацию какую-то раз в n-ое количество минут к примеру, чтобы время не уплывало сильно, но не делает этого почему-то.

  Ответить  
 
 автор: cheops   (23.07.2011 в 17:24)   письмо автору
 
   для: Phantom   (23.07.2011 в 16:05)
 

>Мне кажется, может винда должна проводить синхронизацию какую-то раз в n-ое количество
>минут к примеру, чтобы время не уплывало сильно, но не делает этого почему-то.
Кстати, нет, она не может скорректировать счетчики тактов. Она бы могла работать со счетчиком одного ядра, но почему-то это не делает, видно полагается на BIOS, а BIOS считает, что раз в Windows API есть средства для работы с разными ядрами - она разберется данные с какого ей нужны сама. Поговаривают, что в полноценных многопроцессорных системах, вроде серверов эта ситуация корректно обработана, а для многоядерных чипов - нет, видно посчитали, что такты у них не могут быть разные.

  Ответить  
 
 автор: Phantom   (23.07.2011 в 16:51)   письмо автору
 
   для: Саня   (23.07.2011 в 11:06)
 

Проверил температуру. Температура второго ядра всегда на 9-11 градусов больше первого. Надо бы термопасту купить. Я ща поставил вплотную к кулеру процессора здоровенный кулер на 220 вольт, который в обиходе используется вместо вентилятора в жаркую погоду. Температура ядер упала в полтора раза, но разница в 10 градусов всё равно присутствует: первое ядро 34 градуса, второе: 44 градуса.

  Ответить  
 
 автор: cheops   (23.07.2011 в 17:38)   письмо автору
 
   для: Phantom   (23.07.2011 в 16:51)
 

А чем меряли, помоему довольно трудно померить температуру одного ядра, да и там довольно близко все друг к другу... если врет счетчик тактов, то и внутренние термопары тоже могут врать (ну или их показания могут искажаться).

>первое ядро 34 градуса, второе: 44 градуса.
При такой температуре ничего глючить не должно (в моем понимании нужно больше раза в два минимум), если глючит - скорее всего заводской брак. Вообще 95% всех процессоров отправляются в брак, только 5% поступают в продажу, их тоже ранжируют по качеству и задают им разные частоты, при которых они стабильны - разгон, это выход на нестабильные более высокие частоты. В свое время был скандал, когда для ВМФ США закупались комплектующие не самого высокого класса - т.е. они были качественные, но не самого высшего сорта (а следовательно дешевле). Все работало и так, но если бы случился пожар или еще какое-то экстремальное воздействие - вероятность отказа чипа была бы выше. Разница шла в карман заинтересованных лиц. Если такое возможно в армии, то на рынке возможностей для манипуляций еще больше.

  Ответить  
 
 автор: Phantom   (23.07.2011 в 17:51)   письмо автору
 
   для: cheops   (23.07.2011 в 17:38)
 

Компу этому уже лет 5, раньше я работал на этом компе несколько лет (правда последние два года пользуюсь ноутбуком), проблем с ним таких не было вроде, но могу ошибаться. Возможно просто не замечал. Поэтому я надеюсь, что проблема возникла из-за чего-то такого, что я смогу решить. Денег нет, чтобы новый процессор покупать. Мне итак ещё оперативу и звуковуху надо. =)

Температуру ядер смотрю через программу Core Temp 0.99.8

  Ответить  
 
 автор: Саня   (23.07.2011 в 18:03)   письмо автору
 
   для: cheops   (23.07.2011 в 17:38)
 

Мне кажется всё намного прозаичнее.

  Ответить  
 
 автор: cheops   (23.07.2011 в 18:11)   письмо автору
 
   для: Саня   (23.07.2011 в 18:03)
 

Да, я ничего хитрого не написал, как и конструктивного впрочем, просто мазок к картине (это я еще даже не начал вспоминать про ошибку с вычислениями плавающей точки в Pentium Pro, и как нам это мешало жить в свое время :)))... Напишите как вам видится ситуация (а главное есть ли способ её поправить без денег).

  Ответить  
 
 автор: Phantom   (23.07.2011 в 19:12)   письмо автору
 
   для: cheops   (23.07.2011 в 17:38)
 

Кажется, решение найдено.
Собственно, вот оно: http://support.microsoft.com/kb/895980/
Судя по описанию проблемы, у меня в точности она и есть. Вчера когда в биосе копался, видел функцию AMD Cool'n'Quiet, я её не трогал, но мне кажется, что она включена была. Насколько я понимаю, если её отключить, это может решить проблему? Жаль, что прямо сейчас не могу залезть в биос. Но я временно вписал в boot.ini ключ /usepmtimer (это рекомендуется в качестве временного решения в справке майкрософта выше по ссылке). Подожду несколько часов, если проблема не проявится, то это и есть решение.

UPD:
Забыл сказать: ещё я добавил ключ PerfEnablePackageIdle в реестре. Это советуют сделать на многих форумах совместно с /usepmtimer. Информации очень много: http://www.google.ru/search?q=PerfEnablePackageIdle

Прошло больше часа, проблема не проявляется. Не замечаю уплывания времени вообще ни капли. Видимо помогло. =)

  Ответить  
 
 автор: Phantom   (10.08.2011 в 11:12)   письмо автору
 
   для: Phantom   (23.07.2011 в 19:12)
 

В общем отключение AMD Cool'n'Quiet в биосе ничего не дало. Пользуюсь костылём от майкрософта из поста выше уже почти две с половиной недели, проблема не проявляется. Сегодня вот попробовал убрать костыль и отключить в биосе AMD Cool'n'Quiet. Не помогло. Всем спасибо. =)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования