Системные требования и лимиты

Сколько процессов, файлов и т.д. может поддерживать система

Статья включает:

Понятие системных лимитов
Конфигурационные лимиты
Общесистемные требования и лимиты
Файловые дескрипторы
Примитивы для синхронизации
Лимиты для протокола TCP/IP
Очереди сообщений
Разделяемая память
Ограничения, связанные с платформой
Лимиты файловых систем
Запрос лимитов файловой системы
Файловая система QNX4 (fs-qnx4.so)
Файловая система Power-Safe (fs-qnx6.so)
Файловая система Ext2 (fs-ext2.so)
Файловая система DOS FAT12/16/32 (fs-dos.so)
Файловая система CD-ROM ISO 9660 (fs-cd.so)
Файловая система NFS2 и NFS3 (fs-nfs2, fs-nfs3)
Файловая система CIFS (fs-cifs)
Встраиваемая файловая система
Встраиваемая транзакционная файловая система Embedded Transaction filesystem (ETFS, fs-etfs-ram)
Файловая система UDF (fs-udf.so)
Apple Macintosh HFS и HFS Plus (fs-mac.so)
Файловая система Windows NT (fs-nt.so)

Понятие системных лимитов

ЗОСРВ «Нейтрино» основана на микроядре, поэтому те ограничения, которые в других операционных системах были бы связаны с ядром, в данном случае будут зависеть только от того или иного менеджера ресурсов, реализующего соответствующую службу в ЗОСРВ «Нейтрино». Особенно это относится к файловым системам и тем случаям, когда одновременно используются несколько разных файловых систем.

Многие ресурсы зависят от объема доступной памяти. Другие лимиты зависят от целевой системы. Например, виртуальное адресное пространство для процесса при исполнении в 32-разрядном режиме работы ядра может составлять от 32 Мбайт на архитектуре ARM до 3,5 Гбайт на архитектуре x86. В 64-разрядном режиме работы ядра эти значения существенно увеличиваются.

Некоторые ограничения появляются в результате комплексного взаимодействия нескольких факторов. Если просто привести простые и очевидные значения граничных параметров без указания их взаимодействий, то это может ввести в заблуждение. Описание же всех взаимодействий может быть запутанным. Ключевым моментом, который нужно иметь в виду при чтении данного раздела, является то, что с конкретным ограничением может быть связано много дополнительных факторов.

Конфигурационные лимиты

Когда вы пытаетесь выяснить ограничения для системы, то нужно рассмотреть конфигурационные лимиты (configurable limit) — специальные переменные с атрибутами "только чтение", в которых сохраняется системная информация.


Note: В ЗОСРВ «Нейтрино» поддерживаются также конфигурационные строки (configu­rable string), которые похожи на переменные окружения и часто используются совместно с ними. Подробнее об этом см. раздел Настройка параметров окружения и оболочки.

Получить значения конфигурационных лимитов или строк можно с помощью утилиты getconf (POSIX). Поскольку утилита getconf относится к интерфейсу POSIX, то ее можно использовать в сценариях вместо жестко запрограммированных в ЗОСРВ «Нейтрино» значений лимитов, что позволяет адаптировать сценарии к другим конфигурационным параметрам POSIX. Некоторые конфигурационные лимиты связаны с путями. Их имена начинаются с префикса "_PC_". Когда вы запрашиваете значения этих параметров, то при запросе должен быть указан путь (см. подраздел "Лимиты файловой системы" далее). Например, для получения максимальной длины для имени файла нужно ввести:

getconf _PC_NAME_MAX имя_для_пути

Другие ограничения связаны с системой в целом. Имена этих параметров начинаются с "_SC_", и при их извлечении указание пути не требуется. Например, для получения максимального числа файлов, которые может открывать процесс, нужно ввести команду:

getconf _SC_OPEN_MAX

Вообще говоря, значения конфигурационных лимитов вы изменять не можете. Они называются "конфигурируемыми", потому что их значения могут изменяться системой. В библиотеках ЗОСРВ «Нейтрино» имеется несколько различных функций, которые можно использовать в программах для работы со значениями конфигурационных лимитов, связанных с конфигурацией:

