Остановите Dell от дросселирования процессора с помощью адаптера питания
Мой ноутбук Dell испытывает старую проблему с адаптером питания, который не может быть распознан компьютером. Я точно знаю, что это просто обрыв кабеля данных в линии, потому что, если я расположу его правильно, кабель будет распознан, и компьютер перестанет дросселировать процессор до 20%. Можно ли это как-то отключить, чтобы у меня не было скрипки с моим шнуром питания при каждом подключении компьютера?
5 ответов
Я провел некоторое исследование по этому вопросу и обнаружил, что, вероятно, нет хорошего способа предотвратить удушение ЦП недавними ноутбуками Dell, когда он не обнаруживает адаптер переменного тока OEM (или поврежденный контакт данных).
Отключение SpeedStep или "дополнительных спящих режимов" или работа с профилями питания в BIOS не имеет значения. Утилита Intel Extreme Tuning, похоже, не поддерживает эти материнские платы, так как все опции разгона заблокированы, но когда подключено зарядное устройство стороннего производителя, оно сообщает, что включено термическое регулирование CPU, а CPU-Z показывает множитель FSB до 5 раз и напряжение ядра на 0,6 вольт.
Я предполагаю, что, возможно, BIOS предназначен для отправки ложных показаний температуры материнской платы в ЦП при обнаружении адаптера стороннего производителя, что приводит к его дросселированию. Похоже, Dell очень серьезно относилась к подключению к OEM-адаптерам при разработке этой системы.
Изменить: Я нашел утилиту, которая позволит вам отключить регулирование неизвестного адаптера, по крайней мере, под Windows (я пока не знаю, будет ли утилита работать под Linux, или если есть что-то подобное.) ThrottleStop имеет флажок под названием "BD PROCHOT", который приводит к тому, что напряжение ядра процессора и множитель сбрасываются в нормальное состояние при отключении. По-видимому, это "двухсторонний путь прохождения сигнала к процессору. Он позволяет другим компонентам ноутбука, таким как материнская плата или графический процессор, посылать сигнал процессору, который заставляет процессор думать, что он слишком горячий", подтверждая, что так оно и есть ". Функция "реализована в BIOS через отправку этого сигнала в ЦП при обнаружении неизвестного адаптера переменного тока.
-Только для процессоров Intel-
Начните с установки MSR-TOOLS в Linux.
sudo apt install msr-tools
Вы должны загрузить msr как модуль ядра с помощью следующей команды
sudo modprobe msr
Считать значение из регистра для конкретной модели (MSR) - 0x1FC
sudo rdmsr 0x1FC
Затем, наконец, запишите значение в регистр конкретной модели (MSR) - 0x1FC
sudo wrmsr 0x1FC 4004d
Вот и вы! Ваш процессор работает на максимуме!
Вот независимая от ОС программа, которую вы можете скомпилировать с помощью компилятора C /GCC (при условии, что имеется реализация asprintf) и настроена на автоматический запуск при запуске системы, что должно отключить регулирование на этих ноутбуках на базе Intel. успешно использовал его на ноутбуке Dell Inspiron 5558 с Xubuntu с правами суперпользователя для программы, с установленным "msrtools" и "modprobe msr" в файле запуска до выполнения программы, чтобы разрешить чтение и запись MSR-регистров со стороны пользователя (для других ОС могут потребоваться другие команды для "const char* cmd" для чтения / записи в ячейку регистра процессора 0x1FC и, вероятно, потребуется доступ root/ привилегированного пользователя к исполняемому файлу любой формы, которая может принять)
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#define BUFSIZE (64)
int get_msr_value(uint64_t* reg_value) {
const char* cmd = "rdmsr -u 0x1FC";
char cmd_buf[BUFSIZE];
FILE* fp;
if ((fp = popen(cmd, "r")) == NULL) {
printf("Error opening pipe!\n");
return -1;
}
cmd_buf[strcspn(fgets(cmd_buf, BUFSIZE, fp), "\n")] = 0;
*reg_value = atoi(cmd_buf);
if (pclose(fp)) {
printf("Command not found or exited with error status\n");
return -1;
}
return 0;
}
int main(void) {
const char* cmd = "wrmsr -a 0x1FC";
char* concat_cmd;
int ret;
uint64_t* reg_value = &(uint64_t){0};
if ((ret = get_msr_value(reg_value))) {
return ret;
}
printf("Old register value: %lu\n", *reg_value);
*reg_value = *reg_value & 0xFFFFFFFE; // clear bit 0
printf("New register value: %lu\n", *reg_value);
if (asprintf(&concat_cmd, "%s %i", cmd, *reg_value) == -1)
return -1;
printf("Executing: %s\n", concat_cmd);
system(concat_cmd);
free(concat_cmd);
return 0;
}
Вот эквивалент приведенного выше кода C в оболочке Bourne:
msr="0x$(sudo rdmsr 0x1FC)"
msr_bd_prochot_disabled="$(printf '0x%x' "$(( ${msr} & 0xFFFFFFFE ))")"
sudo wrmsr 0x1FC "${msr_bd_prochot_disabled}"
echo "Disabled BD PROCHOT; MSR value: ${msr} → ${msr_bd_prochot_disabled}"
Или в однострочном виде:
sudo wrmsr 0x1FC "$(printf '0x%x' "$(( 0x$(sudo rdmsr 0x1FC) & 0xFFFFFFFE ))")"
Чтобы запускать это при каждой загрузке, вы можете добавить это в/etc/rc.local
(безsudo
), или в корневую папку crontab как:
@reboot wrmsr 0x1FC "$(printf '0x%x' "$(( 0x$(sudo rdmsr 0x1FC) & 0xFFFFFFFE ))")"
"Платформа и динамическая платформа Intel Dynamic" - это программа, которая ограничивает частоту работы вашего процессора с нормальной скоростью.
Удаление платформы Intel Dynamic и теплового каркаса должно решить проблему.