Тип работы:
Предмет:
Язык работы:


Реализация кластерного режима в SCSI target ядра Linux

Работа №128284

Тип работы

Бакалаврская работа

Предмет

информационные системы

Объем работы35
Год сдачи2021
Стоимость4375 руб.
ПУБЛИКУЕТСЯ ВПЕРВЫЕ
Просмотрено
29
Не подходит работа?

Узнай цену на написание


Введение 4
1. Постановка задачи 7
2. Исследование предметной области 8
2.1. SCSI кластеризация 8
2.2. Persistent Reservations 8
3. Обзор существующих аналогов 12
4. Разработка метода 14
4.1. Выбор средства синхронизации 14
4.2. Активные или пассивные обновления 16
4.3. Архитектура системы 17
5. Реализация 20
5.1. Синхронизирующий модуль 20
5.2. Драйвер символьного устройства 24
5.3. Представление данных Persistent Reservations 25
5.4. Команда «Compare and Write» 27
6. Тестирование 30
7. Заключение 32
Список литературы 33


SCSI[1] (Small Computer System Interface) — это набор стандартов, описывающих механизмы, интерфейсы и команды для передачи данных между компьютерами и запоминающими устройствами. В ядре операционной системы Linux предусмотрена возможность выдавать до-ступ к запоминающим устройствам (как правило реальным или виртуальным дискам) по протоколам SCSI. Тогда сторона, которая владеет диском именуется SCSI-target, а сторона, которая читает или пишет в этот диск: SCSI-initiator. Initiator может посылать на target’bi команды согласно задокументированному протоколу, например, команду на получение единоличного доступа к диску. В ядре Linux присутствует подсистема, способная выполнять SCSI команды, в случае когда каждый диск управляется одним target’ом.
На практике зачастую возникает ситуация, когда доступ к одним и тем же дискам управляется несколькими SCSI-target серверами (Рис. 1). Такой подход используется для повышения отказоустойчивости системы и пиковой скорости чтения/записи и называется кластерным режимом. SCSI кластеры часто применяются для организации систем хранения данных. При таком подходе возникает проблема синхронизации состояний между SCSI-target серверами. На данный момент эта проблема решена различными способами в прикладных системах, но на уровне операционный системы с ядром Linux такой режим не поддерживается. В штатной подсистеме ядра Linux, TCM (Target Core Mod) [2], которая включает SCSI-target функциональность, нет поддержки кластерного режима SCSI-target. В данной работе планируется разработать метод, с помощью которого можно реализовать кластерный режим в данной подсистеме.
Заметим, что если подключить несколько SCSI-target^ без поддержки кластерного режима к одним и тем же дискам, система будет работать некорректно в некоторых случаях. Например, если клиент 1 через target 1 начнет взаимодействовать с диском 1 (например, писать на него данные), при этом клиент 2 через target 2 также начнет писать на диск 1 данные, то данные на диске 1 окажутся в некорректном состоянии.
Стоит отметить, что наличие кластерного режима в SCSI-target ядра Linux еще не означает, что существует возможность создавать эффективные кластеры средствами операционной системы. При работе кластера необходимо правильно его конфигурировать, обрабатывать присоединения и отсоединения узлов во время работы кластера, регулировать работу узлов в случае распада кластера, когда часть узлов теряет соединение с остальными узлами, и перезапускать узлы по мере необходимости. Всё это тяжелые задачи, для которых существуют готовые решения в виде программ пользовательского пространства. Данная работа предполагает использование одного из таких решений.
В процессе изучения команд и механизмов SCSI был выделен механизм постоянных резерваций (Persistant Reservations), как наиболее важный механизм для создания систем хранения данных, построенных на SCSI кластерах, поэтому в данной работе ему уделено особое внимание. Этот механизм оперирует резервациями, сущностями, описывающими взятие некоторого ресурса, например диска, под контроль клиентом или группой клиентов. В стандарте также описаны команды, применяемые при работе с резервациями. Резервации могут быть постоянными, что означает, что они сохраняются при сбоях на аппаратном или сетевом уровнях, например, при сбое питания на клиенте, владеющем резервацией, или при аварийном отказе на SCSI-target^. Этот механизм является примером функциональности, реализация ко-торой в кластерном режиме требует дополнительных взаимодействий в кластере, например, нам нужно синхронизировать информацию о резервациях между всеми SCSI-target’ами.
Существуют и другие команды SCSI, реализация которых в кластерном режиме требует синхронизации данных. Так в данной работе была реализована команда «Compare and Write», аналог команды «CMPXCHG» (Compare and Exchange)[3] процессоров с архитектурой x86. Таким образом, команда «Compare and Write» может служить примитивом для создания семафоров на уровне кластера.


Возникли сложности?

Нужна помощь преподавателя?

Помощь в написании работ!


