Câu hỏi cách đếm số lượng người dùng đang hoạt động trong kernel


Chúng ta đang sử dụng kernel phiên bản 2.4-20 và chúng ta cần đếm số lượng người dùng đang hoạt động, trong chế độ kernel. Mục tiêu là thay đổi lịch trình, vì vậy chúng tôi đang ở trong sched.c, sửa đổi lịch biểu () chức năng.

Những gì chúng tôi làm là đếm số người dùng trong macro list_for_each.

list_for_each(tmp, &runqueue_head) {
    p = list_entry(tmp, struct task_struct, run_list);
    if (can_schedule(p, this_cpu)) {
        if (unique(p->uid)) add_new_user(p->uid);
        int weight = goodness(p, this_cpu, prev->active_mm);
        if (weight > c)
            c = weight, next = p;
    }
}

về cơ bản là thêm người dùng duy nhất vào danh sách. Tuy nhiên, chúng tôi nhận được kết quả ngẫu nhiên. Có cách nào cụ thể để giải quyết vấn đề này?

Cảm ơn bạn.


9
2018-05-16 17:41


gốc


Bạn có ý nghĩa gì bởi 'kết quả ngẫu nhiên'? - ArjunShankar
Lúc đầu, chúng tôi tính người dùng trong hàm goodness (), ở đó chúng tôi có số lượng tùy ý hoàn toàn (mặc dù chúng tôi có 4 người dùng đang chạy cùng một lúc, nhưng chúng tôi có thể nhận được 1 người dùng là kết quả). trong lịch biểu (), chúng tôi dường như có giá trị nhất quán nhưng chúng tôi không chắc chắn, vì lịch biểu () được chạy thường xuyên, chúng tôi cần lấy mẫu (một lần trong 5000 lượt). Tôi đoán không có trường nào trong kernel chứa người dùng đang hoạt động hiện tại? nếu không, cách tốt nhất để đếm chúng là gì? Cám ơn phản hồi của bạn. - Halil Kaskavalci
Cảm ơn bạn đã làm rõ. Tôi không biết câu trả lời cho điều này. Ý định của tôi là chỉ ra rằng câu hỏi không hoàn toàn rõ ràng. Tôi muốn đề nghị chỉnh sửa điều này vào câu hỏi. Chúc may mắn! - ArjunShankar
Vì vậy, nhiều chức năng không phải người dùng thực sự là trong các thư viện không gian người dùng ("các đối tượng chia sẻ") chứ không phải thực sự bên trong hạt nhân mà tôi sợ tìm ra bao nhiêu người dùng thực sự bên trong hạt nhân tại bất kỳ thời điểm nào. và rất không ổn định. - Chuck Kollars


Các câu trả lời:


Bạn có thể thử đếm người dùng bên trong macro for_each_task. Điều này dẫn đến việc đếm những người dùng có nhiệm vụ bị chặn do I / O hoặc bất kỳ lý do nào khác. Điều này sẽ cung cấp kết quả tốt hơn vì bạn không thể đảm bảo có thể đếm những người dùng chạy các quy trình tương tác nếu bạn sử dụng hàng đợi chạy.


1
2018-06-02 18:33



điều đó có ý nghĩa. nhưng trước tiên chúng tôi đã tính người dùng trong chức năng tốt, đó có thể là nguyên nhân dẫn đến kết quả ngẫu nhiên. Tôi không có lời giải thích cho điều đó. Đối với một số lý do, for_each_task trong chức năng lịch biểu hoạt động. Cảm ơn! - Halil Kaskavalci


Điều này có hiệu quả không? ai | awk '{print $ 1}' | sắp xếp


0
2018-06-04 19:18



bạn có thể lấy số lượng. - Keshi
Tôi đang ở trong hạt nhân, tôi không thể sử dụng các cuộc gọi hệ thống cũng như các chương trình đầu cuối. - Halil Kaskavalci