pathconf()
предоставляются значения конфигурационных лимитов, имеющих отношение к пути;
sysconf()
предоставляются значения конфигурационных лимитов общесистемного уровня;
setrlimit()
производится изменение значений некоторых конфигурационных лимитов. Например, эта функция может использоваться для ограничения числа файлов, которые разрешается открывать процессу, но при этом данная величина зависит также от значения, указанного в ключе -F ядра операционной системы procnto.

Общесистемные требования и лимиты

Приведенные далее лимиты относятся ко всей системе в целом (по группам системных объектов):

Процессы
Максимум действующих одновременно – 4095, за исключением: В платформе ARM лимит установлен практически на количество разделенных адресных пространств; можно запустить больше процессов, если они будут происходить в разделенном адресном пространстве, благодаря vfork(), но это исключительный случай.
Пространство имен (префиксы менеджеров ресурсов и т.д.)
Ограничено имеющейся памятью;
Сеансы и группы процессов
4095 (потому что на каждый сеанс или группу необходим, по крайней мере, один процесс);
Физическое адресное пространство
Ограничения отсутствуют за исключением тех, что накладываются оборудованием (см. документацию по используемой элементной базе).

Ассоциированные с процессом лимиты:

Файловые дескрипторы

Полное число файловых дескрипторов жестко ограничено значением 32 767 для каждого процесса, но, скорее всего, ограничение будет задано с помощью ключа -F ядра операционной системы procnto или системной переменной RLIMIT_NOFILE. Значение по умолчанию равно 1000, минимальное значение равно 100.


Note: Имейте в виду, что файловые дескрипторы используются сокетами, именованными семафорами, очередями сообщений, идентификаторами соединений (coids).

Для того чтобы получить установленное в текущий момент времени значение для этого параметра, используйте встроенную команду ulimit или вызовите библиотечную процедуру getrlimit().

Примитивы для синхронизации

Не существует никаких ограничений на количество мьютексов (mutex) и переменных для условий (condvars). Нет также ограничений на количество непоименованных семафоров, но количество именованных семафоров ограничивается числом доступных дескрипторов (см. подраздел "Файловые дескрипторы" далее в этой статье).

Лимиты для протокола TCP/IP

Число открытых соединений и сокетов ограничивается только доступной памятью и максимальным числом файловых дескрипторов на каждый процесс (см. подраздел "Файловые дескрипторы" далее в этой статье).

Очереди сообщений

Число областей разделяемой памяти ограничено разрешенным виртуальным адресным пространством, которое зависит от архитектуры целевой системы. См. описание ресурсных переменных RLIMIT_AS и RLIMIT_DATA для библиотечной процедуры setrlimit() в руководстве по библиотекам справочной системы комплекта разработчика ЗОСРВ «Нейтрино».

Разделяемая память

Количество очередей сообщений ограничено числом доступных файловых дескрипторов (см. подраздел "Файловые дескрипторы" далее в этой статье).

Установленное по умолчанию максимальное число записей в очереди и установленный по умолчанию максимальный размер записи для очереди зависит от того, используете вы для реализации очереди традиционный подход ( mqueue) или альтернативный ( mq).

Атрибут Традиционный подход Альтернативный подход
Число записей 1024 64
Размер сообщения 4096 256

Более подробно об этом см. описание команд mqueue и mq и описание функции mq_open().

Ограничения, связанные с платформой

Предельные значения

Архитектура Режим работы ядра ОС ЦПУ¹ Размер ОЗУ Виртуальное адресное пространство²
x86 32-разрядный 32 64 Gb (36-битовая адресация) 3,5 Gb
PPC 32-разрядный 8 64 Gb (36-битовая адресация) 3 Gb
MIPS 32-разрядный 8 1 Tb (40-битовая адресация) 2 Gb
ARMv6 32-разрядный 1 512 Mb (32-битовая адресация)³ 2 Gb
ARMv7 32-разрядный 16 4 Gb (32-битовая адресация)³ 2 Gb
Aarch64 64-разрядный 32 256 Tb (48-битовая адресация) 512 Gb
E2K 64-разрядный 32 1 Tb (40-битовая адресация) 512 Gb


