Модуль Cryogenic для ядра Linux снижает энергопотребление
- суббота, 22 марта 2014 г. в 03:10:32
Алехандра Моралес (Alejandra Morales) в списке рассылки для разработчиков ядра Linux показала модуль Cryogenic, который позволяет значительно уменьшить потребление энергии за счет кластеризации операций ввода-вывода среди многих приложений, которые обращаются к одному и тому же аппаратному устройству.
Для достижения такой цели Cryogenic предоставляет программные интерфейсы для согласования графика совместных действий при обращении к SCSI-накопителю или сетевому устройству в те моменты, когда это наиболее выгодно для энергопотребления.
Получив информацию через API, модуль откладывает (или ожидает) исполнение несрочных задач. Когда поступает срочное задание и нужно разбудить устройство, то вслед за ним исполняются и несрочные задачи. Если все обращения идут кластером одно за другим, то периоды простоя устройства увеличиваются.
Программные интерфейсы позволяют разработчику приложения устанавливать минимальный и максимальный лимит на время ожидания операции, по истечении которой та превращается в срочную. То есть можно выбрать уровень, насколько мы готовы жертвовать производительностью ради экономии энергии.
Например, в упрощенной версии, UDP-клиент периодически присылает такие запросы:
1 main()
2 {
3 sock_fd = create_socket();
4 while() {
5 send(sock_fd);
6 sleep(period);
7 }
8 close(sock_fd)
9 }
Если он хочет использовать Cryogenic API, то должен модифицировать алгоритм следующим образом:
1 main()
2 {
3 sock_fd = create_socket();
4 fd = open("/dev/cryogenic/wlan0");
5 while() {
6 times = calculate_delay_timeout(period);
7 ioctl(fd, times);
8 select(fd);
9 send(sock_fd);
10 }
11 close(fd);
12 close(sock_fd);
13 }
Подробнее с магистерской диссертацией, которая легла в основу Cryogenic, можно познакомиться здесь.
На видео: защита диссертации Алехандры Моралес