NMT-200 ЧаВо

Уничтожаем вредную привычку дисков WD Green

Статья WildFlexy от 12.02.2011
Редакция Poslanec от 10.06.2012

Симптомы

Поставил я недавно в карман диск WD Green WD10EADS, совершенно забыв его «оттюнинговать».
Проблема выражается в том, что если на этот HDD постоянно идут операции чтения-записи, то все хорошо. И хорошо до тех пор, пока не запущен критичный к скорости записи на HDD процесс.
К примеру, все тот же многострадальный Transmission. Если поток данных прерывается на время, достаточное для проявления способности данных дисков «прятать голову в песок» (то есть на парковку), то при возобновлении закачки и быстром заполнении буферов Transmission, мы получаем «посмертную» записку в лог («wait atomic», а иногда даже и без нее) и зависание всего плеера.
Жареный петух клюнул меня именно тогда, когда я направил активные закачки на этот диск. Если мой ADSL-модем уходил в долгие реконнекты, а перед этим скорость приема у Transmission на C-200 была на максимуме, то по восстановлении соединения, скорость на рутере быстро показывала хороший результат и… брык! Приехали! Плеер в ступоре.
С аналогичными симптомами (A-200 с WD20EARS — рутер ночью перезагружается по расписанию, а плеер падает) обратился еще один «о-счастливчик».

Попытки поговорить с диском через стандартный набор команд ни к чему не приводят:

PCH-C200[/]# hdparm -S0 -B254 -M128 /dev/sda
/dev/sda:
setting Advanced Power Management level to 0xfe (254)
HDIO_DRIVE_CMD failed: Input/output error
setting acoustic management to 254
setting standby to 0 (off)
APM_level      = not supported
acoustic      = 254 (128=quiet ... 254=fast)

Не отбиваемое у этих дисков желание заставить «позеленеть» пользователя.
Вдобавок, такое поведение параноидально нервирует наблюдателей за SMART-параметром Load_Cycle_Count. Хотя данных моделях дисков этот параметр не смертелен до 300 000 (!), страшна не цифра, а эффект от того, что к диску невозможно вовремя обратиться, несмотря на постоянно крутящиеся блины (параметр hdparm -S0 работает).

Диагноз

Вышеизложенная особенность имеет свое имя и называется технологией IntelliPark™, которая в свою очередь относится к набору функций обеспечения энергосбережения IntelliPower™. Мне, как и большинству, непонятно кто же в WDC так решил, но время срабатывания этой недетской шутки (таймер idle3), по-умолчанию выставлено на 8 секунд!. То есть, через это короткое время, электроника диска будет стараться уложить его головы на парковочную площадку. При этом совершенно фиолетово, что в данный момент по SATA в буфер (например для WD10EADS это 32 мегабайта, либо 64МБ для WD20EARS) кто-то уже льет свои данные, будучи в полной уверенности что они будут сохранены на диск. Этой «фиче» важнее поэкономить электричество за счет не болтающихся в воздухе в полной боевой готовности, а валяющихся в «гнезде» головок.
С учетом ранее приведенной скорости записи на файловую систему Ext2 в 40 мегабайт/сек буфер может быть переполнен за … очень быстро! Учтем, что диск не в состоянии отдать все мегабайты буфера под запись. У него там ранее считанные данные лежат, которые имеют свой не просроченный срок годности. Очередная массовая попытка слива от Transmission после простоя, вызывает у диска порыв к записи. Но пока головы снимутся с «якоря», отпозиционируются (тут еще и «противный тормозистор» но необходимый для тишины в помещении, ключ hdparm’а -M128 замедляет скорость перемещения головок) и запишут, буфер не может быть освобожден для новой порции.
А когда у Linux на борту плеера заканчивается допустимое терпение (таймауты) на операцию, то получаем мы зависание.

Лечение

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

«Таблетка» называется wdidle3. И лежит прямо на официальном сайте в софте раздела техподдержки.
Почитав некоторые форумы и статьи, в которых категорически не рекомендуют давать в руки неграмотному юзеру такой «тяжелый молоток», я аж улыбнулся до кончиков ушей :)
Софтина при своей работе открытым текстом говорит — «Sending command:» и набор кодов. А народная молва вокруг утилиты создала такой мрачный ореол инструмента по замене прошивки, что у пользователей руки падают.
Да и в прилагаемой доке написано:
— Uses a Vendor Specific Command to set or get the idle3 timer
То есть, действительно, посылается проприетарная команда, в ответ на которую не знающие о ней диски будут молчать в тряпочку или ругаться.