Note: ¹ – применяемое оборудование может определять дополнительные лимиты на количество ЦПУ.

² — приведены абсолютные максимальные лимиты для виртуального адресного пространства. Эти значения можно уменьшить, изменив параметр RLIMIT_AS с помощью функции setrlimit().

³ – 32-битная адресация устанавливает 4 Гб пространства данных, но оно не может быть все использовано для RAM системы на некоторых платформах. Некоторое количество пространства данных зарезервировано для устройств, и некоторые платформы могут накладывать ограничения.


Минимальные системные требования

Для успешного выполнения встраиваемой конфигурации:

Архитектура Размер ОЗУ Размер ПЗУ для хранения загрузочного образа ОС
x86 32 Mb 6 Mb
PPC 16 Mb 8 Mb
MIPS 8 Mb 4 Mb
ARMv6 8 Mb 4 Mb
ARMv7 8 Mb 4 Mb
Aarch64 64 Mb 6 Mb
E2K 256 Mb 16 Mb

Для возможности использовать инсталлятор:

Архитектура Размер ОЗУ Размер ОЗУ для Live DVD Место на носителе для системных файлов
x86 32 Mb 80 Mb 450 Mb (только базовые компоненты) / 800 Mb (полная установка)
E2K 256 Mb 256 Mb 850 Mb (только базовые компоненты) / 1650 Mb (полная установка)

Лимиты файловых систем

Файловые системы в ЗОСРВ «Нейтрино» не являются частью ядра или базовых компонентов операционной системы. Файловые системы представляют собой отдельно загружаемые процессы или библиотеки. Под этим понимается следующее:

В последующих разделах будут приведены ограничения для поддерживаемых файловых систем. Имейте в виду следующее:

Запрос лимитов файловой системы

Вы можете узнать конфигурационные лимиты, имеющие отношение к путевому имени, чтобы выяснить свойства и лимиты, присущие конкретной файловой системе. Далее приводятся обозначения и описание переменных, задающих лимиты:

_PC_LINK_MAX
максимальное количество ссылок на файл;
_PC_MAX_CANON
максимальное число байтов для канонического буфера вода терминала (отформатированная строка в буфере редактирования);
_PC_MAX_INPUT
максимальное число байтов для входного буфера необработанных данных терминала;
_PC_NAME_MAX
максимальное число байтов в имени файла (исключая завершающий символ null);
_PC_PATH_MAX
максимальное число байтов в пути (исключая завершающий символ null);
_PC_PIPE_BUF
максимальное число байтов, которое может быть записано атомарно в канальный буфер pipe;
_PC_CHOWN_RESTRICTED
если константа определена (не равна -1), то это означает, что использование функции chown() ограничено процессами с соответствующими привилегиями и изменениями группового ID файла на эффективный групповой ID процесса или на один из его дополнительных групповых ID;
_PC_NO_TRUNC
если константа определена (не равна -1), то это означает, что при использовании компонентов имени для пути длиннее, чем значение, заданное константой _PC_NAME_MAX, приведет к сообщению об ошибке;
_PC_VDISABLE
если константа определена (не равна -1), то ее значение соответствует специальному символу, который может использоваться для индивидуального отключения специальных управляющих символов в структуре struct termios.

Дополнительная информация приведена в разделе "Конфигурационные лимиты" ранее в этой статье.

Файловая система QNX4 (fs-qnx4.so)

Далее приведены лимиты для файловых систем QNX4:

длина имени файла
48 или 505 байт, если перед монтированием существует файл .longfilenames (подробнее об этом см. в описании файловой системы QNX4 в подразделе Имена файлов);
длина имени для пути
1024 байта;
размер файла
2 Гбайт минус 1 байт);
размер каталога
не существует никакого практического ограничения, хотя файлы, которые используются для управления содержимым каталога, имеют указанное стандартное ограничение на длину 2 Гбайт минус 1 байт, что соответствует возможности разместить в одном каталоге приблизительно 33 млн файлов. Вы вряд ли захотите иметь такое количество файлов в каталоге, потому что сканирование каталога происходит линейно, и большое число файлов сильно замедляет работу;
размер файловой системы
2 Гбайт * 512; ограничение накладывается драйвером диска;
размер диска
2⁶⁴ байт; ограничение накладывается драйвером диска.

