提交 136e26ae 编写于 作者: Y Yifan Wu

User base from 0x0->0x10000; user image size limit from 128MB->16MB; trigger race condition on k210

上级 24b3c82b
...@@ -56,13 +56,13 @@ fn easy_fs_pack() -> std::io::Result<()> { ...@@ -56,13 +56,13 @@ fn easy_fs_pack() -> std::io::Result<()> {
.write(true) .write(true)
.create(true) .create(true)
.open(format!("{}{}", target_path, "fs.img"))?; .open(format!("{}{}", target_path, "fs.img"))?;
f.set_len(128 * 2048 * 512).unwrap(); f.set_len(16 * 2048 * 512).unwrap();
f f
}))); })));
// 128MiB, at most 4095 files // 16MiB, at most 4095 files
let efs = EasyFileSystem::create( let efs = EasyFileSystem::create(
block_file.clone(), block_file.clone(),
128 * 2048, 16 * 2048,
1, 1,
); );
let root_inode = Arc::new(EasyFileSystem::root_inode(&efs)); let root_inode = Arc::new(EasyFileSystem::root_inode(&efs));
......
...@@ -49,7 +49,7 @@ env: ...@@ -49,7 +49,7 @@ env:
sdcard: fs-img sdcard: fs-img
@echo "Are you sure write to $(SDCARD) ? [y/N] " && read ans && [ $${ans:-N} = y ] @echo "Are you sure write to $(SDCARD) ? [y/N] " && read ans && [ $${ans:-N} = y ]
@sudo dd if=/dev/zero of=$(SDCARD) bs=1048576 count=256 @sudo dd if=/dev/zero of=$(SDCARD) bs=1048576 count=32
@sudo dd if=$(FS_IMG) of=$(SDCARD) @sudo dd if=$(FS_IMG) of=$(SDCARD)
$(KERNEL_BIN): kernel $(KERNEL_BIN): kernel
...@@ -57,7 +57,7 @@ $(KERNEL_BIN): kernel ...@@ -57,7 +57,7 @@ $(KERNEL_BIN): kernel
fs-img: $(APPS) fs-img: $(APPS)
@cd ../user && make build @cd ../user && make build
@rm $(FS_IMG) @rm $(FS_IMG) -f
@cd ../easy-fs-fuse && cargo run --release -- -s ../user/src/bin/ -t ../user/target/riscv64gc-unknown-none-elf/release/ @cd ../easy-fs-fuse && cargo run --release -- -s ../user/src/bin/ -t ../user/target/riscv64gc-unknown-none-elf/release/
$(APPS): $(APPS):
......
...@@ -15,4 +15,4 @@ pub fn get_time_ms() -> usize { ...@@ -15,4 +15,4 @@ pub fn get_time_ms() -> usize {
pub fn set_next_trigger() { pub fn set_next_trigger() {
set_timer(get_time() + CLOCK_FREQ / TICKS_PER_SEC); set_timer(get_time() + CLOCK_FREQ / TICKS_PER_SEC);
} }
\ No newline at end of file
...@@ -5,20 +5,21 @@ ...@@ -5,20 +5,21 @@
extern crate user_lib; extern crate user_lib;
extern crate alloc; extern crate alloc;
use user_lib::{exit, thread_create, waittid}; use user_lib::{exit, thread_create, waittid, get_time};
use alloc::vec::Vec; use alloc::vec::Vec;
static mut A: usize = 0; static mut A: usize = 0;
const PER_THREAD: usize = 10000000; const PER_THREAD: usize = 2000000;
const THREAD_COUNT: usize = 50; const THREAD_COUNT: usize = 8;
unsafe fn f() -> ! { unsafe fn f() -> ! {
let start = get_time();
for _ in 0..PER_THREAD { for _ in 0..PER_THREAD {
let a = &mut A as *mut usize; let a = &mut A as *mut usize;
let cur = a.read_volatile(); let cur = a.read_volatile();
a.write_volatile(cur + 1); a.write_volatile(cur + 1);
} }
exit(0) exit((get_time() - start) as i32)
} }
#[no_mangle] #[no_mangle]
...@@ -27,10 +28,13 @@ pub fn main() -> i32 { ...@@ -27,10 +28,13 @@ pub fn main() -> i32 {
for _ in 0..THREAD_COUNT { for _ in 0..THREAD_COUNT {
v.push(thread_create(f as usize) as usize); v.push(thread_create(f as usize) as usize);
} }
let mut time_cost = Vec::new();
for tid in v.iter() { for tid in v.iter() {
waittid(*tid); time_cost.push(waittid(*tid));
}
for (i, cost) in time_cost.iter().enumerate() {
println!("cost of thread#{} is {}ms", i, cost);
} }
assert_eq!(unsafe { A }, PER_THREAD * THREAD_COUNT); assert_eq!(unsafe { A }, PER_THREAD * THREAD_COUNT);
println!("total = {}", unsafe { A });
0 0
} }
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
OUTPUT_ARCH(riscv) OUTPUT_ARCH(riscv)
ENTRY(_start) ENTRY(_start)
BASE_ADDRESS = 0x0; BASE_ADDRESS = 0x10000;
SECTIONS SECTIONS
{ {
...@@ -29,4 +29,4 @@ SECTIONS ...@@ -29,4 +29,4 @@ SECTIONS
*(.eh_frame) *(.eh_frame)
*(.debug*) *(.debug*)
} }
} }
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册