Данные подсчета ключей ( CKD ) — это формат записи данных на устройстве хранения данных с прямым доступом (DASD) [a], представленный в 1964 году компанией IBM с ее IBM System/360 и до сих пор эмулируемый на мэйнфреймах IBM. Это самоопределяемый формат, в котором каждая запись данных представлена областью подсчета, которая идентифицирует запись и предоставляет количество байтов в дополнительной области ключей и дополнительной области данных. Это отличается от устройств, использующих фиксированный размер сектора или отдельную дорожку формата.
Данные подсчета ключей (CKD) также относятся к набору команд канала (совместно именуемых Channel Command Words, CCW), которые генерируются мэйнфреймом IBM для выполнения подсистемой DASD, использующей формат записи CKD. [1] Первоначальный набор CKD CCW, представленный в 1964 году, был существенно улучшен и усовершенствован в 1990-х годах.
Формат дорожки CKD предназначен для того, чтобы разрешить варьировать длину полей данных; каждый записанный блок данных на дорожке DASD, называемый записью, имеет связанное с ним поле счетчика, которое идентифицирует запись и указывает размер ключа, если он используется (определяется пользователем до 255 байт), а также размер области данных, если он используется. [2] [b] Поле счетчика содержит идентификацию записи [c] в формате «цилиндр-головка-запись», длину ключа и длину данных. Ключ может быть опущен или состоять из строки символов.
"Начало дорожки сигнализируется при обнаружении индексного маркера (индексной точки). ... Маркер автоматически распознается специальным сенсорным устройством". [3] : 5 После индексного маркера идет домашний адрес , который указывает местоположение этой дорожки на диске и содержит другую внутреннюю для блока управления информацию управления. За домашним адресом следует промежуток фиксированной длины. Далее каждая дорожка содержит запись 0 (R0), запись дескриптора дорожки, которая "предназначена для того, чтобы позволить всему содержимому дорожки быть перемещенным на альтернативные дорожки, если часть основной дорожки становится дефектной". [3] : 7 После R0 идут записи данных, разделенные пробелами. [3] : 9
Из-за пробелов и другой информации записанное пространство больше, чем требуется только для данных счетчика, ключевых данных или пользовательских данных. IBM предоставляет «справочную карту» для каждого устройства, которую можно использовать для вычисления количества записей на дорожку для различных размеров полей ключей и данных, а также для оптимизации емкости устройства. [4] Позже были написаны программы для выполнения этих вычислений. Поскольку записи обычно не разделяются между дорожками, указание неправильного размера записи создает проблемы.
Чаще всего ключ опускается, и запись располагается последовательно или путем прямой адресации «цилиндр-головка-запись». Если он присутствует, ключом являются любые данные, используемые для поиска записи, обычно с использованием Search Key Equal или Search Key High или Equal CCW. Ключ (и, следовательно, запись) можно найти с помощью аппаратных команд. [5] [ нужна страница ] С момента появления IBM System/360 в 1964 году почти все большие и средние системные DASD IBM использовали формат записи данных count key. [6] [ нужна страница ]
Преимущества формата записи данных подсчета ключей:
Снижение цен на процессоры и память, а также более высокая скорость устройств и интерфейсов в некоторой степени свели на нет преимущества CKD, и она сохраняется только потому, что флагманская операционная система IBM z/OS не поддерживает секторно-ориентированные интерфейсы.
Первоначально записи CKD имели однозначное соответствие физической дорожке устройства DASD; однако со временем записи становились все более виртуализированными, так что в современных мэйнфреймах IBM больше нет прямого соответствия между идентификатором записи CKD и физической компоновкой дорожки.
Первоначально существовала высокая степень соответствия между логическим представлением доступа DASD и фактическим оборудованием, как показано на иллюстрации. Трехзначные метки обычно прикреплялись [d] для идентификации адреса канала, блока управления и устройства.
В системах начального уровня Channel и Control Unit часто были физически интегрированы, но оставались логически разделенными. Новая стратегия IBM [7], начавшаяся с 3830 Model 2 в 1972 году, физически разделила SCU на два физических объекта, директора и контроллера, сохраняя их логически одинаковыми. Контроллер обрабатывает форматирование дорожек CKD и упакован с первым диском или дисками в цепочке дисков и имеет номер модели с буквой «A» в качестве префикса, «A-Unit» (или «A-Box»), как в 3350 Model A2, содержащей контроллер и два DASD. DASD без контроллера, то есть B-Units, имеют префикс «B» в своем номере модели.
Подсистемы CKD [e] и директора предлагались IBM и совместимыми с plug-in конкурентами по крайней мере до 1996 года (2301 по 3390 Model 9); [8] в общей сложности 22 уникальных [f] DASD, предлагаемых IBM, сконфигурированных по крайней мере в 35 различных конфигурациях подсистем . Совместимые с plug-in предлагали многие из тех же DASD, включая 4 подсистемы CKD с уникальными DASD. [g]
Доступ к определенным классам устройств ввода-вывода мэйнфреймом IBM находится под контролем командных слов канала (CCW), некоторые из которых являются общими (например, No Operation), но многие из которых специфичны для типа устройства ввода-вывода (например, Read Backwards для ленточного накопителя). Группа CCW, определенная IBM для DASD, делится на пять широких категорий:
CKD CCW — это определенный набор CCW, используемых для доступа к подсистемам CKD DASD. Это отличается от CCW с фиксированной блочной архитектурой (FBA), которые используются для доступа к подсистемам FBA DASD.
CKD DASD адресуются так же, как и другие устройства ввода/вывода; для System/360 и System/370 DASD адресуются напрямую, через каналы и соответствующие блоки управления [9] [10] [11] (SCU или Storage Control Unit), изначально используя три шестнадцатеричные цифры, одну для канала и две для блока управления и устройства, обеспечивая адресацию до 16 каналов, до 256 механизмов доступа DASD/канал и 4096 адресов DASD в общей сложности. Современные мэйнфреймы IBM используют четыре шестнадцатеричные цифры в качестве произвольного номера подканала в подмножестве подсистемы канала, определение которого включает фактические каналы, блоки управления и устройства, обеспечивая адресацию до 65 536 DASD на подмножество подсистемы канала. На практике физические и конструктивные ограничения канала и контроллеров ограничивали максимальное количество подключенных DASD, подключаемых к системе, меньшим количеством, чем количество, которое могло быть адресовано.
Первоначальный набор функций, предоставленный IBM в 1964 году с введением формата дорожек CKD и связанных с ним CCW, включал: .
Также был предусмотрен набор функций сканирования, но он не был продолжен в будущих подсистемах CKD после 2314.
Сорок один CCW реализовал набор функций:
Примечания:
Первоначально CCW выполнялись двумя типами SCU, подключенными к высокоскоростным селекторным каналам системы . SCU 2820 [16] управлял барабаном 2301, а SCU 2841 [12] управлял комбинациями дискового хранилища 2302 , дискового накопителя 2311 , ячейки данных 2321 и/или барабанного хранилища 7320. IBM быстро заменила 7320 на более быстрый и большой 2303.
Впоследствии набор функций был реализован в семействе устройств управления хранением 2314 и интегрированном дополнении System 370 Model 25 .
Следующий пример программы канала [18] считывает запись с диска, идентифицированную полем Key. Дорожка, содержащая запись и требуемое значение ключа, известна. SCU будет искать дорожку, чтобы найти запрошенную запись. В этом примере <> указывает, что программа канала содержит адрес хранения указанного поля.
SEEK <номер цилиндра/головки> ПОИСК КЛЮЧА РАВНО <значение ключа> TIC *-8 Вернуться к поиску, если не равно ЧИТАТЬ ДАННЫЕ <буфер>
Канал блочного мультиплексора был представлен в начале 1971 года на некоторых высокопроизводительных системах System/360 вместе с блоком управления 2835 и связанным с ним DASD 2305, [19] Этот канал затем был стандартным для IBM System/370 и последующих мэйнфреймов; в отличие от предыдущего канала селектора он предлагал улучшения производительности для высокоскоростных устройств, таких как DASD, в том числе:
Разрешил нескольким канальным программам, [j] быть одновременно активными в объекте [19] в отличие от только одной с каналом селектора. Фактическое количество предоставляемых подканалов зависит от модели системы и ее конфигурации. [20] Иногда описываемое как отключенная цепочка команд, блок управления может отключаться в разное время во время связанного набора CCW, например, отключение для Seek CCW, освобождая канал для другого подканала.
Канал и управление хранилищем при определенных условиях могут взаимодействовать, вызывая повторную попытку CCW без прерывания ввода-вывода. [19] Эта процедура инициируется управлением хранилищем и используется для восстановления после исправимых ошибок.
Датчик положения вращения (RPS) был реализован с двумя новыми CCW, SET SECTOR и READ SECTOR позволили каналу задержать цепочку команд до тех пор, пока диск не повернется в указанное угловое положение дорожки. RPS допускает отключение канала в течение большей части периода задержки вращения и, таким образом, способствует повышению использования канала. Блок управления реализует RPS, разделяя каждую дорожку на равные угловые сегменты. [19]
Следующий пример программы канала отформатирует дорожку с R0 и тремя записями CKD. [19]
SEEK <номер цилиндра/головки> УСТАНОВИТЬ МАСКУ ФАЙЛА <разрешить операции записи> УСТАНОВИТЬ СЕКТОР <номер сектора=0> WRITE R0 <цилиндр/головка/R0, длина ключа=0, длина данных=6> WRITE CKD <цилиндр/головка/R1, длина ключа, длина данных> WRITE CKD <цилиндр/головка/R2, длина ключа, длина данных> WRITE CKD <цилиндр/головка/R3, длина ключа, длина данных>
В этом примере запись 0 соответствует стандартам программирования IBM. С каналом блочного мультиплексора канал свободен в то время, когда DASD ищет, и снова, пока диск вращается к началу дорожки. Канал селектора будет занят в течение всего времени выполнения этого примера программы.
Пропуск дефектов позволяет записывать данные до и после одного или нескольких дефектов поверхности [k], что позволяет использовать всю дорожку, за исключением той части, которая имеет дефект. Это также исключает время, которое раньше требовалось для поиска альтернативной дорожки. [21] Только ограниченное количество дефектов можно было пропустить, поэтому альтернативные дорожки оставались поддерживаемыми для тех дорожек с избыточными дефектами.
Пропуск дефектов был введен в 1974 году с 3340, подключенным через 3830 Model 2 Storage Control Unit [21] или интегрированными насадками на небольших системах. Пропуск дефектов был по сути только заводской функцией до 1981 года, когда были выпущены CCW для управления вместе с соответствующими утилитами. [22]
Впервые представленная с 3380 DASD на 3880 Storage Control Unit [23] в 1981 году эта функция была включена в более поздние подсистемы CKD DASD. Функция динамического выбора пути управляет работой двух контроллеров, включая одновременную передачу данных по двум путям. При поддержке операционной системы каждый контроллер может служить альтернативным путем в случае недоступности другого контроллера. [24]
Три дополнительные команды: Set Path Group ID, Sense Path Group ID и Suspend Multipath Reconnection используются для поддержки подключения моделей 3380 с двумя контроллерами во главе цепочки. [23]
Команда Set Path Group ID с функцией динамического выбора пути (DPS) обеспечивает большую гибкость в операциях на зарезервированных устройствах. После того, как группа путей для устройства установлена, к нему можно получить доступ по любому пути, который является членом группы, в которой оно зарезервировано. Кроме того, в системах 370-XA, которые устанавливают бит многопутевого режима в байте управления функцией (байт 0) на 1, блочные мультиплексные повторные соединения будут происходить на первом доступном пути, который является членом группы, по которой была инициирована программа канала (независимо от состояния резервирования устройства). [23]
Если контроллер, указанный в адресе ввода-вывода, занят или отключен, динамический выбор пути позволяет установить альтернативный путь к устройству через другой директор хранилища и другой контроллер в модели AA. [24]
До появления в 1981 году директора 3880 доступ к записям CKD осуществлялся синхронно, все действия требовали завершения одного CCW и начала следующего в промежутках между полями CKD. [13] Размер промежутка накладывал ограничения на длину кабеля, но обеспечивал очень высокую производительность, поскольку сложные цепочки CCW могли выполняться подсистемой в реальном времени без использования памяти ЦП или циклов.
Несинхронная работа, обеспечиваемая набором CCW Extended CKD («ECKD»), устраняет ограничение по времени разрыва. [13] Пять дополнительных CCW ECKD — это Define Extent, Locate Record, Write Update Data, Write Update Key and Data и Write CKD Next Track. [23]
При несинхронной работе передача данных между каналом и управлением хранилищем не синхронизирована с передачей данных между управлением хранилищем и устройством. Программы канала могут быть выполнены таким образом, что действия канала и управления хранилищем, необходимые для завершения выполнения одной команды и перехода к следующей, не должны происходить во время межзаписного промежутка между двумя соседними полями. Промежуточный буфер в управлении хранилищем позволяет выполнять независимые операции между каналом и устройством. Главным преимуществом ECKD являются гораздо более длинные кабели; в зависимости от приложения это может повысить производительность. [13]
ECKD CCW поддерживаются во всех последующих подсистемах CKD.
Этот пример программы несинхронного канала считывает записи R1 и R2 с дорожки X'0E' в цилиндре X'007F'. Обе записи имеют длину ключа 8 и длину данных X'64' (100 10 ) байт. [23]
Определить экстент <extent= X'007F 0000' через трек X'0081 000E'> Найти запись <цилиндр = X'007F', головка = X'000E' Считать ключ и данные <запись ключа = X'001038'> Чтение данных <record = X'001108'>
Кэширование , впервые представленное в подсистемах DASD CKD компаниями Memorex [25] (1978) и StorageTek [l] (1981), впоследствии было представлено в конце 1981 года компанией IBM в модели 3880 Model 13 для моделей 3380 с динамическим выбором пути. [m]
Кэш динамически управляется алгоритмом; данные с высокой активностью доступны из высокопроизводительного кэша, а данные с низкой активностью доступны из менее дорогого хранилища DASD. Большая память в Director, кэш, разделена на слоты дорожек, которые хранят данные из 3380 дорожек. Меньшая область представляет собой каталог, содержащий записи, которые позволяют размещать данные в кэше. [26]
Кэши также были предусмотрены для введенных впоследствии элементов управления хранением.
Со временем ряд CCW управления путями, диагностики и/или восстановления ошибок были реализованы на одном или нескольких элементах управления хранением. Например:
Снижение цен на процессоры и память, а также более высокая скорость устройств и интерфейсов в некоторой степени свели на нет преимущества CKD, однако IBM продолжает поддерживать его по сей день, поскольку ее флагманская операционная система z/OS продолжает использовать CKD CCW для многих функций.
Первоначально записи CKD имели однозначное соответствие физическому треку устройства DASD; однако со временем записи становились все более и более виртуализированными, так что в современном мэйнфрейме IBM больше нет прямого соответствия между идентификатором записи CKD и физической компоновкой трека. Мэйнфрейм IBM создает образы треков CKD в памяти и выполняет программы каналов ECKD и CKD по отношению к образу. Для соединения собственных дисков с фиксированным размером блока и формата записи ECKD/CKD переменной длины образы треков CKD в памяти отображаются на ряд фиксированных блоков, подходящих для передачи в дисковую подсистему FBA и из нее. [27]
Из 83 CKD CCW, реализованных для каналов System/360 и System/370, 56 эмулируются в System/390 и более поздних системах. [27]