PCI Latency Timer

Отправлено 7 мая 2015 г., 0:03 пользователем Anton Derbenev   [ обновлено 7 мая 2015 г., 0:06 ]

В BIOS Setup многих x86 систем есть параметр PCI Latency Timer.

Долгое время я устанавливал его на 128 тактов для всех систем,  в BIOS Setup которых заходил, поскольку субъективно это давало большую производительность при недостатке ресурсов.

PCI Latency Timer – это число тактов, которое устройство может занимать шину, прежде чем оно будет должно передать контроль за шиной другому устройству. Т.е. устройство может освободить шину и раньше, если она не нужна, но дольше удерживать не может.

Передача управления занимает время, так что, чем больше Latency Timer, тем выше ПСП и ниже нагрузка на процессор. Но чем меньше Latency Timer, тем ниже задержки.

Есть куча материала на эту тему, но в основном – пространные теоретические рассуждения, причём часто основанные на ошибочных догадках. Сегодня наткнулся на статью, которая, наконец-то, прояснила для меня, почему это давало большую производительность, и почему это не всегда полезно: https://www.mythtv.org/wiki/PCI_Latency

Вкратце:

  1. Не влияет на PCI-Express.
  2. Для большей части материнских плат по умолчанию Latency Timer – 32 такта, и это разумное значение. Оно устанавливается для всех устройств.
  3. Драйверы устройств (а в Linux – и setpci* в командной строке) могут менять это значение. Оно может быть разным для разных устройств. Контроллеры IDE/SATA/USB обычно остаются с задержкой, установленной в BIOS Setup.
  4. Проблемы начинаются, если два устройства обмениваются информацией, и у них разный Latency Timer. Устройство с большей задержкой будет ждать окончания передачи, пока устройство с короткой задержкой будет порциями заполнять буфер. Особенно заметно это при видеозахвате (у устройства видеозахвата Latency Timer будет увеличен драйвером, если он слишком маленький, а IDE контроллер останется с 32 тактами).
  5. Большая задержка может быть проблемой, например, работе со звуком: объём передаваемой информации небольшой, а низкие задержки важны. И у некоторых звуковых карт для уменьшения задержки можно уменьшить буфер до критически низких значений, например, 8 сэмплов. Устройства с большим Latency Timer будут слишком долго удерживать шину, и звуковая карта не будет успевать* отдавать данные при записи (будут пропуски) или получать при воспроизведении (будут паузы/щелчки/шум).
Comments