Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

"palloc out of physical memory" problem with changed "make os" #295

Open
mhatzl opened this issue Oct 7, 2021 · 7 comments
Open

"palloc out of physical memory" problem with changed "make os" #295

mhatzl opened this issue Oct 7, 2021 · 7 comments

Comments

@mhatzl
Copy link

mhatzl commented Oct 7, 2021

The line ./selfie -l selfie.m -m 2 -l selfie.m -y 1 -l selfie.m -m 1 introduced with commit d17ddca for "make os" is too restrictive with memory.

Adding ~1000 lines of code to the current base selfie implementation results in palloc out of physical memory.

For me, using ./selfie -l selfie.m -m 3 -l selfie.m -y 2 -l selfie.m -m 1 resolved this error.

@ckirsch
Copy link
Member

ckirsch commented Oct 8, 2021

@mhatzl Interesting! I am not seeing this issue on my Mac. Could you please post your output here?

@mhatzl
Copy link
Author

mhatzl commented Oct 8, 2021

The output I get when running make os under Windows WSL is:

./selfie -l selfie.m -m 2 -l selfie.m -y 1 -l selfie.m -m 1
./selfie: this is the selfie system from selfie.cs.uni-salzburg.at with
./selfie: 64-bit unsigned integers and 64-bit pointers hosted on Linux
./selfie: 192752 bytes with 43458 instructions and 14824 bytes of data loaded from selfie.m
./selfie: selfie executing selfie.m with 2MB physical memory on mipster
./selfie: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
selfie.m: this is the selfie system from selfie.cs.uni-salzburg.at with
selfie.m: 64-bit unsigned integers and 64-bit pointers hosted on selfie
selfie.m: 192752 bytes with 43458 instructions and 14824 bytes of data loaded from selfie.m
selfie.m: selfie executing selfie.m with 1MB physical memory on hypster
selfie.m: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
selfie.m: this is the selfie system from selfie.cs.uni-salzburg.at with
selfie.m: 64-bit unsigned integers and 64-bit pointers hosted on selfie
selfie.m: 192752 bytes with 43458 instructions and 14824 bytes of data loaded from selfie.m
selfie.m: selfie executing selfie.m with 1MB physical memory on mipster
selfie.m: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
synopsis: selfie.m { -c { source } | -o binary | ( -s | -S ) assembly | -l binary } [ ( -m | -d | -r | -y ) 0-4096 ... ]
selfie.m: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
selfie.m: selfie.m exiting with exit code 0
selfie.m: selfie terminating selfie.m with exit code 0
selfie.m: --------------------------------------------------------------------------------
selfie.m: summary: 59944 executed instructions [22.31% nops]
selfie.m: 0.00MB allocated in 6 mallocs
selfie.m: 0.00MB(100.00% of 0.00MB) actually accessed
selfie.m: 0.20MB(20.31% of 1MB) mapped memory
selfie.m: --------------------------------------------------------------------------------
selfie.m: init: lui: 276(0.46%)[0.00%], addi: 23451(39.12%)[19.12%]
selfie.m: memory: ld: 13937(23.25%)[14.09%], sd: 8737(14.57%)[46.24%]
selfie.m: compute: add: 1715(2.86%)[5.94%], sub: 668(1.11%)[19.16%], mul: 1514(2.52%)[9.64%]
selfie.m: compute: divu: 658(1.09%)[7.75%], remu: 667(1.11%)[14.99%]
selfie.m: compare: sltu: 985(1.64%)[25.48%]
selfie.m: control: beq: 1253(2.09%)[62.17%], jal: 4026(6.71%)[33.06%], jalr: 1925(3.21%)[0.00%]
selfie.m: system: ecall: 132(0.22%)
selfie.m: profile: total,max(ratio%)@address,2ndmax,3rdmax
selfie.m: calls: 1925,659(34.23%)@0x4668,329(17.09%)@0x4818,329(17.09%)@0x487C
selfie.m: loops: 186,78(41.93%)@0x6ECC,63(33.87%)@0x214,45(24.19%)@0x610C
selfie.m: loads: 13937,659(4.72%)@0x467C,659(4.72%)@0x4680,659(4.72%)@0x4690
selfie.m: stores: 8737selfie.m: palloc out of physical memory
./selfie: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
./selfie: selfie.m exiting with exit code 21
./selfie: selfie terminating selfie.m with exit code 21
./selfie: --------------------------------------------------------------------------------
./selfie: summary: 198654870 executed instructions [18.81% nops]
./selfie: 3.63MB allocated in 28 mallocs
./selfie: 2.30MB(63.26% of 3.63MB) actually accessed
./selfie: 2.52MB(126.18% of 2MB) mapped memory
./selfie: --------------------------------------------------------------------------------
./selfie: init: lui: 7039562(3.54%)[0.01%], addi: 75054225(37.78%)[18.13%]
./selfie: memory: ld: 41616354(20.94%)[18.49%], sd: 26520261(13.35%)[24.65%]
./selfie: compute: add: 11198618(5.63%)[3.44%], sub: 3389631(1.70%)[22.87%], mul: 3625857(1.82%)[16.20%]
./selfie: compute: divu: 1564809(0.78%)[5.99%], remu: 572866(0.28%)[23.29%]
./selfie: compare: sltu: 4036030(2.03%)[2.68%]
./selfie: control: beq: 4890881(2.46%)[56.60%], jal: 12953942(6.52%)[36.12%], jalr: 6160685(3.10%)[0.00%]
./selfie: system: ecall: 31149(0.01%)
./selfie: profile: total,max(ratio%)@address,2ndmax,3rdmax
./selfie: calls: 6160700,912340(14.80%)@0x4668,516633(8.38%)@0x1976C,393294(6.38%)@0x4818
./selfie: loops: 452566,311789(68.89%)@0x22FAC,59945(13.24%)@0x22F10,43458(9.60%)@0x26B6C
./selfie: loads: 41616354,912340(2.19%)@0x467C,912340(2.19%)@0x4680,912340(2.19%)@0x4690
./selfie: stores: 26520261,912340(3.44%)@0x466C,912340(3.44%)@0x4674,516633(1.94%)@0x19770
./selfie: CPU+memory: reads+writes,reads,writes[reads/writes]
./selfie: heap segment: 3162086,2909742,252344[11.53]
./selfie: gp register: 8981899,8981897,2[4490948.50]
./selfie: data segment: 8987943,8165060,822883[9.92]
./selfie: ra register: 24580481,12290240,12290241[0.99]
./selfie: sp register: 121457478,79749654,41707824[1.91]
./selfie: s0 register: 42463020,30203923,12259097[2.46]
./selfie: stack total: 188500979,122243817,66257162[1.84]
./selfie: stack segment: 55987635,30542593,25445042[1.20]
./selfie: a0 register: 17211537,5512320,11699217[0.47]
./selfie: a1 register: 31085,0,31085[0.00]
./selfie: a2 register: 28670,0,28670[0.00]
./selfie: a3 register: 3,0,3[0.00]
./selfie: a6 register: 2416,2415,1[2415.00]
./selfie: a7 register: 31149,0,31149[0.00]
./selfie: args total: 17304860,5514735,11790125[0.46]
./selfie: t0 register: 92553607,46276933,46276674[1.00]
./selfie: t1 register: 46835914,23418016,23417898[1.00]
./selfie: t2 register: 12606606,6303303,6303303[1.00]
./selfie: t3 register: 426982,213491,213491[1.00]
./selfie: temps total: 152423109,76211743,76211366[1.00]
./selfie: --------------------------------------------------------------------------------
make: *** [Makefile:90: os] Error 21


