Я арендовал 4 экземпляра серверов в дата-центре моих друзей по очень низкой цене. Согласно объявлению, каждый экземпляр должен содержать процессоры Intel с 4 ядрами с тактовой частотой 2,6 ГГц каждый, 8 ГБ ОЗУ и 50 ГБ памяти диска SATA.
Он предоставил доступ к тем экземплярам, которые были созданы на 4 более крупных выделенных серверах через Docker.
Однако, зная, что эти спецификации можно подделать, вплоть до обмана ядра Linux, каков наиболее надежный (не обязательно самый точный) способ гарантировать, что эти экземпляры серверов, к которым я имею доступ, содержат некоторую форму этих спецификаций?
Я думал, что если бы был тест, который я мог бы запускать периодически, который не мешал бы запускать задачи на этих экземплярах, которые позволили бы мне проверить частоту тактового ядра. и RAM, или если был какой-либо способ криптографически подтвердить / гарантировать, что вычисления в результате этих спецификаций были возможны.
У кого-нибудь есть мысли?
Да, можно подтвердить, соответствует ли сервер указанным вами спецификациям, при условии, что вам не нужна чрезвычайно высокая точность, и при условии, что он не создан злонамеренно, чтобы попытаться обмануть ваши тесты (например, предоставить вам полные ресурсы, но только во время тестирования ), а скорее сообщает о неверных спецификациях. Самый простой способ проверить это - попытаться выделить как можно больше памяти. Вы можете сделать то же самое со своим хранилищем, чтобы ваша квота не была меньше, чем вы думаете. Существует также множество тестов для процессора, которые покажут вам общую производительность системы. Если вы ожидаете от вас более сложных уловок, чтобы обмануть вас, вы можете провести более исчерпывающий набор тестов:
Проверить объем памяти просто. Просто попробуйте выделить как можно больше несжимаемых, несжимаемыхдублируемый память как можешь. Чтобы сделать это точно, вы также захотите отключить чрезмерно усердствовать, что позволяет выделить больше памяти, чем у вас есть на самом деле. Теперь выделите ядру столько памяти, сколько сможете, и запишите в эту память, пока не произойдет сбой выделения памяти (mmap(2)
возвращается -ENOMEM
). Это даст вам хорошую нижнюю границу имеющегося у вас объема памяти. Обратите внимание, что некоторые решения для виртуализации предоставляют вам лимит пакетной памяти, при котором запрос на больший объем памяти, чем вам разрешено, будет разрешен на короткий период. Я знаю, что OpenVZ может это делать, и это распространено среди недорогих VPS, но я не знаю о Docker.
Тестирование пропускной способности памяти также возможно с инструменты для сравнительного анализа. Правильный тест памяти гарантирует, что кэш ЦП не испортит результаты. Это даст вам приблизительную оценку общей пропускной способности предоставленной вам памяти. Обратите внимание, что реальные скорости часто бывают выше, так как кэш ЦП будет хранить недавно использованное содержимое памяти в гораздо более быстрой памяти.
Проверка объема доступной памяти аналогична, но проще, чем проверка объема доступной памяти. Все, что вам нужно сделать, это записать на диск как можно больше несжимаемых данных. Как только вы не сможете продолжить запись из-за отсутствия свободного места, вы узнаете, сколько памяти вам было предоставлено. Возможно, вы захотите проверить, что все, что вы написали, все еще там, поскольку некоторые устройства хранения (особенно дешевые китайские флеш-накопители) неверно сообщают об объеме памяти, который у них есть, что приводит к записи на высокие адреса, обертывающей и перезаписывающей ваши предыдущие записи.
Тестирование хранилища можно выполнить с помощью популярные инструменты для работы. Это даст вам представление как о пропускной способности, так и о производительности среды. Имейте в виду, что тестирование устройств хранения данных - это действие, которое гораздо более чувствительно к другим одновременным рабочим нагрузкам, чем многие другие тесты.
Проверить количество ядер вашего процессора можно, посмотрев, в какой момент увеличение параллелизма распараллеливаемой задачи не увеличивает производительность. Увеличьте нагрузку на один поток, чтобы максимально использовать одно ядро. Затем раскрутите еще один, и еще один. Продолжайте делать это, пока улучшения производительности не начнут падать. В тот момент, когда добавление нового потока не увеличивает производительность или фактически снижает ее, вы будете знать, что превысили количество аппаратных потоков, доступных для запуска ваших программных потоков. Однако обратите внимание, что многие современные процессоры используют гиперпоточность или другая форма одновременной многозадачности. Гиперпоточность улучшает производительность для гетерогенных рабочих нагрузок, но два логических ядра на одном физическом ядре по-прежнему имеют ограниченные ресурсы. Не удивляйтесь, если окажется, что виртуальные ядра не в счет.
Производительность отдельного процессора часто бывает субъективной, поскольку некоторые задачи более эффективны, чем другие (деление двух чисел с плавающей запятой занимает гораздо больше циклов, чем сложение тех же чисел). Однако, если ваш бенчмаркинг показывает, что фактическая производительность намного ниже, чем заявленная производительность, вы знаете, что вас сдерживают. Получить максимальную тактовую частоту можно, используя RDTSC
инструкция, которая сообщает количество циклов, которые прошли бы при максимальной тактовой частоте (скорость регулируется динамически) с момента последнего запуска ЦП. Простой цикл счетчика при выполнении сборки с высоким приоритетом (для максимального увеличения заданного временного интервала) также может дать вам представление о текущей тактовой частоте процессора. Вам нужно будет понять характеристики производительности конкретного процессора, чтобы интерпретировать это, поскольку знание задержки различных инструкций и размера конвейера процессора все имеет значение.