Полученные результаты:
В ходе выполнения данной работы были достигнуты следующие результаты:
• проведено исследование предметной области, изучены существующие стандарты;
• произведен обзор решений, которые позволяют организовать SCSI кластер и зафиксированы лучшие аспекты этих решений;
• разработан метод реализации кластерного механизма в SCSI-target ядра Linux;
• реализован разработанный метод, с помощью которого добавлен кластерный режим в команду SCSI Compare And Write ;
• проведено тестирование ключевой функциональности с помощью тестовых стендов.



[1] Co. Hewlett-Packard. Small Computer Systems Interface (SCSI) // documentation.— URL: https://tools.ietf.org/html/rfc3783(дата обращения: 8.10.2020).
[2] Kernel.org. TCM Userspace Design // Статья. — URL: https://www.kernel.org/doc/html/latest/target/tcmu-design.html (дата обращения: 09.10.2020).
[3] Felixcloutier. CMPXCHG — Compare and Exchange // documentation.— URL: https://www.felixcloutier.com/x86/cmpxchg(дата обращения: 22.03.2020).
[4] Linux-iscsi.org. Targetcli // Официальный сайт.— URL: http://linux-iscsi.org/wiki/Targetcli (дата обращения: 11.11.2020).
[5] Duncan Lee. open-iscsi // Github.— URL: https://github.com/open-iscsi/open-iscsi (дата обращения: 11.11.2020).
[6] Virtualbox.org. Welcome to VirtualBox.org// Официальный сайт. — URL: https://www.virtualbox.org(дата обращения: 02.02.2021).
[7] T10. SCSI Primary Commands - 4 // RFC.— 2020.— URL: https://www.t10.org/members/w_spc4.html (дата обращения: 5.11.2020).
[8] T10/BSR. Information technology - SCSI Block Commands - 3 (SBC- 3).
[9] T10/BSR. Information technology - SCSI Architecture Model - 5 (SAM-5).
[10] Sourceforge. Generic SCSI Target Subsystem for Linux // paper. -¬2020. -- URL: http://scst.sourceforge.net (дата обращения: 24.10.2020).
[11] lwn. A tale of two SCSI targets // Article. -- 2019. -- URL: https://lwn.net/Articles/424004/ (дата обращения: 12.11.2020).
[12] Sourceforge. Features comparison between Linux SCSI targets //
paper.— 2020.— URL: http://scst.sourceforge.net/
comparison.html (дата обращения: 24.10.2020).
[13] Oracle. Distributed Lock Manager: Access to Resources // documentation.— 2019.— URL: https://docs.oracle.com/cd/A57673_01/DOC/server/doc/SPS73/chap8.htm(дата обращения: 12.10.2020).
[14] FreeBSD. FreeBSD CTL // documentation.— URL: https://www.freebsd.org/cgi/man.cgi?query=ctl&sektion=4 (дата обращения: 8.11.2020).
[15] Oracle. OCFS2 Best Practices Guide // documentation.—
URL: https://www.oracle.com/us/technologies/linux/
ocfs2-best-practices-2133130.pdf (дата обращения: 9.11.2020).
[16] Clusterlabs. Pacemaker Cluster Resource Manager // Официальный сайт. — URL: https://www.clusterlabs.org/pacemaker/ (дата обращения: 12.12.2020).
[17] Hellwig Christoph. Add support for reservations to NVMeoF target // Patch request.— 2017.— URL: http://lists.infradead.org/pipermail/linux-nvme/2017-August/012592.html (дата обращения: 5.4.2021).
[18] Thomas Kristin. Programming Locking Applications // book. — 2001.— URL: http://opendlm.sourceforge.net/cvsmirror/opendlm/docs/dlmbook_final.pdf (дата обращения: 22.12.2020).
[19] Linux. dlm_lock(3) - Linux man page // documentation.— URL: https://linux.die.net/man/3/dlm_lock(дата обращения: 02.03.2020).
[20] Oracle. Distributed Lock Manager: Access to Resources // documentation.— URL: https://docs.oracle.com/cd/A57673_01/DOC/server/doc/SPS73/chap8.htm(дата обращения: 7.12.2020).
[21] Kernel.org. Completions - “wait for completion” barrier APIs // documentation.— URL: https://www.kernel.org/doc/html/latest/scheduler/completion.html (дата обращения: 28.01.2020).
[22] Kernel.org. Concurrency Managed Workqueue // documentation. — 2010.— URL: https://www.kernel.org/doc/html/latest/core-api/workqueue.html (дата обращения: 3.03.2021).
[23] lwn. Char Drivers // book.— 2005.— URL: https://static.lwn.
net/images/pdf/LDD3/ch03.pdf (дата обращения: 17.12.2020).
[24] Cppreference. C++ Atomic operations library // documentation. — 2019.— URL: https://en.cppreference.com/w/cpp/atomic/atomic_compare_exchange (дата обращения: 12.04.2020).
[25] Pytest.org. Full pytest documentation // documentation.— URL: https://docs.pytest.org/en/stable/contents.html (дата обращения: 21.04.2020).


Работу высылаем на протяжении 30 минут после оплаты.




©2025 Cервис помощи студентам в выполнении работ