- bullseye-backports 4.18.1-1~bpo11+1
- testing 4.18.1-1
- unstable 4.18.1-1
SPU_CREATE(2) | Руководство программиста Linux | SPU_CREATE(2) |
ИМЯ¶
spu_create - создаёт новый контекст spu
СИНТАКСИС¶
#include <sys/types.h> #include <sys/spu.h>
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().
В аргументе mode (не считая битов umask(2) процесса) задаются права, которые используются при создании нового каталога в spufs. Полное описание всех значений mode смотрите в stat(2).
The neighbor_fd is used only when the SPU_CREATE_AFFINITY_SPU flag is specified; see below.
Аргумент 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_CREATE_ISOLATE
- Создать изолированный контекст SPU. Изолированные контексты защищены от некоторых операций PPE (PowerPC Processing Element), таких как доступ к локальному хранилищу SPU и регистру NPC.
- Для создания контекста SPU_CREATE_ISOLATE также требуется флаг SPU_CREATE_NOSCHED.
- SPU_CREATE_AFFINITY_SPU (since Linux 2.6.23)
- Создать контекст со связью с другим контекстом SPU. Эта информация о связи используется в алгоритме планирования SPU. При использовании этого флага требуется, чтобы файловый дескриптор, ссылающийся на другой контекст SPU, передавался в аргументе neighbor_fd.
- SPU_CREATE_AFFINITY_MEM (since Linux 2.6.23)
- Создать контекст со связью с системной памятью. Эта информация о связи используется в алгоритме планирования SPU.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении 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
- The SPU_CREATE_NOSCHED flag has been given, but the user does not have the CAP_SYS_NICE capability.
ФАЙЛЫ¶
Значение pathname должно указываться относительно точки монтирования spufs. По соглашению всё монтируется в /spu.
ВЕРСИИ¶
Системный вызов spu_create() был добавлен в ядро Linux версии 2.6.16.
СООТВЕТСТВИЕ СТАНДАРТАМ¶
Данный вызов существует только в Linux и реализован только для архитектуры PowerPC. Программы, использующие данный вызов, не переносимы.
ЗАМЕЧАНИЯ¶
В glibc нет обёртки для этого системного вызова; запускайте его с помощью syscall(2). Однако заметим, что spu_run() предназначен для работы в библиотеках, которые реализуют более абстрактный интерфейс к SPU и не должен вызываться из обычных приложений. Рекомендуемые библиотеки приведены на странице http://www.bsc.es/projects/deepcomputing/linuxoncell/.
Prior to the addition of the SPU_CREATE_AFFINITY_SPU flag in Linux 2.6.23, the spu_create() system call took only three arguments (i.e., there was no neighbor_fd argument).
ПРИМЕРЫ¶
В spu_run(2) дан пример использования spu_create().
СМ. ТАКЖЕ¶
ЗАМЕЧАНИЯ¶
Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.
ПЕРЕВОД¶
Русский перевод этой страницы руководства был сделан Alexander Golubev <fatzer2@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Hotellook, Nikita <zxcvbnm3230@mail.ru>, Spiros Georgaras <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
21 декабря 2020 г. | Linux |