Man spufs (7) файлова система SPU

Файлова система надає простір імен, схожих на загальну пам'ять POSIX або черги повідомлень. Користувачі, які мають право на запис у файлову систему, можуть використовувати викликspu_create(2) для організації контекстів SPU у кореневому каталозіspufs.

Кожен контекст SPU представлений каталогом із постійним набором файлів. Ці файли можна використовуватиме керування станом логічного SPU. Користувачі можуть змінювати права на файли, але не можуть додавати чи видаляти файли.

Параметри монтування

Усі файли, що підтримують операціюread(2), також підтримуютьreadv(2), а всі файли, що підтримують операціюwrite(2), також підтримуютьwritev(2). Всі файли підтримують сімейство операційaccess(2) іstat(2), але в останній операції в структурі, що повертаєтьсяstatдостовірну інформацію містять тільки поляst_mode,st_nlink,st_uidтаst_gid.

Всі файли підтримують операціїchmod(2)/fchmod(2) таchown(2)/fchown(2), але вони не можуть надати права, які суперечать можливим операціям (наприклад, можливість читання файлуwbox).

Поточний список файлів:

/capabilitiesМістить рядок мандатів (перерахованих через кому) цього контексту SPU. Можливі мандати:schedЦей контекст може бути запланований.stepЦей контекст може виконуватися в покроковому режимі для налагодження.

У майбутньому можна додати нові прапори мандатів.

Для читання або запису в файл потрібно, щоб контекст був запланований, тому використовувати цей файл не рекомендується при нормальній роботі програми.

Файлregsвідсутній у контекстах, створених з прапоромSPU_CREATE_NOSCHED.

Можливі операції над відкритим файломibox:

read(2) Якщоcountменше чотирьох, тоread(2) повертає -1 і надаєerrnoзначенняEINVAL. Якщо даних у буфері відсутні і файловий дескриптор відкритий з прапоромO_NONBLOCK, то повертається значення -1, аerrnoприсвоюється значенняEAGAIN.

Якщо буфер даних немає і файловий дескриптор був відкритий безO_NONBLOCK, то виклик блокується до тих пір, поки SPU не запише в свій канал переривань буфера. При успішному читанні даних чотири байти поміщаються в буфер даних та повертається значення 4.

poll(2) Опитування файлуiboxпоказує(POLLIN POLLRDNORM)чи є дані для читання./wboxБуфер обміну CPU-в-SPU. Доступний тільки для запису, який можна робити по чотири байти за раз. Якщо буфер повний, то write (2) блокується; для стеження за можливістю запису можна використовувати викликpoll(2). Можливі операції з відкритим файломwbox:write(2) Якщоcountменше чотирьох, тоwrite(2) повертає -1 і надаєerrnoзначенняEINVAL. Якщо в буфері немає місця і файловий дескриптор відкритий з прапоромO_NONBLOCK, то повертається значення -1, аerrnoнадається значенняEAGAIN.

Якщо в буфері немає місця і файловий дескриптор був відкритий без прапораO_NONBLOCK, то виклик заблокує виконання, доки SPU не виконає читання зі свого буферного каналу PPE (PowerPC Processing Element). Після успішного читання даних системний виклик поверне значення 4 як результат функції.

Після прочитання всього рядка всі наступні операції читання повертатимуть нуль байт і для читання нового значення потрібно відкрити новийфайловий дескриптор.

write(2) Операціяwrite(2) над файлом встановлює в регістр значення, що передається в рядку. Рядок аналізується від початку до першого не числового символу або до кінця буфера. Наступні операції запису на той же файловий дескриптор перезаписують попереднє значення.

За винятком файлуnpc, ці файли відсутні в контекстах, створених з прапоромSPU_CREATE_NOSCHED.

