Алехандра Моралес (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, можно познакомиться здесь.

На видео: защита диссертации Алехандры Моралес

Оставить мнение