2010-05-26 34 views
10

Tôi phải xây dựng một mô phỏng với C#. Trình mô phỏng này sẽ có thể chạy chuỗi thứ hai với tốc độ CPU có thể cấu hình và kích thước RAM giới hạn, ví dụ: 144MHz và 50 MB.
Tất nhiên tôi biết rằng một trình mô phỏng không bao giờ có thể chính xác như phần cứng thực. Nhưng tôi cố gắng để có được hiệu suất gần như tương tự.
Hiện tại tôi đang nghĩ đến việc tạo một chuỗi mà thỉnh thoảng tôi sẽ dừng/ngủ. Tùy thuộc vào tốc độ CPU mong muốn, trình mô phỏng nên điều chỉnh thời gian ngủ của luồng này và do đó mô phỏng tần số CPU khác nhau. Để đo tốc độ đạt được tôi mặc dù về việc sử dụng PerformanceCounters. Nhưng với cách tiếp cận này tôi có vấn đề mà tôi không biết làm thế nào để hạn chế kích thước RAM mà thread có thể sử dụng.
Bạn có ý tưởng nào về cách nhận ra mô phỏng như vậy không?
Làm thế nào để mô phỏng tần số CPU khác nhau và giới hạn RAM

Cảm ơn trước !!

+0

+1 vì tôi muốn biết câu trả lời. Nhưng tôi sợ bạn đang ở trong nước quá sâu –

+0

Nhìn vào phân bổ đấu trường để hạn chế bộ nhớ với tổng số cụ thể. – WhirlWind

+3

xin lưu ý rằng tốc độ clock không thực sự là thước đo tốt cho hiệu suất. Trên một lõi của Core2Duo của tôi được ép xung xuống 1GHz, tôi nhận được hiệu năng tốt hơn so với Pentium 2.5 GHz 4. Nếu bạn đang cố gắng tìm hiểu cách phần mềm của bạn chạy trên một thiết bị cụ thể, bạn nên thử giả lập thực tế Chip. – back2dos

Trả lời

1

Nếu bạn đang quan tâm mô phỏng một môi trường hệ điều hành sau đó một câu trả lời sẽ được sử dụng một môi trường máy ảo, nơi bạn có thể kiểm soát các thông số bộ nhớ và CPU vv

Các luồng tạm dừng \ dừng có thể giúp bạn để mô phỏng CPU tần số, nhưng điều này sẽ được terribly không chính xác như khi bạn tạm dừng các chủ đề nó sẽ được de-lịch trình, sau đó nó lên đến hệ điều hành để sắp xếp lại nó tại một số "ngẫu nhiên" điểm trong thời gian tức là một điểm mà bạn có không kiểm soát được.

Đối với giới hạn bộ nhớ, bắt đầu một quá trình mới mà sẽ tổ chức mã của bạn là một lựa chọn, và sau đó giới hạn bộ nhớ của quá trình đó, ví dụ:

http://www.codeproject.com/KB/threads/Setting_Max_Memory_Limit.aspx

này sẽ không thực sự mô phỏng hệ điều hành tổng thể bộ nhớ hạn chế mặc dù.

+0

Đối với tất cả các máy ảo tôi thấy cho đến nay có vấn đề là tôi không thể cấu hình tốc độ CPU.Ngoài ra tôi có vấn đề mà tôi có thể giới hạn kích thước bộ nhớ cho toàn bộ VM chỉ và không cho một quá trình cụ thể/thread. Cách tiếp cận thứ hai với việc bắt đầu một quy trình mới và kiểm soát nó là một ý tưởng tốt. – geiserbua

+1

Bạn thường có thể chỉ định phần trăm tài nguyên CPU nào được cấp cho máy ảo, do đó, điều này tạo ra một cách "thô" để hạn chế tài nguyên CPU. Bạn có thể làm điều này trên Hyper-V ít nhất. PS Nếu bạn thích câu trả lời của mọi người - hãy bỏ phiếu cho họ. :) –

3

Bộ nhớ giới hạn rất dễ dàng với các máy ảo như vmware. Bạn có thể thay đổi tốc độ CPU với một số công cụ ép xung. Ví dụ: http://cpu.rightmark.org/products/rmclock.shtml Chúc bạn may mắn!

+1

+1. Ảo hóa có lẽ là ý tưởng tốt nhất. Nó có ý nghĩa cho một máy ảo cũng thực hiện một nắp CPU (chu kỳ/mili giây có thể?), Ví dụ nếu được sử dụng để có một máy chủ ảo. Vì vậy, tôi muốn xem liệu có một lựa chọn cho điều đó. – back2dos

+0

Vấn đề với máy ảo là không có cách nào để thay đổi tốc độ CPU – geiserbua

0

Một luồng để gỡ bỏ phần mềm thực thi phần mềm khách của bạn?

Tôi nghĩ rằng nó hoạt động nhưng một chút lạ, giống như nhanh về phía trước, tạm dừng, ff, tạm dừng, vv ...

Nếu bạn chỉ muốn giảm tốc độ một quá trình, hãy thử này: sử dụng cpu đơn các tính năng bước và "gỡ lỗi" quy trình. Bạn phải viết một trình xử lý tùy chỉnh cho cái bẫy bước đơn CPU. Công việc xử lý của bạn chỉ là một vòng lặp lớn của NOP.

Bạn có một sự chậm trễ tốt giữa mỗi hướng dẫn.

Các vấn đề liên quan