Файловая система Power-Safe (fs-qnx6.so)

Лимиты для файловой системы Power-Safe:

физический сектор диска
32-бита (2 Тб), используется devb API.
логический блок файловой системы
512, 1024, 2048 или 4096 (устанавливается при начальной компоновке файловой системы).
максимальная длина имени файла
510 байт (UTF-8). Если имя файла в длину меньше 28 байт, оно сохраняется в записях каталога; если имя длиннее, оно сохраняется во внешнем файле, а записи каталога ссылаются на него.
максимальный размер файла
64-битная адресация. С размером блока 1Kб (по умолчанию), можно установить 256 блоковых указателей на блок, таким образом, что файл 16 × 256 × 1 Kб (4 Mб) запрашивает 1 уровень непрямых указателей. Если файл больше, то потребуется два уровня (т.е. 16 блоков 256 указателей блоков, содержащих другие 256 указателей на блоки), что дает максимальный размер файла 1 Гб. Для трех уровней непрямых указателей максимальный размер файла будет 256 Гб. При размере блока 2 Кб, каждый блок поддерживает 512 указателей и соответственное масштабирование.

Файловая система Ext2 (fs-ext2.so)

Далее приведены лимиты для файловых систем Linux Ext2:

длина имени файла
255 байт;
длина имени для пути
1024 байт;
размер файла
2 Гбайт минус 1 байт;
размер каталога
2 Гбайт минус 1; каталоги представляют собой файлы, в которых в качестве данных содержатся индексные дескрипторы и информация об именах файлов;
размер файловой системы
2 Гбайт * 512;
размер диска
2⁶⁴ байт; ограничение накладывается драйвером диска.

Файловая система DOS FAT12/16/32 (fs-dos.so)

Далее приведены лимиты для файловых систем DOS FAT12/16/32:

длина имени файла
255 байт;
длина имени для пути
260 байт;
размер файла
4 Гбайт минус 1; используется файловая система с 32-бито­вым форматом;
размер каталога
зависит от типа файловой системы:
размер файловой системы – зависит от формата FAT:
размер диска
ограничен дисковым драйвером и файлом io-blk.

В перечисленных файловых системах не поддерживается установка прав доступа к файлам, но эту функцию можно эмулировать.

Файловая система CD-ROM ISO 9660 (fs-cd.so)

Далее приведены лимиты для файловых систем CD-ROM (ISO 9660):

длина имени файла
32 байта для базового стандарта ISO 9660, 128 байт для стандарта Joliet, 255 байт для стандарта Rockridge;
длина имени для пути
1024 байта;
размер диска
в файловой системе используется 32-битовый формат (максимальный размер 2 Гбайт минус 1). Не разрешается создание чего-либо через использование файла fs-cd.so, он имеет атрибут "только чтение". Любые ограничения могут накладываться инструментам для создания образа (которые, надо надеяться, относятся к подмножеству стандарта ISO 9660). Размер диска также ограничен дисковым драйвером и файлом io-blk.


Note: Взамен fs-cd.so лучше использовать драйвер fs-udf.so, поддерживающий файловую систему ISO-9660 в дополнение к UDF. Дополнительную информацию о лимитах UDF, см. в подразделе "Файловая система UDF" далее.

Файловая система NFS2 и NFS3 (fs-nfs2, fs-nfs3)

Далее приведены лимиты для файловых систем NFS2 и NFS3:

длина имени файла
255 байт;
длина имени для пути
1024 байта;
размер файла
2 Гбайт минус 1; ограничение для 32-битовых файловых систем;
размер каталога, размер файловой системы и размер диска
зависит от сервера; ограничение для 32-битовых файловых систем.

Файловая система CIFS (fs-cifs)

Далее приведены лимиты для файловых систем CIFS:

длина имени файла
255 байт;
длина имени для пути
1024 байта;
размер файла
2 Гбайт минус 1; ограничение для 32-битовых файловых систем;
размер каталога, размер файловой системы и размер диска
ограничение для 32-битовых файловых систем.