Итак, собственно, сама таблетка.
wdidle3 v 1.05
В оригинале предназначалась для дисков WD1000FYPS-01ZKB0, WD7500AYPS-01ZKB0, WD7501AYPS-01ZKB0. Но работает без проблем с дисками WDC моделей WD20EADS, WD20EARS, WD15EADS, WD15EARS, WD10EADS, WD10EARS, WD8000AARS, WD7500AADS, WD7500AARS, WD6400AADS, WD6400AARS, WD5000AADS, WD5000AARS и некоторыми другими моделями (на ваш страх и риск).
Собрана только под старый добрый DOS. Не думаю, что у вас возникнет проблема найти LiveCD/LiveFlash с FreeDOS. Запускаем на стационарном компьютере или ноутбуке с SATA-портом наружу. Через переходник USB↔SATA не выйдет.

Утилита очень простая и очень «тупая».
Внимание! wdidle3 не позволяет задавать имя устройства — она лечит абсолютно ВСЕ найденные диски! То есть, если у вас в компьютере уже стоит детище от WDC, то и оно будет подвергнуто экзекуции.
Поэтому на всякий противопожарный случай, отстрелите лишние SATA-шлейфы от дисков WD на компьютере.

    Хотя у меня как-раз в стационарном PC такой случай — 2 HDD именно от WDC (SATA-80GB и IDE-320GB). Но они настолько старые, что на данную утилиту не реагируют совсем никак. Поэтому я злонамеренно не отключал их.

Но советую проверить, прежде чем пользоваться!
Ключ для опроса состояния таймера idle 3 дается в командной строке отдается утилите как /R

 wdide3.exe /R

В ответ высыпается информация о всех найденных IDE или SATA дисках. Если диск производства WDC и имеет данный таймер, то отображается его значение в секундах или минутах.

Само значение таймера выставляется в промежутках от 8 до 12.7 секунд и от 30 до 300 секунд (на старых моделях только до 25.5 секунд). Не совсем понятно, к чему такая поразительная точность — до десятых долей секунды, но наверное, есть и в этом смысл.
Команда

 wdide3.exe /S300

должна выставить таймер на 5 минут.
Смотрите в отчет после выполнения команды — так ли это на самом деле. Если значение не выдается или отличается от заданного — то попробуйте уменьшить число.

    Для старых 2.5″ дисков WD, например BEVT ее нужно применять правильно. На этих дисках нельзя устанавливать таймер выше 10.5 секунд. Иначе диск начинает громко ронять головы и отваливаться от интерфейса. Также отключение таймера может привести к тому, что головки начнут парковаться каждую секунду. Исправить легко. Снова через wdidle3 устанавливаем таймер обратно на 8 или поднимаем до 10.5 секунд.

Команда

 wdide3.exe /D

удаляет таймер idle 3, по факту отключая функцию IntelliPark™.

Для своего WD10EADS я выключил таймер — с тех пор «ни единого разрыва» :)


Справедливое замечание от skanik:
При включенном на SATA-контроллере режиме ACHI, утилита wdidle3, скорее всего, не определит подключенные дисковые устройства. Исправляется это переключением в BIOS режимa на совместимый с IDE.
Только в этом случае постарайтесь все-таки отключить все «лишние» SATA-диски. Ибо случайный запуск Windows доставит вам массу развлечений (например, BSOD) :)

