RHEL 6 vs RHEL 5 üzerinde daha yüksek CPU kullanımının izolasyon nedeni


9

Şu anda sistemimizi RHEL 5'ten RHEL 6'ya taşımak istiyorum, ancak RHEL 6 makinelerinde beklenmedik derecede yüksek CPU kullanımı ile bir engelle karşılaştım. Bunun en azından kısmen selectkesilebilir bir uyku yapmaktan kaynaklanabileceği anlaşılıyor . Davranışı gösteren basit bir örnek:

#include <sys/select.h>

int main()
{
  timeval ts;
  for (unsigned int ii=0; ii<10000; ++ii) {
    ts.tv_sec = 0;
    ts.tv_usec = 1000;
    select(0, 0, 0, 0, &ts);
  }

  return 0;
}

Bir RHEL 5 makinesinde% 0 CPU kullanımında kalacaktır, ancak RHEL 6 yüklü olan aynı donanımda CPU'nun yaklaşık% 0,5'ini kullanacaktır, bu nedenle 30 ila 50 program selectbir uyku yapmak için çalışırken , büyük miktarda CPU gereksiz yere.

Bir Bugzilla açtım ve OProfile çalıştırmayı denedim ve sadece uygulama için ana% 100 ve çekirdeğe bakarken poll_idle'ın% 99'undan fazlasını gösteriyor (her şeyin yakalanabilmesi için boşta = anket ayarladım).

Daha yüksek CPU kullanımının sebebinin ne olduğunu denemek ve izole etmek için ne yapabilirim?

GÜNCELLEME: Perf aracını buldum ve aşağıdaki çıktıyı aldım:

# Events: 23K cycles
#
# Overhead  Command        Shared Object                                Symbol
# ........  .......  ...................  ....................................
#
    13.11%  test_select_sma  [kernel.kallsyms]    [k] find_busiest_group
     5.88%  test_select_sma  [kernel.kallsyms]    [k] schedule
     5.00%  test_select_sma  [kernel.kallsyms]    [k] system_call
     3.77%  test_select_sma  [kernel.kallsyms]    [k] copy_to_user
     3.39%  test_select_sma  [kernel.kallsyms]    [k] update_curr
     3.22%  test_select_sma  ld-2.12.so           [.] _dl_sysinfo_int80
     2.83%  test_select_sma  [kernel.kallsyms]    [k] native_sched_clock
     2.72%  test_select_sma  [kernel.kallsyms]    [k] find_next_bit
     2.69%  test_select_sma  [kernel.kallsyms]    [k] cpumask_next_and
     2.58%  test_select_sma  [kernel.kallsyms]    [k] native_write_msr_safe
     2.47%  test_select_sma  [kernel.kallsyms]    [k] sched_clock_local
     2.39%  test_select_sma  [kernel.kallsyms]    [k] read_tsc
     2.26%  test_select_sma  [kernel.kallsyms]    [k] do_select
     2.13%  test_select_sma  [kernel.kallsyms]    [k] restore_nocheck

Daha yüksek CPU kullanımı zamanlayıcıdan geliyor gibi görünüyor. Ben de bunlardan 100 tanesini aynı anda başlatmak için aşağıdaki bash betiğini kullandım:

#!/bin/bash

for i in {1..100}
do
  ./test_select_small &
done

RHEL 5'te CPU kullanımı% 0'a yakındır, ancak RHEL 6'da hem kullanıcı hem de sistemde önemsiz miktarda CPU kullanımı vardır. Bunun gerçek kaynağını nasıl izleyeceğiniz ve umarım düzeltebileceğiniz hakkında herhangi bir fikir var mı?

Ayrıca bu testi mevcut bir Arch Linux yapısında ve Ubuntu 11.10'da denedim ve benzer davranışlar gördüm, bu yüzden bu sadece bir RHEL sorunu değil, bir tür çekirdek sorunu gibi görünüyor.

GÜNCELLEME2: Büyük bir tartışma olduğunu biliyorum çünkü bunu gündeme getirmek için biraz tereddüt ediyorum, ancak Ubuntu 11.10'daki BFS yamalarıyla bir çekirdek denedim ve aynı yüksek sistem CPU kullanımını göstermedi (kullanıcı cpu kullanımı hakkında görünüyordu aynısı).

Bu yüksek CPU kullanımının yapay olarak yüksek görünmesini sağlayan CPU kullanımının hesabında sadece bir fark olup olmadığını test etmek için her biri ile çalışabileceğim bazı testler var mı? Veya gerçek CPU döngüleri CFS tarafından çalınıyorsa?

GÜNCELLEME3: Bu soruyu içeren analiz, bunun zamanlayıcı ile ilgili bir şey olduğunu gösteriyor gibi görünüyor, bu yüzden sonuçları tartışmak için yeni bir soru oluşturdum .

GÜNCELLEME4: Diğer soruya biraz daha bilgi ekledim .

GÜNCELLEME5: Diğer soruya , sorunu hala gösteren daha basit bir testten bazı sonuçlar ekledim .


Görünüşe göre RedHat bunu GLibC'ye saptadı. Bununla ilgili kod değişiklikleri aradınız mı select?
Nils

Glibc kategorizasyonu, bugzilla'yı ilk gönderdiğimde benim tarafımdan yapıldı.
Dave Johansen

Kernel probleminden ziyade bana mantıklı geliyor. Birden fazla eşzamanlı uykuda benzer sonuçlar alıyor musunuz? Ubuntu 11.10, Arch Linux ve RHEL6'dan glibc sürümleri nelerdir?
Nils

Evet, aynı sonuç hem anket hem de uykuda 1 ms boyunca uyku ile. Glibc'e göre, RHEL 5 2.5, RHEL 6 2.12, Ubuntu 11.10 2.13 ve kemer 2.15 olduğuna inanıyorum ama kontrol etmek zorundayım.
Dave Johansen

Bu orijinal sorunun cevabını kendiniz buldunuz. Burada cevap olarak gönderin ve puan kazanın!
Nils

Yanıtlar:


1

Sen sor:

Bu yüksek CPU kullanımının yapay olarak yüksek görünmesini sağlayan CPU kullanımının hesabında sadece bir fark olup olmadığını test etmek için her biri ile çalışabileceğim bazı testler var mı? Veya gerçek CPU döngüleri CFS tarafından çalınıyorsa?

test_select_smallProgramınızı çalıştırırken bir CPU karşılaştırması çalıştırdıysanız ve performansının ana bilgisayar işletim sistemi sürümüne bağlı olarak değişip değişmediğine bakın?

Birçok seçenek var: klasik tavsiye her zaman "sahip olacağınız yükü temsil eden bir şey kullanın" dır. Ama havalı çocuklar her zaman povray kullandılar


1
Sanırım bahsettiğim fikir buydu. Kullanabileceğim tutarlı zamanlama sonuçları veren böyle bir kıyaslama uygulamasına ilişkin bir tavsiyeniz var mı?
Dave Johansen

@DaveJohansen - povray üzerine not eklendi
ckhan

Ne yazık ki, RHEL ile birlikte gelmedikçe, bu sistemlerde herhangi bir yazılım almak en az bir veya iki hafta sürebilir. Kendi küçük test programımı yaptım ve sonuçları tartışmak için yeni bir soru oluşturdum .
Dave Johansen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.