.\" -*- coding: UTF-8 -*- .\" Copyright (c) International Business Machines Corp., 2006 .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\" .\" HISTORY: .\" 2005-09-28, created by Arnd Bergmann , .\" Mark Nutter and .\" Ulrich Weigand .\" 2006-06-16, revised by Eduardo M. Fleury .\" 2007-07-10, quite a lot of polishing by mtk .\" 2007-09-28, updates for newer kernels by Jeremy Kerr .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH spufs 7 "31 октября 2023 г." "Linux man\-pages 6.06" .SH ИМЯ spufs \- файловая система SPU .SH ОПИСАНИЕ Файловая система SPU используется на машинах PowerPC, на которых реализована Cell Broadband Engine Architecture для доступа к cинергичным процессорным блокам (Synergistic Processor Unit, SPU). .P Файловая система предоставляет пространство имён похожее на общую память POSIX или очереди сообщений. Пользователи, имеющие права на запись в файловую систему, могут использовать вызов \fBspu_create\fP(2) для организации контекстов SPU в корневом каталоге \fBspufs\fP. .P Каждый контекст SPU представлен каталогом с постоянным набором файлов. Эти файлы можно использовать для управления состоянием логического SPU. Пользователи могут изменять права на файлы, но не могут добавлять или удалять файлы. .SS "Параметры монтирования" .TP \fBuid=\fP Назначает пользователя\-владельца точки монтирования; по умолчанию 0 (root). .TP \fBgid=\fP Назначает группу\-владельца точки монтирования; по умолчанию 0 (root). .TP \fBmode=<права>\fP Назначает права на каталог верхнего уровня в \fBspufs\fP, задаётся как строка\-число прав в восьмеричной системе счисления. По умолчанию 0775. .SS Файлы При вызовах \fBread\fP(2) или \fBwrite\fP(2) файлы в \fBspufs\fP, в основном, ведут себя как обычно, но часто поддерживают только ограниченный набор операций. В данном списке перечислены поддерживаемые операции, а отклонения от стандартного поведения описаны в соответствующих справочных страницах. .P Все файлы, поддерживающие операцию \fBread\fP(2), также поддерживают \fBreadv\fP(2), а все файлы, поддерживающие операцию \fBwrite\fP(2), также поддерживают \fBwritev\fP(2). Все файлы поддерживают семейство операций \fBaccess\fP(2) и \fBstat\fP(2), но у последней операции в возвращаемой структуре \fIstat\fP достоверную информацию содержат только поля \fIst_mode\fP, \fIst_nlink\fP, \fIst_uid\fP и \fIst_gid\fP. .P All files support the \fBchmod\fP(2)/ \fBfchmod\fP(2) and \fBchown\fP(2)/ \fBfchown\fP(2) operations, but will not be able to grant permissions that contradict the possible operations (e.g., read access on the \fIwbox\fP file). .P Текущий список файлов: .TP \fI/capabilities\fP Содержит строку мандатов (перечисляемых через запятую) этого контекста SPU. Возможные мандаты: .RS .TP \fBsched\fP Данный контекст может быть запланирован. .TP \fBstep\fP Данный контекст может выполняться в пошаговом режиме, для отладки. .P В будущем могут быть добавлены новые флаги мандатов. .RE .TP \fI/mem\fP Содержимое хранилища локальной памяти SPU. Оно может быть доступно как обычный файл общей памяти и содержит код и данные в адресном пространстве SPU. Возможные операции после открытия файла \fImem\fP: .RS .TP \fBread\fP(2) .TQ \fBpread\fP(2) .TQ \fBwrite\fP(2) .TQ \fBpwrite\fP(2) .TQ \fBlseek\fP(2) Эти операции работают как обычно, за исключением того, что \fBlseek\fP(2), \fBwrite\fP(2) и \fBpwrite\fP(2) не поддерживают доступ за конец файла. Размер файла — это размер локального хранилища SPU, обычно 256 килобайт. .TP \fBmmap\fP(2) Отображает \fImem\fP в адресное пространство процесса, предоставляя доступ к локальному хранилищу SPU внутри адресного пространства процесса. Разрешено только отображение \fBMAP_SHARED\fP. .RE .TP \fI/regs\fP Содержит сохранённые регистры общего назначения контекста SPU. Этот файл содержит 128\-битное значение каждого регистра, начиная с регистра 0 и кончая 127, в этом порядке. Это позволяет просматривать регистры общего назначения при отладке. .IP Для чтения или записи в этот файл требуется, чтобы контекст был запланирован, поэтому использовать этот файл не рекомендуется при нормальной работе программы. .IP Файл \fIregs\fP отсутствует в контекстах, которые были созданы с флагом \fBSPU_CREATE_NOSCHED\fP. .TP \fI/mbox\fP Первый буфер обмена (communication mailbox) SPU\-в\-CPU. Этот файл доступен только для чтения и может быть прочитан по 4 байта за раз. Его можно использовать только в неблокирующем режиме — для блокировки нельзя даже использовать \fBpoll\fP(2). Единственно возможная операция над открытым файлом \fImbox\fP: .RS .TP \fBread\fP(2) Если \fIcount\fP меньше четырёх, то \fBread\fP(2) возвращает \-1 и присваивает \fIerrno\fP значение \fBEINVAL\fP. Если данные в буфере отсутствуют (т. е., SPU не отправлял сообщений), то возвращается значение \-1, а \fIerrno\fP присваивается значение \fBEAGAIN\fP. При успешном чтении данных четыре байта помещаются в буфер данных и возвращается значение 4. .RE .TP \fI/ibox\fP Второй буфер обмена SPU\-в\-CPU. Этот файл подобен первому буферу обмена, но может открываться в блокирующем режиме ввода\-вывода, то есть вызов \fBread\fP(2) с открытым файлом \fIibox\fP заблокирует выполнение до тех пор, пока SPU не запишет данные в свой канал прерываний буфера (если файл не открыт с флагом \fBO_NONBLOCK\fP, смотрите далее). Также можно использовать \fBpoll\fP(2) и подобные системные вызовы для отслеживания наличия данных в буфере. .IP Возможные операции над открытым файлом \fIibox\fP: .RS .TP \fBread\fP(2) Если \fIcount\fP меньше четырёх, то \fBread\fP(2) возвращает \-1 и присваивает \fIerrno\fP значение \fBEINVAL\fP. Если данные в буфере отсутствуют и файловый дескриптор открыт с флагом \fBO_NONBLOCK\fP, то возвращается значение \-1, а \fIerrno\fP присваивается значение \fBEAGAIN\fP. .IP Если в буфере данных нет и файловый дескриптор был открыт без \fBO_NONBLOCK\fP, то вызов блокируется до тех пор, пока SPU не запишет в свой канал прерываний буфера. При успешном чтении данных четыре байта помещаются в буфер данных и возвращается значение 4. .TP \fBpoll\fP(2) Опрос файла \fIibox\fP показывает \fI(POLLIN | POLLRDNORM)\fP есть ли данные для чтения. .RE .TP \fI/wbox\fP Буфер обмена CPU\-в\-SPU. Доступен только для записи, которую можно производить по четыре байта за раз. Если буфер полон, то \fBwrite\fP(2) блокируется; для слежения за возможностью записи можно использовать вызов \fBpoll\fP(2). Возможные операции с открытым файлом \fIwbox\fP: .RS .TP \fBwrite\fP(2) Если \fIcount\fP меньше четырёх, то \fBwrite\fP(2) возвращает \-1 и присваивает \fIerrno\fP значение \fBEINVAL\fP. Если в буфере нет места и файловый дескриптор открыт с флагом \fBO_NONBLOCK\fP, то возвращается значение \-1, а \fIerrno\fP присваивается значение \fBEAGAIN\fP. .IP Если в буфере нет места и файловый дескриптор был открыт без флага \fBO_NONBLOCK\fP, то вызов заблокирует выполнение до тех пор, пока SPU не выполнит чтение из своего буферного канала PPE (PowerPC Processing Element). После успешного чтения данных, системный вызов вернёт значение 4 как результат функции. .TP \fBpoll\fP(2) Опрос файла \fIwbox\fP показывает \fI(POLLOUT | POLLWRNORM)\fP есть ли свободное место для записи. .RE .TP \fI/mbox_stat\fP .TQ \fI/ibox_stat\fP .TQ \fI/wbox_stat\fP These are read\-only files that contain the length of the current queue of each mailbox\[em]that is, how many words can be read from \fImbox\fP or \fIibox\fP or how many words can be written to \fIwbox\fP without blocking. The files can be read only in four\-byte units and return a big\-endian binary integer number. The only possible operation on an open \fI*box_stat\fP file is: .RS .TP \fBread\fP(2) Если \fIcount\fP меньше четырёх, то \fBread\fP(2) возвращает \-1 и присваивает \fIerrno\fP значение \fBEINVAL\fP. В противном случае четырёхбайтное значение помещается в буфер данных. Это значение — количество элементов, которые можно прочитать (для \fImbox_stat\fP и \fIibox_stat\fP) или записать (для \fIwbox_stat\fP) из соответствующего буфера без блокировки, иначе возвращается ошибка \fBEAGAIN\fP. .RE .TP \fI/npc\fP .TQ \fI/decr\fP .TQ \fI/decr_status\fP .TQ \fI/spu_tag_mask\fP .TQ \fI/event_mask\fP .TQ \fI/event_status\fP .TQ \fI/srr0\fP .TQ \fI/lslr\fP Внутренние регистры SPU. В этих файлах содержатся строки ASCII, представляющие значение регистра в виде шестнадцатеричного числа. Для чтения и записи в эти файлы (кроме \fInpc\fP, смотрите далее) требуется, чтобы выполнялся контекст SPU, поэтому частый доступ к этим файлам не рекомендуется при обычной работе программы. .IP Содержимое этих файлов: .RS .TP 16 \fInpc\fP Счётчик следующей команды — доступен только когда SPU в остановленном состоянии. .TP \fIdecr\fP Декрементный счётчик SPU .TP \fIdecr_status\fP Состояние декрементного счётчика .TP \fIspu_tag_mask\fP Маска тега MFC для SPU DMA .TP \fIevent_mask\fP Маска событий прерываний SPU .TP \fIevent_status\fP Количество ожидающих событий SPU (только для чтения) .TP \fIsrr0\fP Регистр адреса возврата из прерывания .TP \fIlslr\fP Ограничительный регистр локального хранилища .RE .IP Возможные операции над этими файлами: .RS .TP \fBread\fP(2) Читает текущее значение регистра. Если значение не вмещается в буфер, переданный в системный вызов \fBread\fP(2), то последующие чтения продолжат чтение из этого же буфера пока не будет достигнут его конец. .IP После прочтения всей строки, все последующие операции чтения будут возвращать ноль байт и для чтения нового значения нужно открыть новый файловый дескриптор. .TP \fBwrite\fP(2) Операция \fBwrite\fP(2) над файлом устанавливает в регистр значение, передаваемое в строке. Строка анализируется от начала до первого не числового символа или до конца буфера. Последующие операции записи в тот же файловый дескриптор перезаписывают предыдущее значение. .IP За исключением файла \fInpc\fP, эти файлы отсутствуют в контекстах, которые были созданы с флагом \fBSPU_CREATE_NOSCHED\fP. .RE .TP \fI/fpcr\fP Данный файл предоставляет доступ к регистру управления и состояния операций с плавающей запятой (fcpr). Это четырёхбайтный файл с двоичным значением регистра. Операции с \fIfpcr\fP: .RS .TP \fBread\fP(2) Если \fIcount\fP меньше четырёх, то \fBread\fP(2) возвращает \-1 и присваивает \fIerrno\fP значение \fBEINVAL\fP. В противном случае четырёхбайтное значение помещается в буфер данных; это текущее значение регистра \fIfpcr\fP. .TP \fBwrite\fP(2) Если \fIcount\fP меньше четырёх, то \fBwrite\fP(2) возвращает \-1 и присваивает \fIerrno\fP значение \fBEINVAL\fP. В противном случае четырёхбайтное значение копируется из буфера данных, обновляя значение регистра \fIfpcr\fP. .RE .TP \fI/signal1\fP .TQ \fI/signal2\fP Эти файлы предоставляют доступ к двум сигнальным каналам уведомления SPU. Они доступны на чтение\-запись четырёхбайтными словами. Запись в один из файлов возбуждает прерывание на SPU. Значение, записанное в сигнальные файлы, можно прочитать из SPU через канал чтения или из пользовательского пространства узла через файл. После чтения SPU этого значения, оно сбрасывается в ноль. Возможные операции с открытым файлом \fIsignal1\fP или \fIsignal2\fP: .RS .TP \fBread\fP(2) Если \fIcount\fP меньше четырёх, то \fBread\fP(2) возвращает \-1 и присваивает \fIerrno\fP значение \fBEINVAL\fP. В противном случае четырёхбайтное значение помещается в буфер данных; это текущее значение указанного сигнального регистра уведомления. .TP \fBwrite\fP(2) Если \fIcount\fP меньше четырёх, то \fBwrite\fP(2) возвращает \-1 и присваивает \fIerrno\fP значение \fBEINVAL\fP. В противном случае четырёхбайтное значение копируется из буфера данных, обновляя значение указанного сигнального регистра уведомления. Данные в сигнальном регистре уведомления или будут перезаписаны входными данными или обновлены с помощью побитной операции ИЛИ, в зависимости от содержимого файла \fIsignal1_type\fP или \fIsignal2_type\fP, соответственно. .RE .TP \fI/signal1_type\fP .TQ \fI/signal2_type\fP Эти файлы изменяют поведение файлов уведомлений \fIsignal1\fP и \fIsignal2\fP. В них содержится число в виде строки ASCII, которое читается как «1» или «0». В режиме 0 (перезапись) аппаратное обеспечение заменяет содержимое сигнального канала данными, которые в него записываются. В режиме 1 (логическое ИЛИ) аппаратное обеспечение складывает биты, которые в него последовательно поступают. Возможные операции с открытым файлом \fIsignal1_type\fP или \fIsignal2_type\fP: .RS .TP \fBread\fP(2) Если счётчик, переданный в вызов \fBread\fP(2), короче требуемой длины для цифры (плюс символ новой строки), последующие чтения из того же файлового дескриптора дополнят строку. После чтения всей строки все последующие операции чтения будут возвращать ноль байт, а для повторного чтения значения нужно открыть новый файловый дескриптор. .TP \fBwrite\fP(2) Операция \fBwrite\fP(2) над файлом устанавливает в регистр значение, передаваемое в строке. Строка анализируется от начала до первого не числового символа или до конца буфера. Последующие операции записи в тот же файловый дескриптор перезаписывают предыдущее значение. .RE .TP \fI/mbox_info\fP .TQ \fI/ibox_info\fP .TQ \fI/wbox_info\fP .TQ \fI/dma_into\fP .TQ \fI/proxydma_info\fP Read\-only files that contain the saved state of the SPU mailboxes and DMA queues. This allows the SPU status to be inspected, mainly for debugging. The \fImbox_info\fP and \fIibox_info\fP files each contain the four\-byte mailbox message that has been written by the SPU. If no message has been written to these mailboxes, then contents of these files is undefined. The \fImbox_stat\fP, \fIibox_stat\fP, and \fIwbox_stat\fP files contain the available message count. .IP Файл \fIwbox_info\fP содержит массив четырёхбайтных сообщений, которые посылались в SPU. В существующих машинах CBEA размер массива равен четырём элементам, поэтому 4 * 4 = 16 байт можно прочитать из этого файла. Если какой\-то элемент очереди пуст, то содержимое прочитанных байтов из этого положения не определено. .IP Файл \fIdma_info\fP содержит данные очереди SPU MFC DMA, которые представлены следующей структурой: .IP .in +4n .EX struct spu_dma_info { uint64_t dma_info_type; uint64_t dma_info_mask; uint64_t dma_info_status; uint64_t dma_info_stall_and_notify; uint64_t dma_info_atomic_command_status; struct mfc_cq_sr dma_info_command_data[16]; }; .EE .in .IP Последний элемент структуры — действующая очередь DMA, содержащая 16 элементов. Структура \fImfc_cq_sr\fP определена следующим образом: .IP .in +4n .EX struct mfc_cq_sr { uint64_t mfc_cq_data0_RW; uint64_t mfc_cq_data1_RW; uint64_t mfc_cq_data2_RW; uint64_t mfc_cq_data3_RW; }; .EE .in .IP В файле \fIproxydma_info\fP содержится подобная информация, но она описывает очередь прокси\-DMA (т. е., DMA, инициируемые элементами вне SPU). Файл имеет следующий формат: .IP .in +4n .EX struct spu_proxydma_info { uint64_t proxydma_info_type; uint64_t proxydma_info_mask; uint64_t proxydma_info_status; struct mfc_cq_sr proxydma_info_command_data[8]; }; .EE .in .IP Для доступа к этим файлам требуется, чтобы выполнялся контекст SPU, частое использование может быть неэффективным. Эти файлы не должны использоваться в обычной работе. .IP Эти файлы отсутствуют в контекстах, которые были созданы с флагом \fBSPU_CREATE_NOSCHED\fP. .TP \fI/cntl\fP Данный файл предоставляет доступ к регистрам управления работой SPU (Run Control) и состояния SPU, содержит строки ASCII. Поддерживаются следующие операции: .RS .TP \fBread\fP(2) При попытке чтения файла \fIcntl\fP возвращается строка ASCII, представляющая содержимое регистра состояния SPU в виде шестнадцатеричного значения. .TP \fBwrite\fP(2) Запись в файл \fIcntl\fP изменяет значение контекстного регистра управления работой SPU. .RE .TP \fI/mfc\fP Предоставляет доступ к Memory Flow Controller, находящийся в SPU. При чтении из файла возвращается содержимое регистра SPU MFC Tag Status, а при записи в файл запускается DMA из MFC. Поддерживаются следующие операции: .RS .TP \fBwrite\fP(2) Для записи в файл данные должны быть в формате команды MFC DMA: .IP .in +4n .EX struct mfc_dma_command { int32_t pad; /* зарезервировано */ uint32_t lsa; /* адрес локального хранилища */ uint64_t ea; /* эффективный адрес */ uint16_t size; /* размер передачи */ uint16_t tag; /* тег команды */ uint16_t class; /* ID класса */ uint16_t cmd; /* opcode команды */ }; .EE .in .IP Данные записи должны иметь размер ровно \fIsizeof(struct mfc_dma_command)\fP байт. Команда будет послана в очередь прокси MFC SPU, а тег сохранён в ядре (смотрите далее). .TP \fBread\fP(2) Читает содержимое регистра состояния тега. Если файл открыт в блокирующем режиме (т. е., без \fBO_NONBLOCK\fP), то чтение заблокирует выполнение до тех пор, пока не выполнится тег DMA (который задан предыдущей записью). В неблокирующем режиме сразу же возвращается регистр состояния тега MFC. .TP \fBpoll\fP(2) Вызов \fBpoll\fP(2) с файлом \fImfc\fP заблокирует выполнение до тех пор, пока не будет запущен новый DMA (проверяется по \fBPOLLOUT\fP) или пока не будет завершён уже выполняющийся DMA (проверяется по \fBPOLLIN\fP). .IP \fI/mss\fP Предоставляет доступ к свойству MFC MultiSource Synchronization (MSS). При выполнении \fBmmap\fP(2) процесс может получить доступ к области MSS из SPU. .IP Поддерживаются следующие операции: .TP \fBmmap\fP(2) Отображает \fImss\fP в адресное пространство процесса, предоставляя доступ к области MSS SPU внутри адресного пространства процесса. Разрешено только отображение \fBMAP_SHARED\fP. .RE .TP \fI/psmap\fP Предоставляет доступ к полному отображению проблемного состояния (problem\-state mapping) SPU. В приложениях эту область можно использовать для обмена с SPU вместо записи в отдельные регистровые файлы \fBspufs\fP. .IP Поддерживаются следующие операции: .RS .TP \fBmmap\fP(2) Отображение \fBpsmap\fP предоставляет процессу прямое отображение к области проблемного состояния SPU. Поддерживаются только отображения \fBMAP_SHARED\fP. .RE .TP \fI/phys\-id\fP Доступный только для чтения файл содержит номер физического SPU, на котором выполняется контекст SPU. Когда контекст не выполняется этот файл содержит строку «\-1». .IP Номер физического SPU описывается строкой ASCII числом в шестнадцатеричной системе счисления. .TP \fI/object\-id\fP Позволяет приложениям хранить (или получать) одиночный 64\-битный ID в контекст. Позднее данный ID используется инструментами профилирования как уникальный идентификатор контекста. .RS .TP \fBwrite\fP(2) Записью строки ASCII с шестнадцатеричным числом приложение может назначать ID объекта контекста SPU. Любое предыдущее значение объекта ID перезаписывается. .TP \fBread\fP(2) При чтении из файла возвращается строка ASCII с шестнадцатеричным числом, представляющим ID объекта этого контекста SPU. .RE .SH ПРИМЕРЫ To automatically \fBmount\fP(8) the SPU filesystem when booting, at the location \fI/spu\fP chosen by the user, put this line into the \fBfstab\fP(5) configuration file: .EX none /spu spufs gid=spu 0 0 .EE .\" .SH AUTHORS .\" Arnd Bergmann , Mark Nutter , .\" Ulrich Weigand , Jeremy Kerr .SH "СМ. ТАКЖЕ" \fBclose\fP(2), \fBspu_create\fP(2), \fBspu_run\fP(2), \fBcapabilities\fP(7) .P \fIThe Cell Broadband Engine Architecture (CBEA) specification\fP .PP .SH ПЕРЕВОД Русский перевод этой страницы руководства был сделан Alexander Golubev , Azamat Hackimov , Hotellook, Nikita , Spiros Georgaras , Vladislav , Yuri Kozlov и Иван Павлов . .PP Этот перевод является бесплатной документацией; прочитайте .UR https://www.gnu.org/licenses/gpl-3.0.html Стандартную общественную лицензию GNU версии 3 .UE или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. .PP Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на .MT man-pages-ru-talks@lists.sourceforge.net .ME .