SSD + mdamd RAID10 + LVM + KVM как заставить работать TRIM в Windows гостях?
Как заставить работать TRIM в гостевых Windows системах на KVM в общем и Proxmox в частности?
Есть RAID10 из 6 SSD дисков, по верх них LVM, машины подняты на KVM, диски у них, это куски LVM (RAW). Все что в интеренте находится уже перепробовал, в плане переключения контролеров на вирто и скази - не работает.
При этом сама схема работает, в ядре поддержка RAID10 + LVM есть.
В данной конфигурации команды TRIM должна же передавать хост система (Linux), а не витруальная. Потому и не работает, что винде выдан в пользование не сам SSD, а виртуальный диск. Сама винда и не должна знать SSD там или нет.
Такая схема работает, когда гость Linux, там трим работает. Сами диски и контроллер вирто, сделаны так, что они изначально выглядят для гостя, как имеющие возможность трима.
Винда включает трим, но по факту он не работает. Хотя встречаются манулаы и шаманства, но толку от них пока нет.
mureevms: это очень логично. Когда диск внутри машины это lvm кусок, гипервизор совершенно не в курсе, что там происходит, куда что пишется, какая там файловая система и прочее. Без трим, при таком раскладе вообще нечего, скорость деградирует очень быстро.
Схема настройки описана, но для сетевых блочных устройств и гостей на линуксе. Должно работать на винде, но не работает и даже вопросов, тем и обсуждений как то мало. Как будто я один с такой схемой и проблемой.
Согласен, но к виртуалке диск подключается как виртуальный, т.е. гостевая система не работает напрямую с SSD, поэтому никакого смысла в триме нет.
Вот если бы диск подключался как устройство, что умеют, например, VirtualBox и VMware Workstation, то Вы бы были совершенно правы.
mureevms: если бы я диск подключал как устройство, я бы не задавал тут вопросов, ибо было бы все очевидно. Моя хотелка, совершенно типичная, и мало того, она работает на других системах, о чем я вам уже выше не однократно написал. Не работает только на винде, хотя должна.
Артем: отрезанный косочеггг, работает только на чистом-одиночном диске, с поддержкой аппаратной очистки. В рейде, с lvm это работать не будет. Я вам же тут не теорию рассказываю, я вам по факту говорю. За неделю, скорость записи с 1700 мегабайт в сек, падает до 20 мегабайт в сек. Это тест, мой личный тест, на моей железяке.
DizZa: Отрезанный кусочек работает где угодно. Я вам чистую практику говорю.
И совершенно пофиг какие у вас там будут рейды, lvm и прочее.
Просто отрезать его надо на всех дисках, и не включать его в рейд.
DizZa: Похоже туплю, не сработает. У вас же внизу mdamd, а он работает целиком с дисками, а не с разделами.
Уберите его и делайте зеркалирование средствами LVM
DizZa: А какую ссылку вам надо? Я как то затрудняюсь даже.
Просто отрезаете кусок диска, оставляете его неразмеченным - у диска будет гарантированный запас ячеек.
А на размеченных участках поднимаете LVM.
Кстати а десятый рейд зачем? Я просто сколько сталкивался -не вижу от него пользы в случае с SSD.
DizZa: А при чем тут продление жизни? Трим на него никак не влияет, отрезание раздела тоже.
Трим это команда которая передает диску информацию о том, что информация удалена из файловой системы, и ее можно затирать. Для магнитных дисков она бессмысленна, т.к они прекрасно пишут поверх старой информации.
Если нет трима - весь диск забивается информацией которая уже давно удалена из файловой системы, и при записи ему приходится очищать ячейки, ибо он не может писать в записанную ячейку. Очистка это длительный и ресурсоемкий процесс, поэтому скорость падает ниже плинтуса.
Если вы оставите область диска неразмеченной - она всегда будет чистой, сборщик мусора постарается.
В итоге у вас при записи всегда будет гарантированный запас чистых ячеек, благодаря этому скорость записи не просядет.
Насчет mdadm - посмотрел сейчас, должен через него заработать фокус с неразмеченным разделом.
Т.е поднимаете 10 рейд с помощью mdadm, оставляете кусок неразмеченного пространства, остальное отдаете LVM.
Артем: какой сборщик мусора то? Если его на винте нет? Как раз убираться и должен трим, и именно из за того, что на диске нет аппаратного сборщика я и парю всей этой затеей.
Артем: Трим не убирается, это просто дополнительная ATA команда, которая сообщает диску какую информацию можно удалять. Т.е при использовании трима сборщик мусора работает более эффективно, и вовремя.
Артем: у меня не плекстор и не интел, у меня нет алгоритмов на повторную запись, у меня самые банальные деревянные диски. Если не использовать трим, это все безбожно тормозит, ибо как выше я уже отвечал, интенсивность большая. Уповать на механизм подмены при попадание нельзя.
Прочитал я про вашу схему. Она должна работать независимо от того, есть ли рейд, нет ли его, и прочее. Но опять же - смотрим первый абзац.
Оно не может работать на сервер, ибо он сервер, и там постоянно что то пишется, и на обычных дешевых дисках, ибо там нет анализатора записи.
Она прекрасно работает на серверах, это я на основании собственного опыта говорю.
Я просто использую Hyper-v в большинстве задач, поэтому с mdadm последнее время практически не сталкивался.
Механизм сбора мусора есть в любом самом деревянном диске, даже на флешках встречается.
Если диски не дешевые, то там сам производитель отрезает половину емкости под этот самый запас.
То что постоянно что-то пишется, никак не мешает работать этому механизму.
Артем: отскок в запасною область, не выделенную самостоятельно, а заводскую (хотя и выделенную тоже), происходит в момент, когда при попытке записи диск попадает на грязную ячейку. Что бы не тупить, он пишет в чистую область, или в кэш, или еще куда то. Но к примеру плексторы, они при подобном пришествие, не пользуют область. Диск помнит в какие ячейки он писал недавно, и в них уже не попадая пробует еще раз. Со сборщиком мусора это дает эффект. Если подобных механизмов нет, все чистые области, даже если это половина диска, исчерпаются.
По вашей логике, у меня должно все работать отлично, если у меня половина массива свободна. Но оно не работает, оно деградирует.
То что постоянно пишется, просто обязано мешать механизму. Одно дело когда очистка проходит сразу после удаления, другое дело, когда даже через 15 минут.
Дайте мне хоть какую то ссылку, хотелось бы ту ссылку, которая дает уверенность вам, в отличности механизма, а то я нахожу только подтверждение своих слов, о неминуемой, хоть и отсроченной деградации.
DizZa: Вы неверно представляете себе работу SSD.
Это я насчет вашей фразы - "отскок в запасною область, не выделенную самостоятельно, а заводскую (хотя и выделенную тоже), происходит в момент, когда при попытке записи диск попадает на грязную ячейку"
Диск всегда знает сколько у него чистых ячеек, на записанную он может попасть только если чистых нет вообще!
Все SSD работают по стандартному интерфейсу предназначенному для HDD, и система работает с ними как с HDD, т.е пишет в определенный сектор, определенной дорожки. Т.е стандартная LBA.
На SSD нет ни секторов, ни дорожек, там есть ячейки и страницы.
Там есть так называемая таблица трансляции где хранится соответствие адресов LBA и ячеек диска.
Все ячейки указанные в этой таблице - записанные, остальные чистые.
Если вы оставляете неразмеченной часть диска, то некоторый диапазон адресов LBA не будет использоваться файловой системой - значит эти адреса никогда не будут сопоставлены с ячеками, и будут чистыми.
Если у вас половина массива свободна - скорость все равно будет деградировать.
Т.к адреса LBA сопоставлены ячейкам, а информации что их нужно стереть не было, т.к трим не работает. Эта информация появиться только тогда когда файловая система инициирует запись в данный адрес LBA.
Чтобы это работало нужно именно гарантированно исключить доступ файловой системы к определенному блоку адресов. Когда вы оставляете кусок диска неразмеченным, файловая система не может его адресовать и все работает.
То, что постоянно пишется, механизму никак не мешает. И трим ни в коем случае не делает очистку сразу после удаления.
Очистку делает сборщик мусора.
Трим дал информацию о том что ячейку можно очищать, и сборщик мусора в порядке очереди (т.е не моментально) ее очистит.
По поводу ссылок - под рукой ничего интересного нет, где то на работе валялась довольно грамотная пдфка по логике работы основных контроллеров ssd, на аглицком, если интересно завтра могу найти.
Тут вся фишка в LVM.
Если вы работаете просто с диском - оставили неразмеченную область и файловая система к ней доступа не имеет.
А у вас файловая система работает не с диском, а с LVM - т.е с менеджером логических дисков.
LVM у вас имеет доступ к всем адресам диска, а что и куда писать он решает сам.
Артем: вы меня запутали уже. По порядку. LVM предоставляет разделы, и разделы эти имеют четкие секторыне границы, за пределами границ разделов, ничего писать не может, а значит по вашей схеме должно работать.
LVM никогда не имел и не имеет доступа ко всему диску, он занимает при выделение определенные сектора.
Жесткий диск не знает и не может знать, пустая у него ячейка или нет. Физически, он видит запись, но логически, есть там что то ценное, или это остаток от удаленного, он знать не может. Для этого и нужен трим, что бы передать диску, информацию от файловой системы.
Пустые ячейки на флешке и ссд, кончаются очень быстро, просто моментально, и без трим, единственный вариант очистки места сборщиком, это получение от файловой системы команды записать что то в те ячейки, которые по мнению диска заняты. Именно в этот момент, контроллер жесткого диска пишет в запасную область,а ту последовательность, которую получил от ФС очищает на будущее.
На плекстарах, это идет дальше, там контроллер не только очищает последовательность полученную от ФС, но он еще знает целостность актов записи, т.е. если в прошлый раз запись была с 1 по 100 ячейку, а в этот раз ФС хочет что то записать в 55 ячейку, контроллер стирает с 1 по 55 и с 55 по 100. Звучит страшно, но это вроде работает. Похожее есть и у других, у интела в частности.
Артем: диск отдан под LVМ, это pvcreate /dev/sda например, т.е. создали физ том. Но тут нет файловой системы и ничего не пишется никуда. А дальше нарезано на кусочки по 100 гигов lvcreate -n vm -L 100G vm1 границы кусочков четкие по секторам, за границами ничего никуда не пишется. Получается диск свободен больше чем на половину, точнее массив.
mdadm и lvm работают прозрачно, они не натягивают ничего своего на диск, т. е. по сути, что рейд, что lvm это всего лишь метки в начале диска и не более.
Внимание вопрос, почему ваша схема не работает, если должна работать по вашей логике.
DizZa: Потому что это LVM.
Т.е менеджер логических томов - никаких границ по секторам нет, LVM пишет на весь диск, а вся ваша разметка, это всего лишь виртуальные метки в LVM.
Артем: логические разделы не пишутся на весь диск, они имеют четкие границы в секторах. Особенно когда у меня один диск, который же рейд. Это вообще режим linear mapping, т.е. прямое, линейное соответствие физике диска.
Вы откуда вообще взяли про размазывание LVMом данных по диску? Я вот взял свою току зрения тут tldp.org/HOWTO/LVM-HOWTO, а вы свою где?
Артем: и еще момент. Я могу сделать логический раздел на ту же половину диска, т.е. на этот объем, как бы по вашему мнению там не размазывались бы блоки, этот объем все равно не замажет. Сегодня попробую, сделаю раздел и поставлю на машине кристалмарк на максимум на ноч.
DizZa: Маны, либо ежели по русски и разжевано - xgu.ru/wiki/LVM
Собственно LVM для того и создана, чтобы абстрагироватсья от физических носителей, т.е она сама решает куда и что писать, и полностью изолирует вас от взаимодействия с физическими дисками и их ограничениями.
DizZa: Логический раздел никак не повлияет. Это всего лишь запись в LVM.
Просто уберите часть диска из под контроля LVM. Т.е отдавайте LVM не весь диск, а раздел.
АртемЪ: АртемЪ: это тот же ман, только перевод. Я привык работать с первоисточниками на родном их языке.
Вы не читаете то, на что сами ссылаетесь. Абстрагироваться, это да. Но не так как вы тут обрисовываете. LVM раздел имеет четкие границы, он знает, какое адресное пространство он может занять, а какое нет.
По вашей же ссылке все написано, только сжато. lvm создается поверх физического диска, в логике lvm происходит сопоставление физических блоков с lvm экстентами. И это соответствие не двигается и всегда одно и тоже, пока не происходит добавление устройства в lvm или подобные действия с физикой.
Для примера. Есть 100 физ блоков, делаем lvm получаем к примеру 50 экстентов по 2 физ блока, т.е. после того, как отдали диск или раздел под lvm мы работает с экстентами, но сам lvm с физикой.
И если у нас первый экстент занимает 1 и 2 физ блоки, а 2 экстент 3 и 4, то 2 экстента занимают с 1 по 4 физ блоки и это только так.
Если на этих экстентах мы делаем логический раздел, по факту физическим мы все так же занимаем с 1 по 4 блоги.
Поэтому убирать ничего никуда не надо, ваши требования к свободному месту выполняются и так, оно должно работать. Но не работает.
К тому же, я сделал замеры, как и обещал. На 100 гигабайтах (раздел на 256 гигабайтном ssd), за сутки при физической занятости в 30 гигов (т.е. информации с которой происходит активная работа), забивается 59323383808 bytes were trimmed
Т.е. почти весь диск. Без трима, линейный запрос через dd последовательно всех блоков (естественно на отмонтированом диске), показывает, что все реально так, и пустых блоков набегает коло 7 гигабайт. Предположительно, в конце этого дня, на диски не останется физически пустых ячеек и без трима начнутся тормоза. Об этом я тоже отпишусь. Хотя уже и так все очевидно.
Ну я и привел два варианта - английский и русский. Т.к с одной стороны это IT ресурс где нормой для документации считается английский, с другой стороны это русскоязычный ресурс где нормой считается русский язык.
По поводу LVM - вы совершенно верно описали, полностью с вами согласен.
Но есть небольшие замечания - сопоставление физических и логических экстентов могут меняться при множестве действий -
При изменение физических разделов на которых лежит LVM - добавление и удаление дисков
При изменении логических разделов LVM - добавление, удаление, ресайз размеров логических томов.
При всех этих действиях изменяется разметка LVM, т.е сопоставление логических экстентов физическим.
А SSD эту операцию никак не видит.
Т.е я вам сказал как это можно решить гарантированно - оставить неразмеченной часть физического диска.
Я не говорю что на LVM это невозможно сделать.
Можно, но сложно, т.к надо соблюдать кучу моментов -
Оставить неразмеченным логический раздел LVM(не ставить на него файловую систему), не менять физическую конфигурацию дисков под LVM, не менять логическую структуру разделов LVM с самого начала эксплуатации. Тогда это тоже гарантированно сработает.
Но как вы заметили тут куча условий. А я не знаю точной конфигурации, и какие действия вы производили с LVM. Поэтому могу только гадать почему у вас это не работает.
АртемЪ: на англиском, это фо документация, а на русском, вольный и куций перевод. В переводе почти ничего не сказано про линейное размещение.
Теперь по поводу множества действий.
Зачем менять физические разделы? Они у меня не изменены - отдан весь диск.
При добавление дисков, карта не меняется, она расширяется, т.е. то что и где было ,там и остается.
Логическая структура разделов, никак не влияет на экстенты.
По сути, условие только одно, не добавлять и не убирать диски, что происходит только в крайних случая и не является типовой операцией.
Для справки. Уже на данный момент, мой эксперементальный диск исчерпал все свободное место и деградировал. Теперь на со 100% уверенностью и достоверностью говорю - с lvm поверх рейда при соблюдение необходимых условий метод не работает. Буду пробовать на днях, сжать рейд и lvm.
DizZa: Если вас не затруднит сообщите пожалуйста
модели дисков, общий размер физических дисков, сколько виртуальных машин работает и с какими ос, и как и насколько логических разделов разбит LVM, и какой общий объем этих логических разделов.
Хочу смоделировать эту ситуацию.
АртемЪ: ADATA Premier Pro SP610 256ГБ. Общий размер 6*256. 2 машины, каждая в разделе в 100 гигов. Win2008R2. На 2 раздела по 100гиг, остальное пока свободно. Общий объем 200 гигов.
А зачем делать трим, на всех новых дисках ссд вроде он не нужен последние года два уже, у меня никакого трима нет и никакой деградации скорости я что то не наблюдаю.
DizZa: как то вы хренова меряете, померьте скорость в хостовой машине, а не в виртуалке.
Загрузитесь в какой нибудь чистый линукс вместо проксмокса и померьте.
Пума Тайланд: суть замеров дд, не только в замере скорости, но и чтение блоков и проверке их на пустоту. Меня на другом ресурсе, пытались убеждать, что вирто драйверы, работающие на гостевой машине по линукосом, показывают работающий трим и по факту его делают. А вот вирто драйверы на гостевой машине под виндой, не показывают работу, но работают.
Поэтому, делаем доп дискв в гостевой машине под линем, на него пишем темпы, пишем какое то время, потом перемонтируем темп в другое место, а на этот диск делаем fstrim -v.
Скорость как была до работы, так и осталась, т.е. не деградировала. Делаем считывание блоков dd, там нули. Т.е. трим гарантировано сработал.
Делаем тоже самое под виндой, в плане темпа. Убираем темп, делаем замер внутри машины. На диске явная деградация скорости. Грузимся с диска, делаем dd на этом диске - тоже деградация. Делаем чтение блоков, а там информация. Т.е. трим не работает под виндой и визуально и по факту.
Это что касается проверок и замеров.
Но ведь все это затеяно не ради тестов, а ради работы. И тут совсем все печально. НА виндовых машинах деградация скорости заметна невооруженным глазом, и банальный замер CrystalDiskMar это естественно подтверждает.
Я тут провёл пару тестов - во первых, то, что написано в мануале - вранье, по крайней мере для QEMU 2.4. DISCARD поддерживается и для virtio-scsi, и для ahci, и для ide. Во-вторых, Win10 отрабатывает DISCARD, если установлен на qcow2 на ssd (проверял Trimcheck-ом). Вы наверняка проверяли, спускается ли DISCARD с уровня LVM на SSD, напишите пожалуйста, что получилось. На Win7 пока не проверял, потому что она вроде поддерживает DISCARD только на SSD
lovecraft: с c LVM с ядром 2.26 не спускается, хотя поддержка в ядре проксмокса есть. Mdamd отрабатывает, LVM отрабатывает, а гость нет.
Win 7 и Win 10 вообще не должны ничего знать о LVM и прочем, они трим из коробки поддерживают, и так как KVM виртаулизация полная, гости вообще не должны задумываться о том, что у них там ниже.
Я тоже пришел в итоге к контейнерам, но слегка не так. Я разместил контейнеры на ext4 и забросил вопрос, это позволило получить то, что мне надо, без поддержки трим гостем. Я проверял проброс от гостя к хосту только на RAW дисках, поэтому ничего не могу сказать про другие варианты образов.
Сейчас уже этой системы нет, поэтому ничего не могу проверить.