/fpcrЦей файл надає доступ до регістру управління та стану операцій з плаваючою комою (fcpr). Це чотирибайтний файл із двійковим значенням регістру. Операції зfpcr:read(2) Якщоcountменше чотирьох, тоread(2) повертає -1 і присвоюєerrnoзначенняEINVAL. В іншому випадку чотирибайтне значення міститься в буфер даних; це поточне значення регістраfpcr.write(2) Якщоcountменше чотирьох, тоwrite(2) повертає -1 і надаєerrnoзначенняEINVAL. В іншому випадку, чотирибайтне значення копіюється з буфера даних, оновлюючи значення регістраfpcr./signal1,/signal2Ці файли надають доступ до двох сигнальних каналів сповіщення SPU. Вони доступні для читання-запис чотирибайтними словами. Запис в один із файлів збуджує переривання на SPU. Значення, записане в сигнальні файли, можна прочитати із SPU через канал читання або з простору користувача вузла через файл. Після читання SPU цього значення воно скидається в нуль. Можливі операції з відкритим файломsignal1абоsignal2:read(2) Якщоcountменше чотирьох, тоread(2) повертає -1 і надаєerrnoзначенняEINVAL. В іншому випадку чотирибайтне значення міститься в буферданих; це поточне значення вказаного сигнального регістра повідомлення.write(2) Якщоcountменше чотирьох, тоwrite(2) повертає -1 і надаєerrnoзначенняEINVAL. В іншому випадку, чотирибайтне значення копіюється з буфера даних, оновлюючи значення вказаного сигнального регістра повідомлення. Дані в сигнальному регістрі повідомлення або будуть перезаписані вхідними даними або оновлені за допомогою побітової операції АБО, залежно від вмістуsignal1_typeабоsignal2_type, відповідно./signal1_type,/signal2_typeЦі файли змінюють поведінку файлів сповіщеньsignal1таsignal2. Вони містяться у вигляді рядка ASCII, яке читається як «1» чи «0». У режимі 0 (перезапис) апаратне забезпечення замінює вміст сигнального каналу даними, які записуються. У режимі 1 (логічне АБО) апаратне забезпечення складає біти, які в нього послідовно надходять. Можливі операції з відкритим файломsignal1_typeабоsignal2_type:read(2) Якщо лічильник, переданий у викликread(2), коротше необхідної довжини для цифри (плюс символ нового рядка), наступні читання з файлового дескриптора доповнять рядок. Після прочитання всього рядка всі наступні операції читання повертатимуть нуль байт, а для повторного читання значення потрібно відкрити новий файловий дескриптор.write(2) Операціяwrite(2) над файлом встановлює в регістр значення, що передається в рядку. Рядок аналізується від початку до першого не числового символу або до кінця буфера. Наступні операції запису на той же файловий дескриптор перезаписують попереднє значення./mbox_info,/ibox_info,/wbox_info,/dma_into,/proxydma_infoЦі файли, доступні лише для читання, містять збережений стан буферів обміну SPU та черг DMA. Це дозволяє переглядати стан SPU, корисно при налагодженні. Файлиmbox_infoтаibox_infoмістять чотирибайтне повідомлення, записане SPU. Якщо повідомлення не було записано в ці буфери обміну, вміст цих файлів не визначено. Файлиmbox_stat,ibox_statтаwbox_statмістять лічильник доступних повідомлень.

Файлdma_infoмістить дані черги SPU MFC DMA, які представлені такою структурою:

Останній елемент структури - діюча черга DMA, що містить 16 елементів. Структураmfc_cq_srвизначена таким чином:

У файліproxydma_infoміститься подібна інформація, але вона описує чергу проксі-DMA (тобто DMA, ініційовані елементами поза SPU). Файл має наступний формат:

Для доступу до цих файлів потрібно, щоб виконувався контекст SPU, часте використання може бути неефективним. Ці файли не повинні використовуватись у звичайній роботі.

Ці файли відсутні в контекстах, створених з прапоромSPU_CREATE_NOSCHED.

/cntlДаний файл надає доступ до регістрів управління роботою SPU (Run Control) та стану SPU, містить рядки ASCII. Підтримуються такі операції:read(2) При спробі читання файлуcntlповертається рядок ASCII, що представляє вміст регістру стану SPU у вигляді шістнадцяткового значення.write(2) Запис у файлcntlзмінює значення контекстного регістру управління роботою SPU./mfcНадає доступ до Memory Flow Controller, що знаходиться в SPU. При читанні з файлу повертається вміст регістру SPU MFC Tag Status, а при записі файл запускається DMA зMFC. Підтримуються такі операції:write(2) Для запису файлу дані повинні бути у форматі команди MFC DMA:

Дані записи повинні мати розмір рівноsizeof(struct mfc_dma_command)байт. Команда буде надіслана в чергу проксі MFC SPU, а тег збережений в ядрі (див. далі).

read(2) Читає вміст регістру стану тега. Якщо файл відкритий у блокувальному режимі (тобто, безO_NONBLOCK), то читання заблокує виконання доти, доки виконається тег DMA (який заданий попереднім записом). У неблокуючому режимі відразу повертається регістр стану тега MFC.poll(2) Викликpoll(2) з файломmfcзаблокує виконання до тих пір, поки не буде запущено новий DMA (перевіряється поPOLLOUT) або поки не буде завершено вже виконуваний DMA (перевіряється поPOLLIN).

/mssНадає доступ до MFC MultiSource Synchronization (MSS). При виконанніmmap(2) процес може отримати доступ до області MSS із SPU.

Підтримуються такі операції:

Підтримуються такі операції:

mmap(2) Відображенняpsmapнадає процесу пряме відображення до області проблемного стану SPU. Підтримуються лише відображенняMAP_SHARED./phys-idДоступний лише для читання файл містить номер фізичного SPU, на якому виконується контекст SPU. Коли контекст не виконується, цей файл містить рядок «-1».

Номер фізичного SPU описується рядком ASCII числом у шістнадцятковій системі числення.

/object-idДозволяє додаткам зберігати (або отримувати) одиночний 64-бітний ID у контекст. Пізніше цей ID використовується інструментами профілювання як унікальний ідентифікатор контексту.write(2) Записом рядка ASCIIз шістнадцятковим числом програма може призначати ID об'єкта контексту SPU. Будь-яке попереднє значення об'єкта ID перезаписується.read(2) При читанні з файлу повертається рядок ASCII з шістнадцятковим числом, що представляє ID об'єкта цього контексту SPU.