I have added the following lines to selfie.c. They do nothing except taking up space.

// mhatzl

uint64_t* search_field_entry1(uint64_t* fields, char* name) {
uint64_t* field_entry;

printf(name);

field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}

uint64_t* search_field_entry2(uint64_t* fields, char* name) {
uint64_t* field_entry;

printf(name);

field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}

uint64_t* search_field_entry3(uint64_t* fields, char* name) {
uint64_t* field_entry;

printf(name);

field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}

uint64_t* search_field_entry4(uint64_t* fields, char* name) {
uint64_t* field_entry;

printf(name);

field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}

uint64_t* search_field_entry5(uint64_t* fields, char* name) {
uint64_t* field_entry;

printf(name);

field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}

uint64_t* search_field_entry6(uint64_t* fields, char* name) {
uint64_t* field_entry;

printf(name);

field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}

uint64_t* search_field_entry7(uint64_t* fields, char* name) {
uint64_t* field_entry;

printf(name);

field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}

uint64_t* search_field_entry8(uint64_t* fields, char* name) {
uint64_t* field_entry;

printf(name);

field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}

uint64_t* search_field_entry9(uint64_t* fields, char* name) {
uint64_t* field_entry;

printf(name);

field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}

uint64_t* search_field_entry10(uint64_t* fields, char* name) {
uint64_t* field_entry;

printf(name);

field_entry = fields;
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
while (field_entry != (uint64_t*) 0)
{
field_entry = get_next_entry(field_entry);
}
return (uint64_t *) 0; // no field with this name found
}

