]>
git.proxmox.com Git - pve-common.git/blob - src/PVE/CpuSet.pm
aab2c9a7f454197f47ab59f79a064241a0d17e48
9 my ($class, $members) = @_;
12 my $self = bless { members
=> $members }, $class;
18 my ($class, $cgroup, $kind) = @_;
22 my $filename = "/sys/fs/cgroup/cpuset/$cgroup/cpuset.$kind";
23 my $set_text = PVE
::Tools
::file_read_firstline
($filename) // '';
25 my ($count, $members) = parse_cpuset
($set_text);
27 die "got empty cpuset for cgroup '$cgroup'\n"
30 return $class->new($members);
39 foreach my $part (split(/,/, $set_text)) {
40 if ($part =~ /^\s*(\d+)(?:-(\d+))?\s*$/) {
41 my ($from, $to) = ($1, $2);
43 die "invalid range: $part ($to < $from)\n" if $to < $from;
44 for (my $i = $from; $i <= $to; $i++) {
49 die "invalid range: $part\n";
53 return ($count, $members);
57 my ($self, $cgroup) = @_;
59 my $filename = "/sys/fs/cgroup/cpuset/$cgroup/cpuset.cpus";
62 my @members = $self->members();
63 foreach my $cpuid (@members) {
64 $value .= ',' if length($value);
68 die "unable to write empty cpu set\n" if !length($value);
70 open(my $fh, '>', $filename) || die "failed to open '$filename' - $!\n";
71 PVE
::Tools
::safe_print
($filename, $fh, "$value\n");
72 close($fh) || die "failed to close '$filename' - $!\n";
76 my ($self, @members) = @_;
80 foreach my $cpu (@members) {
81 next if $self->{members
}->{$cpu};
82 $self->{members
}->{$cpu} = 1;
90 my ($self, @members) = @_;
94 foreach my $cpu (@members) {
95 next if !$self->{members
}->{$cpu};
96 delete $self->{members
}->{$cpu};
104 my ($self, $cpuid) = @_;
106 return $self->{members
}->{$cpuid};
109 # members: this list is always sorted!
113 return sort { $a <=> $b } keys %{$self->{members
}};
119 return scalar(keys %{$self->{members
}});
123 my ($self, $set2) = @_;
125 my $members1 = $self->{members
};
126 my $members2 = $set2->{members
};
128 foreach my $id (keys %$members1) {
129 return 0 if !$members2->{$id};
131 foreach my $id (keys %$members2) {
132 return 0 if !$members1->{$id};
141 my @members = $self->members();
145 foreach my $cpu (@members) {
146 if (!defined($last)) {
147 $last = $next = $cpu;
148 } elsif (($next + 1) == $cpu) {
151 $res .= ',' if length($res);
152 if ($last != $next) {
153 $res .= "$last-$next";
157 $last = $next = $cpu;
161 if (defined($last)) {
162 $res .= ',' if length($res);
163 if ($last != $next) {
164 $res .= "$last-$next";