30 комментария к этой записи

  • artart

    нам бы попроще как нибудь

    • WildFlexy

      Проще некуда.
      Совет не для всех.
      А только для тех, у кого HDD не лишние. :)

      Прочти только «Лечение» и сделай выводы. Или задавай более конкретные вопросы прямо сюда.

  • Stas.Porter

    А как это все сочетается с параметром из LTU HDD_APM_DISABLE=1 ?

    • WildFlexy

      HDD_APM_DISABLE=1 это hdparm -B255 /dev/устройство.
      Для бывших у меня в руках WD Green это совершенно бесполезно — и даже вредно, так как WD10EADS кричал:

      ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
      ata1.00: cmd ef/05:fe:00:00:00/00:00:00:00:00/40 tag 0 cdb 0x0 data 0
               res 51/04:fe:00:00:00/00:00:00:00:00/40 Emask 0x1 (device error)
      ata1.00: configured for UDMA/133
      ata1: EH complete
      sd 0:0:0:0: [sda] 1953525168 512-byte hardware sectors (1000205 MB)
      sd 0:0:0:0: [sda] Write Protect is off
      sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00
      sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
      ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x0
      ata1.00: cmd ef/05:fe:00:00:00/00:00:00:00:00/40 tag 0 cdb 0x0 data 0
               res 51/04:fe:00:00:00/00:00:00:00:00/40 Emask 0x1 (device error)
      ata1.00: configured for UDMA/133
      ata1: EH complete
      wait atomic, count=53904

      А так как параметр APM скармливается не только при включении и при выключении в стендбай, но и просто так — по непонятным мне причинам, то диск в это время отвлекается на ругань.
      При совпадениях с активными операциями записи, это приводило к wait atomic (простою с ожиданием завершений операций ввода-вывода ядра Linux).
      К сожалению LTU неразборчив — он пытается скормить эти настройки всем дискам.
      И если WD20EARS так не обижаются на попытку ими порулить, то более древний WD10EADS — да. Поэтому мне пришлось выставить только HDD_AAM_QUIET=1, а HDD_APM_DISABLE=0.

  • skanik

    WildFlexy добавте пожалуйста в описание использования wdidle3.exe, что нужно переключать режим конроллера HDD с AHCI (у кого включен AHCI) на IDE, иначе wdidle3 не находит винт (что естественно). А то сегодня тупил минут 10, пока вспомнил про это.

  • net

    WildFlexy
    ОГРОМНОЕ СПАСИБО ЗА СТАТЬЮ!!!
    Ранее я перерыл инет и не смог найти ни какой информации как же отключить это нововведение WD, правда это было еще 1,5год назад, купил себе тогда WD10EADS 2 шт. и долго плевался на их работу в Popcorn.

  • phantom7

    А это всё актуально только при работе с Transmission?

    • WildFlexy

      Это актуально для любых неторопливых WD Green если плеер не только читает, но и пишет.
      Возможно, что будут бзики с microdc++ при паузе при закачке и последующем резком вырастании трафика.
      Ситуацию эмулировал даже не ходя далеко — например, заливка по FTP на этот диск. После начала копирования делал паузу (в FAR при копировании кнопка ESC), ждал секунд 10-15 (чтобы Linux успел слить буфера на диск), потом продолжал копирование.
      Плеер вис без убирания таймера с диска в половине экспериментов. Сейчас все ок.

      Хотя если так не «извращаться» (Transmission, microdc++), то пусть он всегда будет зеленым.
      Только логгирование (messages) на этот диск включать нежелательно — Load_Cycle_Count слишком быстро растет.
      Спать так спать!
      Работать — так работать!
      :)

  • Kupalov

    А команда «D:> wdide3.exe /D» не повредит HDD? Это получается головка парковаться не будет?

    • WildFlexy

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

  • sh1z01d

    Столкнулся с новой проблемой. Хард горит:) Приводит к перезагрузке плеера. Сейчас качается два фильма. И…

    # smartctl -a /dev/sda | grep Temp
    194 Temperature_Celsius 0x0022 092 089 000 Old_age Always — 60

    В чём может быть проблема?

    • opium

      Плеер С-200? Дисков 1 или 2? Вытяжной вертилятор стоит?
      У Wildflexy тоже в корзине WD20EADS до 60 прогревался — но в жару летом, пока вентилятор не поставил.

  • sh1z01d

    Плеер А200. Хард — WD20EADS. Помимо того, что температура от 56 до 61, периодически отрубается торрент и самба. На слух и куллер выключается. Таймер отключил.

    Вот что в логах (перед зависанием):

    Mar 16 19:43:51 Popcorn user.err kernel: BUG: scheduling while atomic: transmission-da/0x00000104/1306
    Mar 16 19:43:51 Popcorn user.warn kernel: Call Trace:
    Mar 16 19:43:51 Popcorn user.warn kernel: [] dump_stack+0x8/0x34
    Mar 16 19:43:51 Popcorn user.warn kernel: [] schedule+0x97c/0xa0c
    Mar 16 19:43:51 Popcorn user.warn kernel: [] schedule_timeout+0x70/0x10c
    Mar 16 19:43:51 Popcorn user.warn kernel: [] __alloc_pages+0x198/0x3e4
    Mar 16 19:43:51 Popcorn user.warn kernel: [] cache_alloc_refill+0x37c/0x7e4
    Mar 16 19:43:51 Popcorn user.warn kernel: [] __kmalloc+0xd8/0xe8
    Mar 16 19:43:51 Popcorn user.warn kernel: [] __alloc_skb+0x64/0x124
    Mar 16 19:43:51 Popcorn user.warn kernel: [] tcp_collapse+0x1d4/0x468
    Mar 16 19:43:51 Popcorn user.warn kernel: [] tcp_prune_queue+0x150/0x35c
    Mar 16 19:43:51 Popcorn user.warn kernel: [] tcp_data_queue+0x798/0x1008
    Mar 16 19:43:51 Popcorn user.warn kernel: [] tcp_rcv_established+0x228/0xc44
    Mar 16 19:43:51 Popcorn user.warn kernel: [] tcp_v4_do_rcv+0xfc/0x554
    Mar 16 19:43:51 Popcorn user.warn kernel: [] tcp_v4_rcv+0xad8/0xb7c
    Mar 16 19:43:51 Popcorn user.warn kernel: [] ip_local_deliver+0xe0/0x1c4
    Mar 16 19:43:51 Popcorn user.warn kernel: [] ip_rcv+0x44c/0x6ac
    Mar 16 19:43:51 Popcorn user.warn kernel: [] netif_receive_skb+0x2bc/0x454
    Mar 16 19:43:51 Popcorn user.warn kernel: [] enet_poll+0x4d4/0x688
    Mar 16 19:43:51 Popcorn user.warn kernel: [] net_rx_action+0xb4/0x218
    Mar 16 19:43:51 Popcorn user.warn kernel: [] __do_softirq+0x84/0x120
    Mar 16 19:43:51 Popcorn user.warn kernel: [] do_softirq+0x6c/0x74
    Mar 16 19:43:51 Popcorn user.warn kernel: [] irq_exit+0x5c/0x74
    Mar 16 19:43:51 Popcorn user.warn kernel: [] plat_irq_dispatch+0x358/0x508
    Mar 16 19:43:51 Popcorn user.warn kernel: [] ret_from_irq+0x0/0x4

    И этот блок текста повторяется до перезагрузки. Что-то я совсем ничего не понимаю…

  • sh1z01d

    Точнее хард WD20EARS.

  • Nicolay
    Nicolay

    Всем доброго времени суток!
    WD10EARS
    Отключил таймер с помощью загрузочной флэшки копируя wdidle3.
    После отключения таймера при просмотре видео картинка стала зависать, помогает только перезагрузка плеера А-200.
    посмотрите пожалуйста всё я правильно сделал
    http://itmages.ru/image/view/151121/62d2ee17
    http://itmages.ru/image/view/151124/14841297

    • WildFlexy

      Если стало хуже, то не отключай его совсем, а попробуй поставить его побольше, например:

      wdide3.exe /S300

      И если утилиты LTU стоят, убери в файле /share/Apps/LTU/configure автоматическое управление APM:

      HDD_APM_DISABLE=0
      • Nicolay
        Nicolay

        хорошо я выставлю больше S300.
        можно изменить путь по установке LTU не /share/Apps/LTU
        а допустим /share/download/создать папкуProgram/LTU/….
        /share/download/Program/Apps/LTU/….

        • WildFlexy

          По-моему не выйдет — там слишком много линков на служебный софт завязано на существующие пути.
          И к чему таки сложности?

          • Roman_V_M

            Если симлинк на старом месте оставить, то вполне выйдет:

            mv /share/Apps/LTU /новое_место
            ln -s /новое_место /share/Apps/LTU

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

      • Nicolay
        Nicolay

        HDD_APM_DISABLE=0 удалить?

  • Nicolay
    Nicolay

    WildFlexy
    Roman_V_M
    Сложностей нет, Roman_V_M: я как то и не догодался скрыть папку Apps.
    Спасибо!

  • Nicolay
    Nicolay

    Скрыть папку с приложениями, чтобы не светила в интерфейсе плеера /Apps/LTU не получается.

  • Юрий

    Отключил эту фигню и всё равно винт тупит по-страшному.
    Скорость перезаписи с винта навинт — 25-30 Мбайт/с

    • Poslanec

      а где вы, интересно, вычитали — что приблуда автопарковки влияет на скорость??? это не связные вещи. Тупость вашего винта зависит прямо пропорционально — от его фрагментации.

Компьютерный Сервис на Пушкинской! ХелпЮзер на Пушкинской
2010–2017 © NMT-200 ЧаВо