01/10/2018, 14:41

Việc set limit time & memory cho process nhiều lần có tốt không?

Mình có các nhóm process, mỗi nhóm có 1 limit time & memory riêng:

  • 1s, 256MB
  • 2s, 512MB
  • 1.5s, 300MB
  • 4s, 1024MB

Có 2 hướng để thực thi các process này:

for process_group:
    for process in process_group:
        for limit in limit_group:
            setlimit(limit)
            run(process, limit)

hoặc

for limit in limit_group:
    setlimit(limit)
    for process_group:
        for process in process_group:
            run(process, limit)

Liệu làm theo cách 1 có tốt không (về mặt thời gian, mức độ làm việc của máy)? Hay phải chuyển sang cách 2?

Mình đang sử dụng Python.

Nguyen Ca viết 16:44 ngày 01/10/2018

for process in process_group:
for limit in limit_group:

như vậy 1 process nó run n lần dựa vào n limit ah?
bên dưới cũng tương tự.-.-

HK boy viết 16:49 ngày 01/10/2018

Đúng rồi ạ.

20 char…

Nguyen Ca viết 16:48 ngày 01/10/2018

Anh không có ý kiến, ko biết python nhờ @Gio xem nào -.-

*grab popcorn* viết 16:52 ngày 01/10/2018

Cho xin thông tin/code 2 hàm setilmit với run() đi HK Boy

HK boy viết 16:51 ngày 01/10/2018

Hàm setlimit:

def setlimit(limit):  # limit là 1 tuple (time_limit, mem_limit)
    resource.setrlimit(resource.RLIMIT_CPU, (limit[0], limit[0]))  # time_limit
    resource.setrlimit(resource.RLIMIT_VMEM, (limit[1], limit[1]))  # mem_limit

Hàm run:

def run(process):  # chỉ đơn giản là chạy process với subprocess.Popen
    p = subprocess.Popen(process, ...)
    p.communicate()
    ...
*grab popcorn* viết 16:50 ngày 01/10/2018

Lượn vài vòng thì thấy setrlimit gọi một system call cùng tên
Về việc khi gọi một system call khá tốn chi phí. Thế nên hãy hạn chế gọi nó.

Popen cũng gọi một system call khác là exec để thực thi binary, tạo ra child process.

Tuy nhiên về chi phí thực của 2 system call này như thế nào thì mình có search nhưng setrlimit thì không ra, bù lại exec thì đây:

stackoverflow.com
Bose

Is execv() expensive?

c, linux, unix, kernel
asked by Bose on 03:08PM - 25 Sep 15

Và link trên cũng nói là việc gọi exec lần 2 sẽ ít tốn chi phí hơn. Thế nên theo ý kiến cá nhân với những gì hỏi anh Gồ được thì nhận xét TH2 code sẽ chạy tốt hơn vì việc gọi system call của nó ít hơn TH1, và việc gọi exec liên tục sẽ đỡ tốn chi phí hơn.

P/s: Vì HK Boy dùng module resource, nên code đang chạy trên môi trường linux -> đoạn trên chỉ nói cho linux là vậy

Bài liên quan
0