Лучшие хосты KVM/QEMU -Практика выбора дистрибутива (и пакета)

Я бы использовал для этого perl, а не awk, потому что:

  • Perl может сам читать содержимое каталога с помощьюreaddir()

  • Perl имеет встроенную функцию -в stat()с такими же возможностями, что и команда stat.

  • и очень хороший модуль Date ::Format для форматирования даты и времени

  • Perl также имеет модули DBI, DBD и DBD ::mysql для прямого взаимодействия с базой данных (, например. вставить записи в сам mysql ).

  • ?заполнители в подготовленных операторах DBI избавляют от ВСЕХ проблем, связанных с экранированием и заключением в кавычки переменных для использования в командных строках SQL.

  • один скрипт делает все это -и это намного проще, чем иметь дело с кавычками оболочки или возиться с передачей переменных среды в awk.

#!/usr/bin/perl

use strict;
use Date::Format;
use DBI;

# Fill in your database details here.
my $database='';
my $hostname='';
my $port='';
my $user='';
my $password='';

# set up connection to database.
my $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port";
my $dbh = DBI->connect($dsn, $user, $password);

# set up sql statement
my $sth = $dbh->prepare('INSERT INTO action_diary (entry_date, entry_description, entry_details) VALUES (?,?,?)');

use Cwd;
my $cwd = getcwd;

# 'source' must be exported from the parent environment.
# alternatively, pass it as a command-line arg and read it from, e.g., $ARGV[0]
my $source=$ENV{'source'};

# find all.afl files in current dir, store with ctime in %files hash
# use `(stat($_))[9]` if you want the file's mtime rather than ctime.
opendir(DIR, '.') || die "Can't opendir.: $!\n";
foreach (readdir(DIR)) {
  next unless (-f "./$_" && m/\.afl$/);
  $files{$_} = (stat($_))[10];
};
closedir(DIR);

# sort the hash by value (timestamp)
foreach my $f (sort { $files{$a} <=> $files{$b} } keys %files) {
  my $Y = time2str('%Y',$files{$f});
  my $M = time2str('%m',$files{$f});
  my $D = time2str('%d',$files{$f});
  my $YMD = "$Y-$M-$D";

  my $details = "File Name: $Y $M $D $f\n$cwd\n$source";

  $sth->execute($YMD,'',$details);
}

$sth->finish();
$dbh->disconnect();

Если вы просто хотите, чтобы скрипт выводил серию операторов SQL, которые можно сохранить в файл или передать в mysql, это немного проще:

#!/usr/bin/perl

use strict;
use Date::Format;
use Cwd;

my $cwd = getcwd;

# 'source' must be exported from the parent environment.
# alternatively, pass it as a command-line arg and read it from, e.g., $ARGV[0]
my $source=$ENV{'source'};

# find all.afl files in current dir, store with ctime in %files hash
# use `(stat($_))[9]` if you want the file's mtime rather than ctime.
my %files=();
opendir(DIR, '.') || die "Can't opendir.: $!\n";
foreach (readdir(DIR)) {
  next unless (-f "./$_" && m/\.afl$/);
  $files{$_} = (stat($_))[10];
};
closedir(DIR);

my $FMT="INSERT INTO action_diary (entry_date, entry_description, entry_details) VALUES ('%s','%s','%s')\n";

# sort the hash by value (timestamp)
foreach my $f (sort { $files{$a} <=> $files{$b} } keys %files) {
  my $Y = time2str('%Y',$files{$f});
  my $M = time2str('%m',$files{$f});
  my $D = time2str('%d',$files{$f});
  my $YMD = "$Y-$M-$D";

  my $details = "File Name: $Y $M $D $f\n$cwd\n$source";

  # backslash-escape any quotes that may be in $details (i.e. from $f or $source).
  # NOTE: very primitive.  There are lots more characters that might need escaping
  # or special handling than just a single-quote.
  $details =~ s/'/\\'/g;


  printf $FMT, $YMD,'',$details;

}
1
21.06.2020, 15:32
2 ответа

Я не думаю, что существует какая-то одна «лучшая практика» для «современного и производительного хоста KVM для производства». Что лучше для вас, будет зависеть от вашей среды, как с точки зрения оборудования, контрактов, так и рабочих нагрузок, которые вам необходимо поддерживать. Однако, как правило, безопасно считать, что «производственное» использование обычно включает использование выпущенных продуктов или проектов, если только у вас нет ресурсов для предоставления собственной поддержки, не обязательно полагаясь на своего провайдера.

Как вы сказали, можно было бы ожидать, что предложения Red Hat обеспечат хорошую поддержку виртуализации, поскольку большая часть исходной работы выполняется инженерами Red Hat. Так, например, virtio-fsбыл добавлен в ядро ​​RHEL 4.18.0 -149 , а вся окружающая инфраструктура доступна в соответствующих пакетах. Выяснение этого не обязательно очевидно, если только у вас нет установки RHEL 8.2 для примерки; насколько я могу судить, это не упоминается в примечаниях к выпуску. В зависимости от масштаба вашей установки вы можете использовать RHEL, RHV и/или RHOSP, а если у вас есть дополнительные требования, вы можете обсудить их со своим менеджером по работе с клиентами...

2
18.03.2021, 23:25

Думаю, я могу ответить на этот вопрос. KVM развивается каждую секунду. Ловить надо но вменяемо...

Краткий ответ:

Двигайтесь по трем полосам, проверяя стабильность и улучшая производительность вдобавок к этому...

Ubuntu 18.04 LTS ---> Archlinux (bleeding edge) 
X79 Chipset ---> Todays consumer and server systems 
Libvirt ---> Qemu commandline 

Сначала следует использовать проверенную -стабильную (относительно старую )версию и выяснить, как она работает. Для этого я предпочитаю Ubuntu 18.04 LTS. И стабильная материнская плата с поддержкой vfio, которая имеет хорошие группы и двойной слот pci -e для двух графических процессоров. И поместите линукс-карту внизу. Если хочешь остаться без головы, как я.На плате также должна быть опция отключения видео OPROM и подробные параметры CSM. Я практиковался на плате X79 с 2680 Xeon. Начните с Windows и сначала улучшите его производительность... Bios uefi omvf и т. д.... Улучшения :пересылка процессора и кеша -драйверы virtio -настройки часов -оптимизация набора инструкций -функции -процессор закрепление -закрепление iothread -изоляция процессора -настройки гипервизора -Nvidia GTX RTX -проходы ATI RX -сценарии горячего подключения usb и т. д.

После этого вы должны начать работать с новыми платами и процессорами. На вершине айсберга находятся потребительские платы ryzen с паршивыми чипсетами и отсутствием настроек BIOS с одним слотом для GPU. И новейшие серверные системы с некоторыми сетевыми графическими процессорами...

Чтобы добраться до вершины айсберга, вам нужно работать с передовым краем Archlinux, немного редактировать биос и т. д. Чтобы вы могли узнать, как создать оптимально стабильные и производительные kvm

PS :Я достиг 99,4% голого железа и играю в apex legends со скоростью 144 кадров в секунду при высокой детализации 2k без теней и динамического освещения на ryzen 9 3900XT с 2070 Super. Нет зеркала на ubuntu 18.04 qemu -kvm и libvirt. Если вы хотите, вам нужно скомпилировать qemu и libvirt из исходников. Вам лучше перейти на archlinux или fedora (опционально ).

1
18.03.2021, 23:25

Теги

Похожие вопросы