Главная » 2017 » Ноябрь » 24 » man 2 spu_create
05:32
man 2 spu_create

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


spu_create - создаёт новый контекст spu



ОБЗОР


#include <sys/types.h>
#include <sys/spu.h>

int spu_create(const char *pathname, int flags, mode_t mode);
int spu_create(const char *pathname, int flags, mode_t mode,
int neighbor_fd);

Замечание: В glibc нет обёрточной функции для данного системного вызова; смотрите ЗАМЕЧАНИЯ.



ОПИСАНИЕ


Системный вызов spu_create() используется на машинах PowerPC с архитектурой Cell Broadband
Engine для получения доступа к Synergistic Processor Unit (SPU). Он создаёт новый логический
контекст для SPU в pathname и возвращает связанный с ним файловый дескриптор. Аргумент
pathname должен указывать на несуществующий каталог в точке монтирования файловой системы
SPU (spufs). Если работа spu_create() выполнена без ошибок, то создаётся каталог pathname, а
в нём создаются файлы, описанные в spufs(7).

После создания контекста, полученный файловый дескриптор может быть передан только
spu_run(2), семейству системных вызовов *at (например, openat(2)) в аргументе dirfd или
закрыт; другие операции не определены. Логический контекст SPU уничтожается (вместе с
файлами, созданными внутри каталога контекста pathname) после освобождения последней ссылки
на контекст; обычно, это происходит после закрытия файлового дескриптора, возвращённого
spu_create().

Аргумент flags может быть равен нулю или содержать любую побитовую комбинацию (посредством
OR) следующих констант:

SPU_CREATE_EVENTS_ENABLED
Вместо использования сигналов для сообщения об ошибках DMA, использовать аргумент
event в spu_run(2).

SPU_CREATE_GANG
Создать блок (gang) SPU вместо контекста (блок — это группа контекстов SPU, которые
близки по функциям и у которых общие параметры планирования — приоритет и политика. В
будущем, планирование блока на включение и выключение может быть реализовано как
единого целое).

В месте, указанном в аргументе pathname, будет создан новый каталог. Этот блок может
использоваться для хранения других контекстов SPU, если указывать путь блока в
последующих вызовах spu_create().

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

Так как контекст не может быть удалён из SPU, у контекстов SPU_CREATE_NOSCHED
отключены некоторые возможности. Не все файлы будут доступны в каталоге этого
контекста в spufs. Также, для контекстов SPU_CREATE_NOSCHED не может быть создан файл
дампа при поломке.

Для создания контекстов SPU_CREATE_NOSCHED требуется мандат CAP_SYS_NICE.

используется в алгоритме планирования SPU. При использовании этого флага требуется,
чтобы файловый дескриптор, ссылающийся на другой контекст SPU, передавался в
аргументе neighbor_fd.

SPU_CREATE_AFFINITY_MEM
Создать контекст со связью с системной памятью. Эта информация о связи используется в
алгоритме планирования SPU.

В аргументе mode (не считая битов umask(2) процесса) задаются права, которые используются
при создании нового каталога в spufs. Полное описание всех значений mode смотрите в stat(2).



ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


При успешном выполнении spu_create() возвращается новый файловый дескриптор; при ошибке
возвращается -1, а в errno содержится один из кодов ошибки, описанных далее.



ОШИБКИ


EACCES Текущий пользователь не имеет прав на запись в точку монтирования spufs(7).

EEXIST Контекст SPU с указанным именем пути уже существует.

EFAULT Значение pathname не является допустимым строковым указателем в адресном пространстве
вызывающего процесса.

EINVAL Значение pathname не является каталогом в точке монтирования spufs(7), или указаны
неправильные флаги.

ELOOP Во время определения pathname встретилось слишком много символьных ссылок.

EMFILE Было достигнуто ограничение по количеству открытых файловых дескрипторов на процесс.

ENAMETOOLONG
Слишком длинное значение аргумента pathname.

ENFILE Достигнуто максимальное количество открытых файлов в системе.

ENODEV Был запрошен изолированный контекст, но аппаратная часть не поддерживает изоляцию
SPU.

ENOENT Невозможно определить часть pathname.

ENOMEM Ядро не может выделить все требуемые ресурсы.

ENOSPC Недостаточно ресурсов SPU для создания нового контекста или достигнуто ограничение на
количество контекстов SPU для пользователя.

ENOSYS Возможность не предоставляется текущей системой, так как или аппаратура не
предоставляет SPU, или не загружен модуль spufs.

ENOTDIR
Часть pathname не является каталогом.

EPERM Указан флаг SPU_CREATE_NOSCHED, но пользователь не имеет мандата CAP_SYS_NICE.



ФАЙЛЫ


Значение pathname должно указываться относительно точки монтирования spufs. По соглашению
всё монтируется в /spu.

заметим, что spu_run() предназначен для работы в библиотеках, которые реализуют более
абстрактный интерфейс к SPU и не должен вызываться из обычных приложений. Рекомендуемые
библиотеки приведены на странице ⟨http://www.bsc.es/projects/deepcomputing/linuxoncell/⟩.



ПРИМЕР


В spu_run(2) дан пример использования spu_create().



СМОТРИТЕ ТАКЖЕ


close(2), spu_run(2), capabilities(7), spufs(7)



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 457 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar