Tek çekirdekli bir makinede 3 işlemim var. Her işlem tamamen aynıdır ve CPU'yu olabildiğince hızlı yakar (sıkı döngü). Bunlardan ikisi ( A
ve B
) 512 ve 512'ye ayarlanmış ayrı gruplarda cgexec ile başlatılır. Üçüncüsü ( C
) cgexec ile değil, düzenli olarak başlatılır.
Her şey hazır ve çalışır C
hale geldiğinde CPU'nun% 66'sını alır A
ve B
% 33'ü böler. Ben öldürürsem C
sonra A
ve B
(beklendiği gibi)% 50 her olsun.
Neden C
% 66 elde ediyor? Bu senaryoda her birinin% 33'ünü veya belki de% 50 (C),% 25 (A) ve% 25 (B) olmasını beklerdim. C
Gerçi % 66 matematik dersini nasıl yaparsam yapayım işe yaramıyor.
Genel olarak, kaynak paylaşımı söz konusu olduğunda cgexec
başlatılan süreçlerle etkileşime girmeden başlatılan işlemlerin nasıl olduğunu anlamak istiyorum cgexec
(özellikle CPU, ancak çok karmaşık değilse daha genel bir cevap takdir edilecektir).
top
inanıyorum ve oldukça basit bir şekilde komut isteminden başlatıldıklarına inanıyorum: cgexec -g cpu:foo myprogram
ve ./myprogram
. Bir süredir bu yüzden kesinlikle hatırlamıyorum.
cpu.shares
çok tuhaf bir yapılandırma seçeneğidir; Bunun cpuset.cpus
yerine mümkünse işleri CPU'lar ile ayırmanızı öneririm .