Файловая система CIFS не поддерживает использование функций chmod или chown.

Встраиваемая файловая система

Далее приведены лимиты для встраиваемых файловых систем (для флэш-памяти):

длина имени файла
255 байт;
длина имени для пути
1024 байта;
размер файла, размер файловой системы и размер диска
2 Гбайт минус 1;
размер каталога
ограничивается доступным пространством.

Записи для файлов, каталогов и файловых экстентов представляют собой связанные списки. Чем длиннее список, тем больше времени требуется для поиска места, где нужно присоединить данные или получить связанную с файлом статистику.

Встраиваемая транзакционная файловая система Embedded Transaction filesystem (ETFS, fs-etfs-ram)

Лимиты встраиваемой транзакционной файловой системы ETFS:

длина имени файла
91 байт.
длина имени для пути
1024 байт.
размер файла
2 GB − 1; 32-бит – лимит файловой системы.
максимальное количество файлов
32768 (15 бит).
максимальное количество файлов по умолчанию
4096.
максимальный размер кластера
4096.
максимальный размер файловой системы
64 Гб.

Для флеш-памяти NAND существуют дополнительные лимиты:


Note: Для ETFS на NAND необходимо выполнить программную кодировку 1-битной коррекции ошибок (ECC) для данных в резервной области. Поддерживаемые конфигурации доступны для:
  • 2 Kб страниц памяти устройства памяти NAND;
  • 4 Kб страниц памяти устройства памяти NAND.

Установлено, что резервная область получает значение ECC от devio_postcluster(), и после этого записывает его на устройство памяти NAND. Для определения соответствующего размера значения ECC необходимо использовать следующее:

  • для 512 NAND, не доступно;
  • для 2048 NAND, используется 64 байт ECC;
  • для 4096 NAND, используется 128 байт ECC;

Для установки приоритета резервной области необходимо выполнить следующие изменения для BSP:

  • для devio_readtrans() и devio_readcluster() — при чтении резервной области, в первую очередь сохраняется резервная область ECC, после этого задаются области резервной структуры 0xFF, которые запрашивают определение циклического контроля избыточности (CRC — проверка сохранности данных для устройства памяти NAND). Выполняется определение CRC, и если произошел сбой, для восстановления необходимо попробовать использовать другую резервную область значения ECC. Если резервная область ECC исправна, действия CRC игнорируются. Если резервная область ECC была скорректирована, устанавливается tacode в структуре транзакции ETFS_TRANS_ECC. Если ECC не было скорректирована, устанавливается tacode для ETFS_TRANS_DATAERR;

  • для devio_postcluster() — после определения CRC и ECC для кластера данных, и определения CRC для резервной области, добавляется определение ECC для резервной области. При выполнении определения CRC, необходимо использовать 0xFF в качестве символа-заполнителя для резервной области ECC.

Файловая система UDF (fs-udf.so)

Лимиты для файловой системы UDF:

длина имени файла
255 символов Unicode.
длина имени для пути
1024 байт.
размер диска
данная файловая система использует 32-битные блоковые адреса, но сама файловая система 64-битная (> 4 Гб).

Какие-либо действия в файловой системе с использованием fs-udf.so запрещены. Данная файловая система доступна только для чтения.

Apple Macintosh HFS и HFS Plus (fs-mac.so)

Лимиты для Apple Macintosh HFS (Hierarchical File System) и HFS Plus:

длина имени файла
31 символ MacRoman для HFS; 255 байт (Unicode) для HFS Plus.
длина имени для пути
1023 bytes.
размер диска
данная файловая система использует 32-битные блоковые адреса, но сама файловая система 64-битная (> 4 Гб).

Какие-либо действия в файловой системе с использованием fs-mac.so запрещены. Данная файловая система доступна только для чтения.

Файловая система Windows NT (fs-nt.so)

Лимиты для файловой системы Windows:

длина имени файла
255 символов.
длина имени для пути
1024 байт.
размер файла
4 GB − 1; используется формат файловой системы 64-бит.
размер файловой системы
264 - 1 кластеров.
размер диска
ограничен драйвером диска и io-blk.

Данная файловая система доступна только для чтения.




Предыдущий раздел: перейти