// mhatzl

@ckirsch
Copy link
Member

ckirsch commented Oct 9, 2021

@mhatzl Please try: ./selfie -l selfie.m -m 2 -l selfie1.m -y 2 -l selfie2.m -m 1 after duplicating selfie.m to selfie1.m and selfie2.m

@mhatzl
Copy link
Author

mhatzl commented Oct 9, 2021

This works.

As a sidenote, running ./selfie -l selfie.m -m 2 -l selfie1.m -y 1 -l selfie2.m -m 1 results in

./selfie -l selfie.m -m 2 -l selfie1.m -y 1 -l selfie2.m -m 1
./selfie: this is the selfie system from selfie.cs.uni-salzburg.at with
./selfie: 64-bit unsigned integers and 64-bit pointers hosted on Linux
./selfie: 192752 bytes with 43458 instructions and 14824 bytes of data loaded from selfie.m
./selfie: selfie executing selfie.m with 2MB physical memory on mipster
./selfie: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
selfie.m: this is the selfie system from selfie.cs.uni-salzburg.at with
selfie.m: 64-bit unsigned integers and 64-bit pointers hosted on selfie
selfie.m: 192752 bytes with 43458 instructions and 14824 bytes of data loaded from selfie1.m
selfie.m: selfie executing selfie1.m with 1MB physical memory on hypster
selfie.m: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
selfie1.m: this is the selfie system from selfie.cs.uni-salzburg.at with
selfie1.m: 64-bit unsigned integers and 64-bit pointers hosted on selfie
selfie1.m: 192752 bytes with 43458 instructions and 14824 bytes of data loaded from selfie2.m
selfie1.m: selfie executing selfie2.m with 1MB physical memory on mipster
selfie1.m: >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
synopsis: selfie2.m { -c { source } | -o binary | ( -s | -S ) assembly | -l binary } [ ( -m | -d | -r | -y ) 0-4096 ... ]
selfie1.m: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
selfie1.m: selfie2.m exiting with exit code 0
selfie1.m: selfie terminating selfie2.m with exit code 0
selfie1.m: --------------------------------------------------------------------------------
selfie1.m: summary: 60310 executed instructions [22.32% nops]
selfie1.m:          0.00MB allocated in 6 mallocs
selfie1.m:          0.00MB(100.00% of 0.00MB) actually accessed
selfie1.m:          0.20MB(20.31% of 1MB) mapped memory
selfie1.m: --------------------------------------------------------------------------------
selfie1.m: init:    lui: 278(0.46%)[0.00%], addi: 23594(39.12%)[19.13%]
selfie1.m: memory:  ld: 14022(23.25%)[14.11%], sd: 8791(14.57%)[46.22%]
selfie1.m: compute: add: 1725(2.86%)[5.97%], sub: 672(1.11%)[19.19%], mul: 1522(2.52%)[9.72%]
selfie1.m: compute: divu: 662(1.09%)[7.85%], remu: 671(1.11%)[14.90%]
selfie1.m: compare: sltu: 991(1.64%)[25.53%]
selfie1.m: control: beq: 1261(2.09%)[62.17%], jal: 4051(6.71%)[33.05%], jalr: 1937(3.21%)[0.00%]
selfie1.m: system:  ecall: 133(0.22%)
selfie1.m: profile: total,max(ratio%)@address,2ndmax,3rdmax
selfie1.m: calls:   1937,663(34.22%)@0x4668,331(17.08%)@0x4818,331(17.08%)@0x487C
selfie1.m: loops:   187,78(41.71%)@0x6ECC,63(33.69%)@0x214,46(24.59%)@0x610C
selfie1.m: loads:   14022,663(4.72%)@0x467C,663(4.72%)@0x4680,663(4.72%)@0x4690
selfie1.m: stores:  8791selfie.m: palloc out of physical memory
./selfie: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
./selfie: selfie.m exiting with exit code 21
./selfie: selfie terminating selfie.m with exit code 21
./selfie: --------------------------------------------------------------------------------
./selfie: summary: 199512291 executed instructions [18.81% nops]
./selfie:          3.63MB allocated in 28 mallocs
./selfie:          2.30MB(63.26% of 3.63MB) actually accessed
./selfie:          2.52MB(126.18% of 2MB) mapped memory
./selfie: --------------------------------------------------------------------------------
./selfie: init:    lui: 7072966(3.54%)[0.01%], addi: 75384583(37.78%)[18.13%]
./selfie: memory:  ld: 41789850(20.94%)[18.48%], sd: 26634870(13.35%)[24.66%]
./selfie: compute: add: 11248386(5.63%)[3.44%], sub: 3403945(1.70%)[22.86%], mul: 3640852(1.82%)[16.19%]
./selfie: compute: divu: 1569680(0.78%)[6.01%], remu: 576266(0.28%)[23.29%]
./selfie: compare: sltu: 4051091(2.03%)[2.69%]
./selfie: control: beq: 4910113(2.46%)[56.62%], jal: 13010205(6.52%)[36.12%], jalr: 6188240(3.10%)[0.00%]
./selfie: system:  ecall: 31244(0.01%)
./selfie: profile: total,max(ratio%)@address,2ndmax,3rdmax
./selfie: calls:   6188255,917822(14.83%)@0x4668,518109(8.37%)@0x1976C,395714(6.39%)@0x4818
./selfie: loops:   453036,311789(68.82%)@0x22FAC,60311(13.31%)@0x22F10,43458(9.59%)@0x26B6C
./selfie: loads:   41789850,917822(2.19%)@0x467C,917822(2.19%)@0x4680,917822(2.19%)@0x4690
./selfie: stores:  26634870,917822(3.44%)@0x466C,917822(3.44%)@0x4674,518109(1.94%)@0x19770
./selfie: CPU+memory:    reads+writes,reads,writes[reads/writes]
./selfie: heap segment:  3175327,2921678,253649[11.51]
./selfie: gp register:   9026388,9026386,2[4513193.00]
./selfie: data segment:  9032432,8204513,827919[9.90]
./selfie: ra register:   24690511,12345255,12345256[0.99]
./selfie: sp register:   121997189,80103960,41893229[1.91]
./selfie: s0 register:   42634267,30320250,12314017[2.46]
./selfie: stack total:   189321967,122769465,66552502[1.84]
./selfie: stack segment: 56218010,30664700,25553310[1.20]
./selfie: a0 register:   17288065,5536720,11751345[0.47]
./selfie: a1 register:   31180,0,31180[0.00]
./selfie: a2 register:   28734,0,28734[0.00]
./selfie: a3 register:   3,0,3[0.00]
./selfie: a6 register:   2447,2446,1[2446.00]
./selfie: a7 register:   31244,0,31244[0.00]
./selfie: args total:    17381673,5539166,11842507[0.46]
./selfie: t0 register:   92952767,46476513,46476254[1.00]
./selfie: t1 register:   47029104,23514611,23514493[1.00]
./selfie: t2 register:   12650928,6325464,6325464[1.00]
./selfie: t3 register:   429310,214655,214655[1.00]
./selfie: temps total:   153062109,76531243,76530866[1.00]
./selfie: --------------------------------------------------------------------------------
make: *** [Makefile:90: os] Error 21

