spu_create - создаёт
новый
контекст spu
Standard C library (
libc,
-lc)
#include <sys/spu.h> /* определения констант SPU_* */
#include <sys/syscall.h> /* определения констант SYS_* */
#include <unistd.h>
int syscall(SYS_spu_create, const char *pathname, unsigned int flags,
mode_t mode, int neighbor_fd);
Note: glibc provides no wrapper for
spu_create(), necessitating
the use of
syscall(2).
Системный
вызов
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
- Create an SPU gang instead of a context. (A gang is a group
of SPU contexts that are functionally related to each other and which
share common scheduling parameters—priority and policy. In the
future, gang scheduling may be implemented causing the group to be
switched in and out as a single unit.)
- В месте,
указанном
в
аргументе
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.
On success,
spu_create() returns a new file descriptor. On failure, -1 is
returned, and
errno is set to indicate the error.
- 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.
The
spu_create() system call was added in Linux 2.6.16.
Данный
вызов
существует
только в Linux и
реализован
только для
архитектуры
PowerPC.
Программы,
использующие
данный
вызов, не
переносимы.
spu_create() is meant to be used from libraries that implement a more
abstract interface to SPUs, not to be used from regular applications. See
http://www.bsc.es/projects/deepcomputing/linuxoncell/
for the recommended libraries.
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().
close(2),
spu_run(2),
capabilities(7),
spufs(7)
Русский
перевод
этой
страницы
руководства
был сделан
Alexander Golubev <
[email protected]>, Azamat Hackimov
<
[email protected]>, Hotellook, Nikita
<
[email protected]>, Spiros Georgaras <
[email protected]>, Vladislav
<
[email protected]>, Yuri Kozlov <
[email protected]>
и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]