So it looks to me that running hypster with 1 MB was the problem.

@ckirsch
Copy link
Member

ckirsch commented Oct 9, 2021

@mhatzl Ok, the issue is hypster then. What we actually need for proper diagnosis is hypster outputting an execution profile similar to mipster but with a focus on memory and ecalls performed on behalf of the virtualized process. That would have revealed the root cause. Would you be interested in implementing that in a PR?

@mhatzl
Copy link
Author

mhatzl commented Oct 9, 2021

Unfortunately, I currently do not have enough time.

@danielkocher
Copy link
Contributor

I looked into this a little more. The os target in the current configuration seems to cause troubles once the students start to implement the first "real" assignment. I implemented the assembler-parser assignment locally and I got the same error palloc out of physical memory after my first commit, in which I basically only added

  1. the definitions of the RISC-U instruction symbols,
  2. the definition of a function called is_hex_digit(uint64_t c) - to parse hexadecimal numbers,
  3. the definition of a function get_assembly_symbol() - the assembly pendant to get_symbol() for C*, and
  4. the declaration of some other functions (without definitions).

As discussed, I will open a Pull Request to change the os target in the Makefile to used 2MB for hypster (instead of 1MB), and I will look into this issue in more detail when I have time (as proposed in #295 (comment)).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants